public static DungeonMaster CreateFromMap(string level, GameData data)
        {
            var DM = new DungeonMaster(data);

            DM.map = Map.CreateFromText(level, data);
            DM.SetupEvents();
            return(DM);
        }
        public static DungeonMaster LoadEncounter(YamlMappingNode yaml, string level, GameData data)
        {
            var DM = DungeonMaster.CreateFromMap(level, data);

            var sides = (YamlSequenceNode)yaml.Children[new YamlScalarNode("sides")];

            foreach (var side in sides)
            {
                var name = (side as YamlScalarNode).Value;
                DM.Sides.Add(new Side(name));
            }
            DM.currentSideID = DM.Sides[0].ID;

            var characters = (YamlSequenceNode)yaml.Children[new YamlScalarNode("characters")];

            foreach (var node in characters)
            {
                var      c              = node as YamlMappingNode;
                var      name           = (c["name"] as YamlScalarNode).Value;
                var      characterClass = (c["class"] as YamlScalarNode).Value;
                var      posString      = (c["pos"] as YamlScalarNode).Value;
                var      sideName       = (c["side"] as YamlScalarNode).Value;
                Position pos            = Position.Parse(posString);
                var      side           = DM.Sides.FirstOrDefault(s => s.Name.Equals(sideName, StringComparison.OrdinalIgnoreCase));

                Character newCharacter = data.LoadCharacterByClass(characterClass);
                newCharacter.InitializeIndividual(name, pos, side.ID, Guid.NewGuid());

                try
                {
                    var gear = (c["gear"] as YamlScalarNode).Value;
                    newCharacter.AddGear(gear, data);
                }
                catch
                {
                    //TODO: more elegant way?
                }

                DM.CreateCharacter(newCharacter);
            }

            for (int i = 0; i < 100; i++)
            {
                DM.GuidsInWaiting.Enqueue(Guid.NewGuid());
            }

            return(DM);
        }
        public static DungeonMaster GetDebugDM(GameData data)
        {
            var DM = new DungeonMaster(data);

            DM.map = DebugData.GetFlatlandMap(data);

            DM.Sides.Add(new Side("Heros"));
            DM.Sides.Add(new Side("The Foe"));
            DM.currentSideID = DM.Sides[0].ID;

            var robby = DebugData.GetDebugCharacter();

            robby.InitializeIndividual("Robby", new Position(1, 1), DM.Sides[0].ID, Guid.NewGuid());
            DM.Characters.Add(robby);

            var zach = DebugData.GetDebugCharacter();

            zach.InitializeIndividual("Zach", new Position(1, 3), DM.Sides[1].ID, Guid.NewGuid());
            DM.Characters.Add(zach);

            return(DM);
        }