using System.Collections.Generic;
public enum InteractableTypes
static List<Interactable> allActors;
static public List<DataStruct> modifiedDatas;
static List<PlaceHolder> placeHolders;
public static Dictionary<string, DataStruct> dataMap;
public static void Main()
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)));
foreach(var actor in allActors)
Console.WriteLine("\nBeginning Load #" + loads);
foreach(var ph in placeHolders)
allActors.Add(Interactable.CreateInteractableFromData(ph.data));
Console.WriteLine("from placeholder");
allActors.Add(new WoodDoor(new DataStruct("wooddoor01", InteractableTypes.WoodDoor)));
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];
AddChild(CreateInteractableFromData(Program.dataMap[data.childID]));
public static Interactable CreateInteractableFromData(DataStruct data)
case InteractableTypes.WoodDoor:
obj = new WoodDoor(data);
case InteractableTypes.MetalDoor:
obj = new MetalDoor(data);
case InteractableTypes.Window:
case InteractableTypes.Lock:
AddChild(new Lock(new DataStruct("lock_01", InteractableTypes.Lock)));
Console.WriteLine("on " + data.ID + " from security upgrade");
public void AddChild(Interactable ch)
data.childID = child.data.ID;
Program.UpdateDataMap(ch.data);
if(!Program.modifiedDatas.Contains(data))
Program.modifiedDatas.Add(data);
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.Write("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, InteractableTypes _type)
public InteractableTypes type;
public PlaceHolder(DataStruct _data)