Ejemplo n.º 1
0
        private GameCore CreateGameFromMapAndUpdateModsList(MapJSON map)
        {
            MapName         = map.Name;
            MapAuthor       = map.Author;
            BackgroundColor = map.BackgroundColor;
            ShadowColor     = map.ShadowColor;
            ShadowOffset    = map.ShadowOffset;

            var game = new GameCore(null, new NullGamemode(), Newtonsoft.Json.JsonConvert.SerializeObject(map));

            game.Authoritative = true;
            game.BeginGame(true);
            //Blow up the mod infos
            var deps = map.ModDependencies.Select(a =>
            {
                var name  = a.Split(':')[0];
                var major = int.Parse(a.Split(':')[1].Split('.')[0]);
                var minor = int.Parse(a.Split(':')[1].Split('.')[1].Split('-')[0]);

                return(new Modding.ModInfo()
                {
                    ModName = name,
                    ModMajor = major,
                    ModMinor = minor
                });
            });

            //And make sure they're loaded
            foreach (var itm in deps)
            {
                var db = Modding.ModDatabase.Get(itm.ModName, itm.ModMajor);
                if (db == null || db.Minor < itm.ModMinor)
                {
                    throw new Exception($"Mod {db.Name} v{db.Major}.{db.Minor} not found or is out of date.");
                }

                string err;
                var    mod = db.LoadIfNotLoaded(GameSettings.Instance.ModUnpackPath,
                                                GameSettings.Instance.ModMapPath,
                                                GameSettings.Instance.ModAssetPath, out err);
                if (mod == null)
                {
                    throw new Exception($"Failed to load mod {db.Name} v{db.Major}.{db.Minor}", new Exception(err));
                }
            }

            Mods = deps.ToList();

            //Recreate the SpawnPoint objects from the map spawns list

            //TODO: Figure out why this doesn't work correctly
            foreach (var teamSpawns in map.Spawns)
            {
                foreach (var pos in teamSpawns.SpawnPositions)
                {
                    var gObj = game.AddMapObject("CoreAssets+SpawnPoint", true);
                    gObj.SetInstanceSetting("Team Number", teamSpawns.TeamIndex.ToString());
                    gObj.Position = pos;
                }
            }

            return(game);
        }