Implement virtualizable containers
This commit is contained in:
parent
41650c4106
commit
f53b7952fa
|
@ -0,0 +1,13 @@
|
|||
using System.Collections.Generic;
|
||||
|
||||
namespace LyokoCMD.Sim.Virtual {
|
||||
public interface IVirtualizableContainer {
|
||||
List<Virtualizable> Objects { get; }
|
||||
|
||||
void Virtualize(Virtualizable obj);
|
||||
|
||||
void Materialize(Virtualizable obj);
|
||||
|
||||
void MaterializeAll();
|
||||
}
|
||||
}
|
|
@ -27,13 +27,13 @@ namespace LyokoCMD.Sim.Virtual
|
|||
_CanMaterialize = canMaterialize;
|
||||
}
|
||||
|
||||
public void Virtualize()
|
||||
public virtual void Virtualize()
|
||||
{
|
||||
if (Virtualized) throw new InvalidOperationException("Cette entité a déjà été virtualisée.");
|
||||
else _IsVirtualized = true;
|
||||
}
|
||||
|
||||
public void Materialize() {
|
||||
public virtual void Materialize() {
|
||||
if (!Virtualized) {throw new InvalidOperationException("Cette entité n'a pas été virtualisée.");}
|
||||
if (!CanMaterialize) throw new InvalidOperationException("Cette entité ne peut être dévirtualisée");
|
||||
_IsVirtualized = false;
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace LyokoCMD.Sim.Virtual
|
||||
{
|
||||
public abstract class VirtualizableContainer : IVirtualizableContainer {
|
||||
|
||||
public List<Virtualizable> Objects { get; }
|
||||
|
||||
public VirtualizableContainer() => Objects = new List<Virtualizable>();
|
||||
|
||||
public void Virtualize(Virtualizable obj) {
|
||||
if (Objects.Contains(obj)) throw new InvalidOperationException("Cette entité est déjà virtualisée.");
|
||||
obj.Virtualize();
|
||||
Objects.Add(obj);
|
||||
}
|
||||
|
||||
public void Materialize(Virtualizable obj) {
|
||||
if(!Objects.Contains(obj)) throw new InvalidOperationException("Cette entité n'est pas virtualisée ici.");
|
||||
obj.Materialize();
|
||||
Objects.Remove(obj);
|
||||
}
|
||||
|
||||
public void MaterializeAll() {
|
||||
Objects.ForEach(this.Materialize);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace LyokoCMD.Sim.Virtual
|
||||
{
|
||||
public abstract class VirtualizableVirtualizableContainer : Virtualizable, IVirtualizableContainer {
|
||||
|
||||
public List<Virtualizable> Objects { get; }
|
||||
|
||||
public VirtualizableVirtualizableContainer(string name, Coordinates coords = null, bool canMaterialize = true)
|
||||
: base(name, coords,canMaterialize) => Objects = new List<Virtualizable>();
|
||||
|
||||
public void Virtualize(Virtualizable obj) {
|
||||
if (Objects.Contains(obj)) throw new InvalidOperationException("Cette entité est déjà virtualisée.");
|
||||
obj.Virtualize();
|
||||
Objects.Add(obj);
|
||||
}
|
||||
|
||||
public override void Materialize() {
|
||||
this.MaterializeAll();
|
||||
base.Materialize();
|
||||
}
|
||||
|
||||
public void Materialize(Virtualizable obj) {
|
||||
if(!Objects.Contains(obj)) throw new InvalidOperationException("Cette entité n'est pas virtualisée ici.");
|
||||
obj.Materialize();
|
||||
Objects.Remove(obj);
|
||||
}
|
||||
|
||||
public void MaterializeAll() {
|
||||
Objects.ForEach(this.Materialize);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue