using System.Collections.Generic;
public enum InteractableTypes
static List<Interactable> rootActors;
static List<Interactable> allActors;
static List<DataStruct> modifiedDatas;
static List<PlaceHolder> placeHolders;
public static Dictionary<string, DataStruct> dataMap;
public static void Main()
rootActors = new List<Interactable>();
allActors = new List<Interactable>();
modifiedDatas = new List<DataStruct>();
dataMap = new Dictionary<string, DataStruct>();
placeHolders = new List<PlaceHolder>();
placeHolders.Add(new PlaceHolder(new DataStruct("doorPH"), InteractableTypes.WoodDoor));
placeHolders.Add(new PlaceHolder(new DataStruct("windowPH"), InteractableTypes.Window));
allActors[0].FuckAround(modifiedDatas);
allActors[1].FuckAround(modifiedDatas);
Console.WriteLine("\nBeginning Load #" + loads);
foreach(var ph in placeHolders)
allActors.Add(ph.CreateInteractableFromPlaceholder());
Console.WriteLine("from placeholder");
allActors.Add(new WoodDoor(new DataStruct("wooddoor01")));
Console.WriteLine("from non-placeholder");
Console.WriteLine($"Finished Load #{loads++}\n");
static void SaveLevel(bool detect)
Console.WriteLine("\nBeginning Save #" + saves);
foreach(var obj in allActors)
Console.WriteLine("Finished Save #" + saves++);
if(modifiedDatas.Count==0) return;
var obj = FindInteractableByID(modifiedDatas[0].ID);
modifiedDatas.RemoveAt(0);
static Interactable FindInteractableByID(string dataID)
foreach(var actor in allActors)
if(actor.data.ID == dataID)
static public void UpdateDataMap(DataStruct data)
if(dataMap.ContainsKey(data.ID))
dataMap.Add(data.ID, data);
Console.WriteLine("Scene Snapshot");
foreach(var actor in allActors)
public abstract class Interactable
protected Interactable(DataStruct _data)
if(Program.dataMap.ContainsKey(data.ID))
data = Program.dataMap[data.ID];
Console.WriteLine("upgrading security on " + data.ID);
AddChild(new Lock(new DataStruct("lock_01")));
public void AddChild(Interactable ch)
data.childID = child.data.ID;
Program.UpdateDataMap(ch.data);
public void FuckAround(List<DataStruct> modified)
string temp = string.Empty;
temp = $"[child: {child.data.ID}]";
Console.WriteLine($"[ID: {data.ID}] [transform: {data.transform}] {temp}");
public class WoodDoor : Interactable
public WoodDoor(DataStruct _data) : base(_data)
Console.WriteLine("creating WoodDoor ");
public class MetalDoor : Interactable
public MetalDoor(DataStruct _data) : base(_data)
Console.Write("creating MetalDoor ");
public class Window : Interactable
public Window(DataStruct _data) : base(_data)
Console.Write("creating Window ");
public class Lock : Interactable
public Lock(DataStruct _data) : base(_data)
Console.Write("creating Lock ");
public DataStruct(string id)
public InteractableTypes type;
public PlaceHolder(DataStruct _data, InteractableTypes _type)
public Interactable CreateInteractableFromPlaceholder()
case InteractableTypes.WoodDoor:
obj = new WoodDoor(data);
case InteractableTypes.MetalDoor:
obj = new MetalDoor(data);
case InteractableTypes.Window: