Example #1
0
        public void RemoveEntity(Entity entity, bool removeSpawnProtection)
        {
            BoardItemComponent boardItemComponent = entity.Get <BoardItemComponent>();

            if (boardItemComponent == null)
            {
                return;
            }
            BuildingComponent buildingComponent = entity.Get <BuildingComponent>();

            this.board.RemoveChild(boardItemComponent.BoardItem, buildingComponent != null && buildingComponent.BuildingType.Type != BuildingType.Blocker, buildingComponent != null);
            if (buildingComponent != null)
            {
                FlagStamp flagStamp = boardItemComponent.BoardItem.FlagStamp;
                if (flagStamp == null)
                {
                    return;
                }
                flagStamp.Clear();
                if (!removeSpawnProtection)
                {
                    uint num = 4u;
                    if (buildingComponent.BuildingType.AllowDefensiveSpawn)
                    {
                        num |= 32u;
                    }
                    flagStamp.Fill(num);
                }
                this.board.AddFlagStamp(flagStamp);
            }
            Service.EventManager.SendEvent(EventId.BuildingRemovedFromBoard, entity);
        }
Example #2
0
        public void AddFlagStamp(FlagStamp flagStamp)
        {
            bool flag  = this.IsWalkable();
            bool flag2 = this.IsWalkableNoWall();

            if (this.flagStamps == null)
            {
                this.flagStamps = new HashSet <FlagStamp>();
            }
            this.flagStamps.Add(flagStamp);
            this.Flags |= flagStamp.GetFlagsForCell(this.X, this.Z);
            if (this.ParentBoard.IsCellOutsideFlaggableArea(this.X, this.Z))
            {
                this.Flags &= 4294967275u;
            }
            bool flag3 = this.IsWalkable();
            bool flag4 = this.IsWalkableNoWall();

            if (flag != flag3)
            {
                this.ParentBoard.DirtyClearanceMap(this.X, this.Z);
            }
            if (flag2 != flag4)
            {
                this.ParentBoard.DirtyClearanceMapNoWall(this.X, this.Z);
            }
        }
Example #3
0
        private void ForEachCellInFlagStamp(FlagStamp flagStamp, Board.FlagStampAction callback)
        {
            int num  = this.RelToAbs(flagStamp.X);
            int num2 = this.RelToAbs(flagStamp.Z);
            int num3 = this.RelToAbs(flagStamp.Right);
            int num4 = this.RelToAbs(flagStamp.Bottom);

            if (!flagStamp.IsShieldFlag)
            {
                num  = this.ClampToFlaggableArea(num);
                num2 = this.ClampToFlaggableArea(num2);
                num3 = this.ClampToFlaggableArea(num3);
                num4 = this.ClampToFlaggableArea(num4);
            }
            for (int i = num; i < num3; i++)
            {
                for (int j = num2; j < num4; j++)
                {
                    BoardCell cellAt = this.GetCellAt(i, j, true);
                    if (cellAt != null)
                    {
                        callback(cellAt, flagStamp);
                    }
                }
            }
        }
Example #4
0
 public void RemoveFlagStamp(FlagStamp flagStamp)
 {
     if (this.flagStamps != null && this.flagStamps.Remove(flagStamp))
     {
         if (this.flagStamps.Count == 0)
         {
             this.flagStamps = null;
         }
         this.RefreshFlags();
     }
 }
Example #5
0
        public BoardCell <Entity> AddBuildingToBoard(Entity building, int boardX, int boardZ, bool sendEvent)
        {
            BoardItemComponent boardItemComponent = building.Get <BoardItemComponent>();
            BoardItem <Entity> boardItem          = boardItemComponent.BoardItem;
            SizeComponent      size = boardItem.Size;
            BuildingComponent  buildingComponent = building.Get <BuildingComponent>();
            BuildingTypeVO     buildingType      = buildingComponent.BuildingType;
            bool      flag        = buildingType.Type == BuildingType.Clearable || buildingType.Type == BuildingType.Trap || buildingType.Type == BuildingType.ChampionPlatform;
            bool      flag2       = buildingType.Type == BuildingType.Blocker;
            int       walkableGap = flag2 ? 0 : this.CalculateWalkableGap(size);
            FlagStamp flagStamp   = this.CreateFlagStamp(building, buildingType, size, walkableGap);

            if (!flag)
            {
                this.AddUnWalkableUnDestructibleFlags(flagStamp, size, walkableGap, flag2);
            }
            boardItem.FlagStamp = flagStamp;
            BoardController    boardController = Service.Get <BoardController>();
            BoardCell <Entity> boardCell       = boardController.Board.AddChild(boardItem, boardX, boardZ, building.Get <HealthComponent>(), !flag2);

            if (boardCell == null)
            {
                Service.Get <StaRTSLogger>().ErrorFormat("Failed to add building {0}:{1} at ({2},{3})", new object[]
                {
                    buildingComponent.BuildingTO.Key,
                    buildingComponent.BuildingTO.Uid,
                    boardX,
                    boardZ
                });
                return(null);
            }
            TransformComponent transformComponent = building.Get <TransformComponent>();

            transformComponent.X = boardX;
            transformComponent.Z = boardZ;
            DamageableComponent damageableComponent = building.Get <DamageableComponent>();

            if (damageableComponent != null)
            {
                damageableComponent.Init();
            }
            buildingComponent.BuildingTO.SyncWithTransform(transformComponent);
            if (sendEvent)
            {
                Service.Get <EventManager>().SendEvent(EventId.BuildingPlacedOnBoard, building);
            }
            if (buildingType.Type == BuildingType.DroidHut)
            {
                this.DroidHut = building;
            }
            return(boardCell);
        }
Example #6
0
        public FlagStamp CreateFlagStampForShield(ShieldGeneratorComponent sgc, SizeComponent size, int walkableGap)
        {
            int       num       = 1;
            int       num2      = 1;
            int       num3      = (num2 + num + sgc.CurrentRadius) * 2 - 1;
            FlagStamp flagStamp = new FlagStamp(num3, num3, 0u, true);

            flagStamp.SetFlagsInRectCenter(size.Width - walkableGap + 2, size.Depth - walkableGap + 2, 4u);
            flagStamp.FillCircle(sgc.CurrentRadius + num, 16u, true);
            flagStamp.StrokeHull(8u, 16u);
            flagStamp.FillCircle(sgc.CurrentRadius + num2, 16u, true);
            return(flagStamp);
        }
Example #7
0
        private void SetShieldBorderEntities(ShieldGeneratorNode node)
        {
            FlagStamp flagStamp = node.BoardItem.BoardItem.FlagStamp;
            Board     board     = Service.BoardController.Board;

            for (int i = 0; i < flagStamp.Width; i++)
            {
                for (int j = 0; j < flagStamp.Depth; j++)
                {
                    if ((flagStamp.FlagsMatrix[i, j] & 8u) == 8u)
                    {
                        BoardCell cellAt = board.GetCellAt(i + flagStamp.X, j + flagStamp.Z, false);
                        if (cellAt != null)
                        {
                            cellAt.AddObstacle(node.ShieldGenComp.ShieldBorderEntity);
                        }
                    }
                }
            }
        }
Example #8
0
 public void AddUnWalkableUnDestructibleFlags(FlagStamp flagStamp, SizeComponent size, int walkableGap, bool blocker)
 {
     flagStamp.SetFlagsInRectCenter(size.Width - walkableGap, size.Depth - walkableGap, ((walkableGap > 0) ? 1u : 2u) | (blocker ? 64u : 0u));
 }
Example #9
0
 public void AddUnWalkableUnDestructibleFlags(FlagStamp flagStamp, SizeComponent size, int walkableGap, bool blocker)
 {
     flagStamp.SetFlagsInRectCenter(size.Width - walkableGap, size.Depth - walkableGap, ((walkableGap <= 0) ? 2u : 1u) | ((!blocker) ? 0u : 64u));
 }
Example #10
0
 private void RemoveFlagStampFromCell(BoardCell cell, FlagStamp flagStamp)
 {
     cell.RemoveFlagStamp(flagStamp);
 }
Example #11
0
 public void RemoveFlagStamp(FlagStamp flagStamp)
 {
     this.ForEachCellInFlagStamp(flagStamp, new Board.FlagStampAction(this.RemoveFlagStampFromCell));
 }
Example #12
0
 private void AddFlagStampToCell(BoardCell cell, FlagStamp flagStamp)
 {
     cell.AddFlagStamp(flagStamp);
 }
Example #13
0
 public void AddFlagStamp(FlagStamp flagStamp)
 {
     this.ForEachCellInFlagStamp(flagStamp, new Board.FlagStampAction(this.AddFlagStampToCell));
 }