public void OnStartPurchaseBuilding(SmartEntity buildingEntity, bool stampable) { this.EnsureLoweredLiftedBuilding(); this.buildingSelector.EnsureDeselectSelectedBuilding(); this.ResetOnPress(Vector2.zero, Vector3.zero); this.buildingSelector.SelectBuilding(buildingEntity, Vector3.zero); this.LiftSelectedBuilding(this.buildingSelector.SelectedBuilding, false); int cx = 0; int cz = 0; Service.CameraManager.MainCamera.GetLookatBoardCell(out cx, out cz); int boardX; int num; this.buildingController.FindStartingLocation(buildingEntity, out boardX, out num, cx, cz, stampable); float x; float z; EditBaseController.BuildingBoardToWorld(buildingEntity, boardX, num, out x, out z); Vector3 vector = new Vector3(x, 0f, z); this.MoveLiftedBuilding(buildingEntity, vector); UXController uXController = Service.UXController; uXController.MiscElementsManager.ShowConfirmGroup(buildingEntity, new MiscConfirmDelegate(this.OnConfirmPurchase)); uXController.HUD.ToggleExitEditModeButton(false); vector.x = Units.BoardToWorldX(boardX); vector.z = Units.BoardToWorldX(num); this.worldView.PanToLocation(vector); this.LowerLiftedBuilding(DropKind.JustDrop, false, true, true, false); }
private void MoveLiftedBuilding(Entity building, Vector3 worldGroundPosition, bool isPartOfSelection) { Entity selectedBuilding = this.buildingSelector.SelectedBuilding; TransformComponent transformComponent = building.Get <TransformComponent>(); TransformComponent transformComponent2 = selectedBuilding.Get <TransformComponent>(); float num = (float)transformComponent2.X - (float)transformComponent.BoardWidth / 2f + (float)transformComponent2.BoardWidth / 2f; float num2 = (float)transformComponent2.Z - (float)transformComponent.BoardDepth / 2f + (float)transformComponent2.BoardDepth / 2f; float num3 = (float)transformComponent.X; float num4 = (float)transformComponent.Z; float num5 = Units.BoardToWorldX(num3 - num); float num6 = Units.BoardToWorldZ(num4 - num2); Vector3 grabPoint = this.buildingSelector.GrabPoint; float num7 = worldGroundPosition.x - grabPoint.x + num5; float num8 = worldGroundPosition.z - grabPoint.z + num6; float num9; float num10; EditBaseController.BuildingBoardToWorld(building, 0, 0, out num9, out num10); float num11 = num7 - num9; float num12 = num8 - num10; Units.SnapWorldToGridX(ref num11); Units.SnapWorldToGridZ(ref num12); int num13 = Units.WorldToBoardX(num11); int num14 = Units.WorldToBoardZ(num12); transformComponent.X = num13; transformComponent.Z = num14; int num15 = -2147483648; if (this.prevBoardAnchorX.ContainsKey(building)) { num15 = this.prevBoardAnchorX[building]; } int num16 = -2147483648; if (this.prevBoardAnchorZ.ContainsKey(building)) { num16 = this.prevBoardAnchorZ[building]; } if (num13 != num15 || num14 != num16) { this.canOccupy = this.EntireSelectionIsPlaceable(); Service.UXController.MiscElementsManager.EnableConfirmGroupAcceptButton(this.canOccupy); FootprintMoveData cookie = new FootprintMoveData(building, num11, num12, this.canOccupy); Service.EventManager.SendEvent(EventId.UserMovedLiftedBuilding, cookie); } GameObjectViewComponent gameObjectViewComponent = building.Get <GameObjectViewComponent>(); if (gameObjectViewComponent != null) { gameObjectViewComponent.SetXYZ(num7, 3f, num8); } if (this.canOccupy && !isPartOfSelection) { this.prevValidBoardAnchorX[building] = num13; this.prevValidBoardAnchorZ[building] = num14; } }
public bool UnstashBuilding(SmartEntity buildingEntity, Position pos, bool stampable, bool panToBuilding, bool playLoweredSound) { this.EnsureLoweredLiftedBuilding(); this.buildingSelector.EnsureDeselectSelectedBuilding(); this.ResetOnPress(Vector2.zero, Vector3.zero); this.buildingSelector.SelectBuilding(buildingEntity, Vector3.zero); this.LiftSelectedBuilding(this.buildingSelector.SelectedBuilding, false); int x; int z; if (pos == null) { int cx = 0; int cz = 0; Service.CameraManager.MainCamera.GetLookatBoardCell(out cx, out cz); this.buildingController.FindStartingLocation(buildingEntity, out x, out z, cx, cz, stampable); UXController uXController = Service.UXController; if (stampable) { uXController.MiscElementsManager.ShowConfirmGroup(buildingEntity, new MiscConfirmDelegate(this.OnConfirmUnstashStamp)); } else { this.buildingController.DisableUnstashStampingState(); } } else { x = pos.X; z = pos.Z; } float x2; float z2; EditBaseController.BuildingBoardToWorld(buildingEntity, x, z, out x2, out z2); Vector3 vector = new Vector3(x2, 0f, z2); this.MoveLiftedBuilding(buildingEntity, vector); if (panToBuilding) { vector.x = Units.BoardToWorldX(x); vector.z = Units.BoardToWorldX(z); this.worldView.PanToLocation(vector); } BoardCell boardCell = Service.WorldController.AddBuildingToBoard(buildingEntity, x, z, true); if (boardCell != null) { this.LowerLiftedBuilding(DropKind.JustDrop, true, true, playLoweredSound, false); } else { this.lifted = false; this.moved = false; } return(boardCell != null); }
private void LiftSelectedBuilding(SmartEntity buildingInSelection, bool sendLiftedEvent, bool clearPreviousAnchorPos) { this.lifted = true; if (buildingInSelection == this.buildingSelector.SelectedBuilding) { Service.UXController.HUD.ShowContextButtons(buildingInSelection); } Vector3 grabPoint = this.buildingSelector.GrabPoint; BoardItemComponent boardItemComponent = buildingInSelection.Get <BoardItemComponent>(); if (boardItemComponent.BoardItem.Filter == CollisionFilters.BUILDING) { boardItemComponent.BoardItem.Filter = CollisionFilters.BUILDING_GHOST; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.TRAP) { boardItemComponent.BoardItem.Filter = CollisionFilters.TRAP_GHOST; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.WALL) { boardItemComponent.BoardItem.Filter = CollisionFilters.WALL_GHOST; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.BLOCKER) { boardItemComponent.BoardItem.Filter = CollisionFilters.BLOCKER_GHOST; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.PLATFORM) { boardItemComponent.BoardItem.Filter = CollisionFilters.PLATFORM_GHOST; } this.canOccupy = true; if (clearPreviousAnchorPos) { this.ClearPreviousAnchors(); } TransformComponent transformComp = this.buildingSelector.SelectedBuilding.TransformComp; Vector3 worldGroundPosition = new Vector3(Units.BoardToWorldX(transformComp.X), 0f, Units.BoardToWorldZ(transformComp.Z)); if (sendLiftedEvent) { Service.EventManager.SendEvent(EventId.UserLiftedBuilding, buildingInSelection); Service.EventManager.SendEvent(EventId.UserLiftedBuildingAudio, buildingInSelection); } float num; float num2; EditBaseController.BuildingBoardToWorld(this.buildingSelector.SelectedBuilding, 0, 0, out num, out num2); worldGroundPosition.x += num + grabPoint.x; worldGroundPosition.z += num2 + grabPoint.z; this.MoveLiftedBuilding(buildingInSelection, worldGroundPosition); Service.EntityViewManager.SetCollider(buildingInSelection, false); this.buildingSelector.ApplySelectedEffect(buildingInSelection); Service.BuildingTooltipController.HideBuildingTooltip(buildingInSelection); }
public void RotateSelectedBuildings(Entity building) { this.AutoLiftSelectedBuilding(); float num = Mathf.Sin(-1.57079637f); float num2 = Mathf.Cos(-1.57079637f); Vector3 grabPoint = this.buildingSelector.GrabPoint; float num3; float num4; EditBaseController.BuildingBoardToWorld(building, 0, 0, out num3, out num4); TransformComponent transformComponent = building.Get <TransformComponent>(); float num5 = (float)transformComponent.X; float num6 = (float)transformComponent.Z; Vector3 worldGroundPosition = new Vector3(Units.BoardToWorldX(num5), 0f, Units.BoardToWorldX(num6)); worldGroundPosition.x += num3 + grabPoint.x; worldGroundPosition.z += num4 + grabPoint.z; int count = this.buildingSelector.AdditionalSelectedBuildings.Count; this.MoveLiftedBuilding(building, worldGroundPosition, count > 0); for (int i = 0; i < count; i++) { Entity entity = this.buildingSelector.AdditionalSelectedBuildings[i]; TransformComponent transformComponent2 = entity.Get <TransformComponent>(); float num7 = (float)transformComponent2.X + (float)transformComponent2.BoardWidth / 2f - (float)transformComponent.BoardWidth / 2f; float num8 = (float)transformComponent2.Z + (float)transformComponent2.BoardDepth / 2f - (float)transformComponent.BoardWidth / 2f; float num9 = num7 - num5; float num10 = num8 - num6; float num11 = num5 + (num9 * num2 - num10 * num); float num12 = num6 + (num9 * num + num10 * num2); Vector3 worldGroundPosition2 = new Vector3(Units.BoardToWorldX(num11 - num9), 0f, Units.BoardToWorldZ(num12 - num10)); worldGroundPosition2.x += num3 + grabPoint.x; worldGroundPosition2.z += num4 + grabPoint.z; this.MoveLiftedBuilding(entity, worldGroundPosition2, true); } this.canOccupy = this.EntireSelectionIsPlaceable(); if (this.canOccupy) { this.UpdatePrevValidBoardAnchors(); this.LowerLiftedBuilding(DropKind.JustDrop, true, true, true, true); } else { this.UpdateWallConnectorsInSelection(true); } }
public void PlaceNewBuilding(Entity buildingEntity) { int num; int num2; bool flag = this.CanPlaceBuilding(buildingEntity, out num, out num2); if (flag) { Service.WorldController.AddBuildingHelper(buildingEntity, num, num2, true); BuildingComponent buildingComponent = buildingEntity.Get <BuildingComponent>(); Service.CurrentPlayer.Map.Buildings.Add(buildingComponent.BuildingTO); float x; float z; EditBaseController.BuildingBoardToWorld(buildingEntity, num, num2, out x, out z); Vector3 worldLocation = new Vector3(x, 0f, z); worldLocation.x = Units.BoardToWorldX(num); worldLocation.z = Units.BoardToWorldX(num2); this.worldView.PanToLocation(worldLocation); } else { Service.Logger.Warn("Unable to place building " + buildingEntity.ID); } }
private bool LowerLiftedBuildingHelper(SmartEntity buildingInSelection, DropKind dropKind, bool affectBoard, bool sendLoweredEvent, bool playLoweredSound, bool showContextButtons, string tag) { this.lifted = false; this.moved = false; BuildingTypeVO buildingTypeVO = null; int num = 0; int num2 = 0; if ((this.canOccupy || dropKind != DropKind.JustDrop) && this.prevValidBoardAnchorX.ContainsKey(buildingInSelection) && this.prevValidBoardAnchorZ.ContainsKey(buildingInSelection)) { num = this.prevValidBoardAnchorX[buildingInSelection]; num2 = this.prevValidBoardAnchorZ[buildingInSelection]; } else if (this.prevValidBoardAnchorX.ContainsKey(buildingInSelection) && this.prevValidBoardAnchorZ.ContainsKey(buildingInSelection)) { num = this.prevValidBoardAnchorX[buildingInSelection]; num2 = this.prevValidBoardAnchorZ[buildingInSelection]; } else if (this.buildingSelector.AdditionalSelectedBuildings.Count == 0) { if (buildingInSelection != null) { Service.Logger.Warn("Something went wrong placing " + buildingInSelection.ToString() + " we should not be hitting this case where prevValidBoardAnchorX and prevValidBoardAnchorZ do not contain buildingInSelection"); } else { Service.Logger.Warn("Something went wrong, we should not be hitting this case where prevValidBoardAnchorX and prevValidBoardAnchorZ do not contain buildingInSelection"); } } if (affectBoard) { BoardCell boardCell = this.buildingController.OnLowerLiftedBuilding(buildingInSelection, num, num2, dropKind == DropKind.ConfirmPurchase, ref buildingTypeVO, tag); if (boardCell == null) { this.buildingSelector.DeselectSelectedBuilding(); Service.EventManager.SendEvent(EventId.UserLoweredBuilding, buildingInSelection); this.DestroyBuilding(buildingInSelection); return(false); } BoardItemComponent boardItemComponent = buildingInSelection.Get <BoardItemComponent>(); if (boardItemComponent.BoardItem.Filter == CollisionFilters.BUILDING_GHOST) { boardItemComponent.BoardItem.Filter = CollisionFilters.BUILDING; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.TRAP_GHOST) { boardItemComponent.BoardItem.Filter = CollisionFilters.TRAP; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.WALL_GHOST) { boardItemComponent.BoardItem.Filter = CollisionFilters.WALL; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.BLOCKER_GHOST) { boardItemComponent.BoardItem.Filter = CollisionFilters.BLOCKER; } else if (boardItemComponent.BoardItem.Filter == CollisionFilters.PLATFORM_GHOST) { boardItemComponent.BoardItem.Filter = CollisionFilters.PLATFORM; } else { Service.Logger.ErrorFormat("LowerLiftedBuilding : Unexpected filter type {0}", new object[] { boardItemComponent.BoardItem.Filter }); boardItemComponent.BoardItem.Filter = CollisionFilters.BUILDING; } num = boardCell.X; num2 = boardCell.Z; } else { float x; float z; EditBaseController.BuildingBoardToWorld(this.buildingSelector.SelectedBuilding, num, num2, out x, out z); Vector3 worldGroundPosition = new Vector3(x, 0f, z); worldGroundPosition.x += this.buildingSelector.GrabPoint.x; worldGroundPosition.z += this.buildingSelector.GrabPoint.z; this.MoveLiftedBuilding(this.buildingSelector.SelectedBuilding, worldGroundPosition); } GameObjectViewComponent gameObjectViewComponent = buildingInSelection.Get <GameObjectViewComponent>(); if (gameObjectViewComponent != null) { TransformComponent transformComponent = buildingInSelection.Get <TransformComponent>(); gameObjectViewComponent.SetXYZ(Units.BoardToWorldX(transformComponent.CenterX()), 0f, Units.BoardToWorldZ(transformComponent.CenterZ())); } Service.EntityViewManager.SetCollider(buildingInSelection, true); if (sendLoweredEvent) { Service.EventManager.SendEvent(EventId.UserLoweredBuilding, buildingInSelection); } if (playLoweredSound) { Service.EventManager.SendEvent(EventId.UserLoweredBuildingAudio, buildingInSelection); } this.buildingSelector.ApplySelectedEffect(buildingInSelection); if (buildingTypeVO != null) { this.buildingController.StartPurchaseBuilding(buildingTypeVO, -1); } else if (showContextButtons) { Service.UXController.HUD.ShowContextButtons(buildingInSelection); } Service.BuildingTooltipController.EnsureBuildingTooltip(buildingInSelection); return(true); }