public static ClientMap getClientMap(MapModel mm)
        {
            ClientMap cm = new ClientMap();
            cm.mapSquares = new ClientMapSquare[mm.map.GetLength(0)][];
            List<string> urls = new List<string>();
            for (var i = 0; i < cm.mapSquares.Length; i++)
            {
                cm.mapSquares[i] = new ClientMapSquare[mm.map.GetLength(1)];
            }
            cm.name = mm.name;
            for (var x = 0; x < mm.map.GetLength(0); x++)
            {
                for (var y = 0; y < mm.map.GetLength(1); y++)
                {
                    int imageUrlId;
                    string imageUrl = getImageURL(mm.map[x, y]);
                    if (urls.Contains(imageUrl))
                    {
                        imageUrlId = urls.IndexOf(imageUrl);
                    }
                    else
                    {
                        imageUrlId = urls.Count;
                        urls.Add(imageUrl);
                    }
                    cm.mapSquares[x][y] = new ClientMapSquare()
                    {
                        i = imageUrlId,
                        isI = getInteractable(mm.map[x, y]),
                        isT = getTraversable(mm.map[x, y])
                    };
                }
            }

            cm.mapUrl = urls.ToArray();

            cm.events = new List<ClientEvent>();
            foreach (MapEventModel me in mm.eventCollection.getAll())
            {
                ClientEvent ce = new ClientEvent();
                ce.x = me.x;
                ce.y = me.y;
                ce.rewardType = me.rewardType;
                cm.events.Add(ce);
            }

            return cm;
        }
 public static Encounter getEncounter(MapModel mm, int x, int y, int selection)
 {
     if(isEvent(mm, x, y))
     {
         MapEventModel me = getEvent(mm, x, y);
         if (me.eventData.type == EventClasses.EventDataType.Combat)
         {
             return me.eventData.encounter;
         }
         else
         {
             return getRandomEncounter(mm.name, selection);
         }
     }
     else{
         return getRandomEncounter(mm.name, selection);
     }
 }
 public static bool validateClassChangeSelection(string name, int x, int y, MapModel mm)
 {
     switch (name)
     {
         case "Ensemble Village":
             return TutorialMapGenerators.EnsembleVillageGenerator.Implementation.validateClassTrainer(mm, x, y);
         case "Emergence Cavern":
             return false;
         case "Emergence Cavern F2":
             return false;
         default:
             return false;
     }
 }
 public static bool validateDungeonSelection(string name, int x, int y, MapModel mm, string selectedDungeon)
 {
     switch (name)
     {
         case "Ensemble Village":
             return TutorialMapGenerators.EnsembleVillageGenerator.Implementation.validateDungeonSelection(mm, x, y, selectedDungeon);
         case "Emergence Cavern":
             return TutorialMapGenerators.EmergenceCavernGenerator.Implementation.validateDungeonSelection(mm, x, y, selectedDungeon);
         case "Emergence Cavern F2":
             return TutorialMapGenerators.EmergenceCavernGenerator.Implementation.validateDungeonSelection(mm, x, y, selectedDungeon);
         default:
             return false;
     }
 }
 public static void setupMapModel(MapModel mm)
 {
     //Load the map since it's not stored in the database.
     MapModel temp = createMap(mm.name);
     mm.map = temp.map;
 }
        public static bool isEvent(MapModel mm, int x, int y)
        {
            foreach (MapEventModel me in mm.eventCollection.getAll())
            {
                if (me.x == x && me.y == y)
                {
                    return true;
                }
            }

            return false;
        }
 public static void interactWithMap(string name, int x, int y, MapModel mm, string selectedOption)
 {
     //switch (name)
     //{
     //    //case "Ensemble Village":
     //    //    TutorialMapGenerators.EnsembleVillageGenerator.Implementation.performInteraction(mm, x, y, selectedOption);
     //    //    break;
     //    //case "Emergence Cavern":
     //    //    TutorialMapGenerators.EmergenceCavernGenerator.Implementation.performInteraction(mm, x, y, selectedOption);
     //    //    break;
     //    //default:
     //    //    break;
     //}
 }
 public static MapInteraction getMapInteraction(int x, int y, MapModel mm)
 {
     switch (mm.name)
     {
         case "Ensemble Village":
             return TutorialMapGenerators.EnsembleVillageGenerator.Implementation.getInteraction(mm, x, y);
         case "Emergence Cavern":
             return TutorialMapGenerators.EmergenceCavernGenerator.Implementation.getInteraction(mm, x, y);
         case "Emergence Cavern F2":
             return TutorialMapGenerators.EmergenceCavernGenerator.Implementation.getInteraction(mm, x, y);
         default:
             return new MapInteraction();
     }
 }
        public static MapEventModel getEvent(MapModel mm, int x, int y)
        {
            foreach (MapEventModel me in mm.eventCollection.getAll())
            {
                if (me.x == x && me.y == y)
                {
                    return me;
                }
            }

            return new MapEventModel();
        }