public override void Init(GameState s, int ti, object args)
        {
            base.Init(s, ti, args);
            grid = GameState.IGrid;
            eData = EnvironmentData.Default;

            // Open File
            FileInfo fi = new FileInfo(s.LevelGrid.Directory.FullName + @"\env.dat");
            if(fi.Exists) {
                BinaryReader r = new BinaryReader(fi.OpenRead());

                while(true) {
                    int type = r.ReadInt32();
                    if(type == -1) break;
                    int x = r.ReadInt32();
                    int z = r.ReadInt32();
                    AddEvent(new SpawnBuildingEvent(TeamIndex, type == 0 ? FloraType : OreType, new Point(x, z), true));
                }
                r.BaseStream.Dispose();
            }

            var eia = args as EnvInitArgs;
            if(eia != null) {
                if(!eia.DoWork)
                    return;
            }

            random = new Random();
            thread = new Thread(WorkThread);
            thread.IsBackground = true;
            running = true;
            paused = true;
            minNumSpawn = new int[3][] { eData.L1MinNumSpawn, eData.L1MaxNumSpawn, eData.L2MinNumSpawn };
            maxNumSpawn = new int[3][] { eData.L2MaxNumSpawn, eData.L3MinNumSpawn, eData.L3MaxNumSpawn };
            treeLocations = new List<Point>();
            treeLocations.Add(new Point(1, 1));
            FireStarts = new List<Point>();

            for(int i = 0; i < Team.Buildings.Count; i++) {
                Team.Buildings[i].OnDamage += OnBuildingDamage;
                grid.AddImpactGenerator(Team.Buildings[i]);
                if(Team.Buildings[i].Data.FriendlyName.Equals(FloraData.FriendlyName)) {
                    Point treeC = HashHelper.Hash(Team.Buildings[i].GridPosition, GameState.CGrid.numCells, GameState.CGrid.size);
                    treeLocations.Add(treeC);
                }
            }

            Team.OnBuildingSpawn += (b) => {
                b.OnDamage += OnBuildingDamage;
                grid.AddImpactGenerator(b);
            };

            // Find Player's Index
            for (int i = 0; i < GameState.activeTeams.Length; i++) {
                var at = GameState.activeTeams[i];
                if (at.Team.Type == RTSInputType.Player) {
                    playerIndex = at.Team.Index;
                }
            }
            Team.OnUnitSpawn += OnUnitSpawn;
        }
Exemple #2
0
        public override void Init(GameState s, int ti, object args)
        {
            base.Init(s, ti, args);
            grid  = GameState.IGrid;
            eData = EnvironmentData.Default;

            // Open File
            FileInfo fi = new FileInfo(s.LevelGrid.Directory.FullName + @"\env.dat");

            if (fi.Exists)
            {
                BinaryReader r = new BinaryReader(fi.OpenRead());

                while (true)
                {
                    int type = r.ReadInt32();
                    if (type == -1)
                    {
                        break;
                    }
                    int x = r.ReadInt32();
                    int z = r.ReadInt32();
                    AddEvent(new SpawnBuildingEvent(TeamIndex, type == 0 ? FloraType : OreType, new Point(x, z), true));
                }
                r.BaseStream.Dispose();
            }

            var eia = args as EnvInitArgs;

            if (eia != null)
            {
                if (!eia.DoWork)
                {
                    return;
                }
            }

            random = new Random();
            thread = new Thread(WorkThread);
            thread.IsBackground = true;
            running             = true;
            paused        = true;
            minNumSpawn   = new int[3][] { eData.L1MinNumSpawn, eData.L1MaxNumSpawn, eData.L2MinNumSpawn };
            maxNumSpawn   = new int[3][] { eData.L2MaxNumSpawn, eData.L3MinNumSpawn, eData.L3MaxNumSpawn };
            treeLocations = new List <Point>();
            treeLocations.Add(new Point(1, 1));
            FireStarts = new List <Point>();

            for (int i = 0; i < Team.Buildings.Count; i++)
            {
                Team.Buildings[i].OnDamage += OnBuildingDamage;
                grid.AddImpactGenerator(Team.Buildings[i]);
                if (Team.Buildings[i].Data.FriendlyName.Equals(FloraData.FriendlyName))
                {
                    Point treeC = HashHelper.Hash(Team.Buildings[i].GridPosition, GameState.CGrid.numCells, GameState.CGrid.size);
                    treeLocations.Add(treeC);
                }
            }

            Team.OnBuildingSpawn += (b) => {
                b.OnDamage += OnBuildingDamage;
                grid.AddImpactGenerator(b);
            };

            // Find Player's Index
            for (int i = 0; i < GameState.activeTeams.Length; i++)
            {
                var at = GameState.activeTeams[i];
                if (at.Team.Type == RTSInputType.Player)
                {
                    playerIndex = at.Team.Index;
                }
            }
            Team.OnUnitSpawn += OnUnitSpawn;
        }