Implement virtualizable containers

This commit is contained in:
Lucidiot 2018-08-27 07:57:19 +02:00
parent 41650c4106
commit f53b7952fa
No known key found for this signature in database
GPG Key ID: AE3F7205692FA205
4 changed files with 77 additions and 2 deletions

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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);
}
}
}

View File

@ -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);
}
}
}