Example #1
0
 public static EnemyBuildingUpdater Deserialize(BinaryReader s, GameState state)
 {
     int ti = s.ReadInt32();
     ViewedBuilding vb = new ViewedBuilding();
     vb.Team = s.ReadInt32();
     vb.Type = s.ReadInt32();
     vb.CellPoint = s.ReadPoint();
     vb.WorldPosition = s.ReadVector3();
     vb.ViewDirection = s.ReadVector2();
     int uuid = s.ReadInt32();
     RTSBuilding b = null;
     foreach(var building in state.teams[vb.Team].Buildings) {
         if(building.UUID == uuid) {
             b = building;
             break;
         }
     }
     EnemyBuildingUpdater ebu = new EnemyBuildingUpdater(state, ti, vb, b);
     ebu.Added = s.ReadBoolean();
     ebu.isDead = s.ReadBoolean();
     if(ebu.Added) {
         state.teams[ebu.teamIndex].ViewedEnemyBuildings.Add(vb);
     }
     return ebu;
 }
 private void AddTask(GameState s, RTSBuilding building, int fTeam, int type)
 {
     AddTask(s, building);
     ViewedBuilding vb = new ViewedBuilding();
     vb.Team = fTeam;
     vb.Type = type;
     vb.ViewDirection = building.ViewDirection;
     vb.WorldPosition = building.WorldPosition;
     vb.CellPoint = HashHelper.Hash(building.GridPosition, s.CGrid.numCells, s.CGrid.size);
     for(int i = 0; i < s.teams.Length; i++) {
         if(i == fTeam || s.teams[i] == null) continue;
         var ebu = new EnemyBuildingUpdater(s, i, vb, building);
         s.tbMemBuildings.AddTask(ebu);
     }
 }
Example #3
0
        public EnemyBuildingUpdater(GameState s, int tIndex, ViewedBuilding _vb, RTSBuilding b)
            : base(1)
        {
            state = s;
            teamIndex = tIndex;
            Added = false;
            isDead = false;
            vb = _vb;
            building = b;

            if(b != null) b.OnDestruction += OnBuildingDeath;
            else isDead = true;

            RTSBuildingData data = state.teams[vb.Team].Race.Buildings[vb.Type];
            grids = new Point[data.GridSize.X * data.GridSize.Y];
            Point p = vb.CellPoint;
            int pi = 0;
            for(int y = 0; y < data.GridSize.Y; y++) {
                for(int x = 0; x < data.GridSize.X; x++) {
                    grids[pi++] = new Point(p.X + x, p.Y + y);
                }
            }
        }