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); }
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); } }
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); } } } }
public void RemoveFlagStamp(FlagStamp flagStamp) { if (this.flagStamps != null && this.flagStamps.Remove(flagStamp)) { if (this.flagStamps.Count == 0) { this.flagStamps = null; } this.RefreshFlags(); } }
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); }
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); }
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); } } } } }
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)); }
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)); }
private void RemoveFlagStampFromCell(BoardCell cell, FlagStamp flagStamp) { cell.RemoveFlagStamp(flagStamp); }
public void RemoveFlagStamp(FlagStamp flagStamp) { this.ForEachCellInFlagStamp(flagStamp, new Board.FlagStampAction(this.RemoveFlagStampFromCell)); }
private void AddFlagStampToCell(BoardCell cell, FlagStamp flagStamp) { cell.AddFlagStamp(flagStamp); }
public void AddFlagStamp(FlagStamp flagStamp) { this.ForEachCellInFlagStamp(flagStamp, new Board.FlagStampAction(this.AddFlagStampToCell)); }