Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
            }
        }
Esempio n. 6
0
        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);
            }
        }
Esempio n. 7
0
        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);
        }