public EatResponse OnEvent(EventId id, object cookie)
 {
     if (id == EventId.TroopPlacedOnBoard && base.IsEventValidForBattleObjective())
     {
         SmartEntity    smartEntity    = (SmartEntity)cookie;
         TroopComponent troopComponent = smartEntity.Get <TroopComponent>();
         TeamComponent  teamComponent  = smartEntity.Get <TeamComponent>();
         if (teamComponent != null && teamComponent.TeamType == TeamType.Attacker && troopComponent != null && troopComponent.TroopType.TroopID == this.troopId)
         {
             this.parent.Progress(this, 1);
         }
     }
     return(EatResponse.NotEaten);
 }
示例#2
0
        private bool ShouldAttackAlternateTarget(ShooterComponent shooterComp, Entity alternateTarget)
        {
            if (alternateTarget == null)
            {
                return(false);
            }
            BuildingComponent  buildingComponent  = alternateTarget.Get <BuildingComponent>();
            TransformComponent transformComponent = alternateTarget.Get <TransformComponent>();

            if (buildingComponent == null || buildingComponent.BuildingType == null || transformComponent == null)
            {
                return(false);
            }
            if (buildingComponent.BuildingType.Type == BuildingType.Blocker)
            {
                return(false);
            }
            if (buildingComponent.BuildingType.Type != BuildingType.Wall)
            {
                return(true);
            }
            SmartEntity primaryTarget = this.GetPrimaryTarget(shooterComp);

            return(primaryTarget != null && primaryTarget.Get <TransformComponent>() != null);
        }
示例#3
0
 public bool TryCollectCurrencyOnSelection(SmartEntity entity)
 {
     if (!(Service.GameStateMachine.CurrentState is HomeState))
     {
         return(false);
     }
     if (Service.PostBattleRepairController.IsEntityInRepair(entity))
     {
         return(false);
     }
     if (ContractUtils.IsBuildingConstructing(entity) || ContractUtils.IsBuildingUpgrading(entity))
     {
         return(false);
     }
     if (!this.IsGeneratorThresholdMet(entity))
     {
         return(false);
     }
     if (!this.CanStoreCollectionAmountFromGenerator(entity))
     {
         BuildingComponent buildingComponent = entity.Get <BuildingComponent>();
         CurrencyType      currency          = buildingComponent.BuildingType.Currency;
         this.HandleUnableToCollect(currency);
         return(false);
     }
     this.CollectCurrency(entity);
     return(true);
 }
示例#4
0
        public void StartClearingSelectedBuilding()
        {
            SmartEntity    selectedBuilding = this.buildingSelector.SelectedBuilding;
            BuildingTypeVO buildingType     = selectedBuilding.Get <BuildingComponent>().BuildingType;

            if (buildingType.Type == BuildingType.Clearable)
            {
                int           credits       = buildingType.Credits;
                int           materials     = buildingType.Materials;
                int           contraband    = buildingType.Contraband;
                string        value         = StringUtils.ToLowerCaseUnderscoreSeperated(buildingType.Type.ToString());
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.Append(value);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.BuildingID);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.SizeX * buildingType.SizeY);
                if (PayMeScreen.ShowIfNotEnoughCurrency(credits, materials, contraband, stringBuilder.ToString(), new OnScreenModalResult(this.OnPayMeForCurrencyResult)))
                {
                    return;
                }
                if (PayMeScreen.ShowIfNoFreeDroids(new OnScreenModalResult(this.OnPayMeForDroidResult), selectedBuilding))
                {
                    return;
                }
                this.ConfirmClearingBuilding(selectedBuilding);
            }
        }
示例#5
0
        public bool IsPositionUnderShield(int boardX, int boardZ, SmartEntity shieldGenerator, out float distSq)
        {
            TransformComponent transformComponent = shieldGenerator.Get <TransformComponent>();

            distSq = (float)GameUtils.SquaredDistance(boardX, boardZ, transformComponent.CenterGridX(), transformComponent.CenterGridZ());
            return(distSq <= (float)shieldGenerator.ShieldGeneratorComp.RadiusSquared);
        }
示例#6
0
        public BoardCell OnLowerLiftedBuilding(SmartEntity building, int x, int z, bool confirmPurchase, ref BuildingTypeVO stampBuilding, string tag)
        {
            BoardCell boardCell;

            if (this.purchasingBuilding)
            {
                this.purchasingBuilding = false;
                if (!confirmPurchase)
                {
                    this.ResetStampLocations();
                    Service.EventManager.SendEvent(EventId.BuildingPurchaseCanceled, null);
                    return(null);
                }
                BuildingTypeVO buildingType = building.Get <BuildingComponent>().BuildingType;
                int            credits      = buildingType.Credits;
                int            materials    = buildingType.Materials;
                int            contraband   = buildingType.Contraband;
                GameUtils.SpendCurrency(credits, materials, contraband, false);
                Service.EventManager.SendEvent(EventId.BuildingPurchaseConfirmed, null);
                boardCell = Service.WorldController.AddBuildingHelper(building, x, z, false);
                if (boardCell != null)
                {
                    BuildingComponent buildingComponent = building.Get <BuildingComponent>();
                    Service.CurrentPlayer.Map.Buildings.Add(buildingComponent.BuildingTO);
                    if (this.purchasingStampable == 0)
                    {
                        Service.ISupportController.StartBuildingConstruct(buildingType, building, x, z, tag);
                        Service.EventManager.SendEvent(EventId.BuildingPurchaseSuccess, building);
                    }
                    else
                    {
                        Service.EventManager.SendEvent(EventId.BuildingPurchaseSuccess, building);
                        Service.ISupportController.InstantBuildingConstruct(buildingType, building, x, z, tag);
                        if (--this.purchasingStampable > 0)
                        {
                            stampBuilding = this.purchasingBuildingType;
                            this.SaveLastStampLocation(boardCell.X, boardCell.Z);
                        }
                    }
                }
            }
            else
            {
                boardCell = Service.WorldController.MoveBuildingWithinBoard(building, x, z);
            }
            return(boardCell);
        }
示例#7
0
        public void StashBuilding(SmartEntity buildingEntity, bool allowRevert)
        {
            BuildingComponent buildingComponent = buildingEntity.Get <BuildingComponent>();

            if (buildingComponent.BuildingType.Type == BuildingType.Clearable)
            {
                Service.Logger.Warn("BLT: Can't stash clearable: " + buildingComponent.BuildingTO.Key + ":" + buildingComponent.BuildingTO.Uid);
                return;
            }
            string uid = buildingComponent.BuildingTO.Uid;

            if (this.stashedBuildingMap == null)
            {
                this.stashedBuildingMap = new Dictionary <string, List <SmartEntity> >();
            }
            if (!this.stashedBuildingMap.ContainsKey(uid))
            {
                this.stashedBuildingMap.Add(uid, new List <SmartEntity>());
            }
            List <SmartEntity> list = this.stashedBuildingMap[uid];

            if (!list.Contains(buildingEntity))
            {
                list.Add(buildingEntity);
            }
            GameObjectViewComponent gameObjectViewComp = buildingEntity.GameObjectViewComp;

            if (gameObjectViewComp != null)
            {
                TransformComponent transformComp = buildingEntity.TransformComp;
                gameObjectViewComp.SetXYZ(Units.BoardToWorldX(transformComp.CenterX()), -1000f, Units.BoardToWorldZ(transformComp.CenterZ()));
            }
            if (buildingEntity.HealthViewComp != null)
            {
                HealthViewComponent healthViewComponent = buildingEntity.Get <HealthViewComponent>();
                healthViewComponent.TeardownElements();
            }
            Service.EventManager.SendEvent(EventId.UserStashedBuilding, buildingEntity);
            Service.BoardController.RemoveEntity(buildingEntity, true);
            Service.EventManager.SendEvent(EventId.EntityDestroyed, buildingEntity.ID);
            Service.EventManager.SendEvent(EventId.BuildingMovedOnBoard, buildingEntity);
            Service.BuildingController.DisableUnstashStampingState();
            if (allowRevert)
            {
                this.ShouldRevertMap = true;
            }
        }
示例#8
0
 public EatResponse OnEvent(EventId id, object cookie)
 {
     if (id == EventId.TroopPlacedOnBoard)
     {
         if (this.IsEventValidForGoal())
         {
             SmartEntity    smartEntity    = (SmartEntity)cookie;
             TroopComponent troopComponent = smartEntity.Get <TroopComponent>();
             TeamComponent  teamComponent  = smartEntity.Get <TeamComponent>();
             SpawnComponent spawnComponent = smartEntity.Get <SpawnComponent>();
             if (teamComponent != null && teamComponent.TeamType == TeamType.Attacker && troopComponent != null && troopComponent.TroopType.TroopID == this.troopId && (spawnComponent == null || !spawnComponent.IsSummoned()))
             {
                 this.parent.Progress(this, 1);
             }
         }
     }
     return(EatResponse.NotEaten);
 }
示例#9
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);
        }
示例#10
0
        public static void ShowModal(SmartEntity selectedBuilding, OnScreenModalResult onModalResult, object modalResultCookie)
        {
            Contract contract = Service.ISupportController.FindCurrentContract(selectedBuilding.Get <BuildingComponent>().BuildingTO.Key);

            if (contract == null)
            {
                return;
            }
            FinishNowScreen screen = FinishNowScreen.CreateFinishNowScreen(selectedBuilding, contract, false, onModalResult, modalResultCookie);

            Service.ScreenController.AddScreen(screen);
        }
示例#11
0
        public WallUpgradeScreen(SmartEntity selectedBuilding) : base(selectedBuilding)
        {
            this.useUpgradeGroup  = true;
            this.currentWallLevel = this.buildingInfo.Lvl;
            this.wallsOfSameLevel = new List <SmartEntity>();
            string key = selectedBuilding.Get <BuildingComponent>().BuildingTO.Key;
            NodeList <WallNode> wallNodeList = Service.BuildingLookupController.WallNodeList;

            for (WallNode wallNode = wallNodeList.Head; wallNode != null; wallNode = wallNode.Next)
            {
                if (wallNode.BuildingComp.BuildingTO.Key != key && wallNode.BuildingComp.BuildingType.Lvl == this.currentWallLevel)
                {
                    this.wallsOfSameLevel.Add((SmartEntity)wallNode.Entity);
                }
            }
            this.allWallSameLevelCount = this.wallsOfSameLevel.Count + 1;
        }
示例#12
0
 public static void AddTroopToStarportVisually(SmartEntity starport, TroopTypeVO troop)
 {
     if (starport != null && starport.BuildingComp != null && troop != null)
     {
         float num     = StorageSpreadUtils.GetStarportFullnessPercent(starport);
         int   storage = starport.Get <BuildingComponent>().BuildingType.Storage;
         num += (float)troop.Size / (float)storage;
         if (num > 1f)
         {
             StorageSpreadUtils.UpdateAllStarportFullnessMeters();
         }
         else
         {
             StorageSpreadUtils.SetStarportFullnessPercent(starport, num);
         }
     }
 }
示例#13
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);
        }
示例#14
0
        private void LowerLiftedBuilding(DropKind dropKind, bool affectBoard, bool sendLoweredEvent, bool playLoweredSound, bool showContextButtons)
        {
            SmartEntity selectedBuilding = this.buildingSelector.SelectedBuilding;

            if (selectedBuilding == null)
            {
                this.lifted = false;
                this.moved  = false;
                return;
            }
            UXController uXController = Service.UXController;

            if (dropKind != DropKind.JustDrop)
            {
                uXController.MiscElementsManager.HideConfirmGroup();
            }
            if (affectBoard && dropKind == DropKind.ConfirmPurchase)
            {
                BuildingTypeVO buildingType  = selectedBuilding.BuildingComp.BuildingType;
                int            credits       = buildingType.Credits;
                int            materials     = buildingType.Materials;
                int            contraband    = buildingType.Contraband;
                string         value         = StringUtils.ToLowerCaseUnderscoreSeperated(buildingType.Type.ToString());
                StringBuilder  stringBuilder = new StringBuilder();
                stringBuilder.Append(value);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.BuildingID);
                stringBuilder.Append("|");
                stringBuilder.Append(buildingType.Lvl);
                if (PayMeScreen.ShowIfNotEnoughCurrency(credits, materials, contraband, stringBuilder.ToString(), new OnScreenModalResult(this.OnPayMeForCurrencyResult)))
                {
                    return;
                }
                if (buildingType.Type != BuildingType.DroidHut && PayMeScreen.ShowIfNoFreeDroids(new OnScreenModalResult(this.OnPayMeForDroidResult), null))
                {
                    return;
                }
                if (buildingType.Type == BuildingType.NavigationCenter && buildingType.Lvl == 1)
                {
                    Service.UXController.HUD.InitialNavigationCenterPlanetSelect(selectedBuilding, buildingType, new OnScreenModalResult(this.OnPickPlanetResult));
                    return;
                }
            }
            BuildingTypeVO buildingType2 = selectedBuilding.Get <BuildingComponent>().BuildingType;

            if (buildingType2.Time == 0 && dropKind != DropKind.JustDrop)
            {
                showContextButtons = false;
            }
            if (dropKind != DropKind.JustDrop)
            {
                uXController.HUD.ToggleExitEditModeButton(true);
            }
            this.canOccupy = this.EntireSelectionIsPlaceable();
            if (!this.canOccupy)
            {
                this.LiftSelectedBuilding(selectedBuilding, false, false);
                int i     = 0;
                int count = this.buildingSelector.AdditionalSelectedBuildings.Count;
                while (i < count)
                {
                    this.LiftSelectedBuilding(this.buildingSelector.AdditionalSelectedBuildings[i], false, false);
                    i++;
                }
            }
            bool flag   = !this.LowerLiftedBuildingHelper(selectedBuilding, dropKind, affectBoard, sendLoweredEvent, playLoweredSound, showContextButtons, string.Empty);
            int  j      = 0;
            int  count2 = this.buildingSelector.AdditionalSelectedBuildings.Count;

            while (j < count2)
            {
                this.LowerLiftedBuildingHelper(this.buildingSelector.AdditionalSelectedBuildings[j], dropKind, affectBoard, false, false, false, string.Empty);
                j++;
            }
            if (sendLoweredEvent)
            {
                for (int k = 0; k < this.buildingSelector.AdditionalSelectedBuildings.Count; k++)
                {
                    Service.EventManager.SendEvent(EventId.UserLoweredBuilding, this.buildingSelector.AdditionalSelectedBuildings[k]);
                }
                Service.EventManager.SendEvent(EventId.UserLoweredBuilding, flag ? null : selectedBuilding);
            }
            if (affectBoard && dropKind == DropKind.JustDrop && this.ShouldSaveAfterEveryMove())
            {
                BuildingMultiMoveRequest buildingMultiMoveRequest = new BuildingMultiMoveRequest();
                buildingMultiMoveRequest.PositionMap = new PositionMap();
                Position position = new Position();
                position.X = selectedBuilding.Get <TransformComponent>().X;
                position.Z = selectedBuilding.Get <TransformComponent>().Z;
                buildingMultiMoveRequest.PositionMap.AddPosition(selectedBuilding.Get <BuildingComponent>().BuildingTO.Key, position);
                for (int l = 0; l < this.buildingSelector.AdditionalSelectedBuildings.Count; l++)
                {
                    Entity entity = this.buildingSelector.AdditionalSelectedBuildings[l];
                    position   = new Position();
                    position.X = entity.Get <TransformComponent>().X;
                    position.Z = entity.Get <TransformComponent>().Z;
                    buildingMultiMoveRequest.PositionMap.AddPosition(entity.Get <BuildingComponent>().BuildingTO.Key, position);
                }
                BuildingMultiMoveCommand command = new BuildingMultiMoveCommand(buildingMultiMoveRequest);
                Service.ServerAPI.Sync(command);
            }
            if (dropKind == DropKind.ConfirmPurchase || dropKind == DropKind.CancelPurchase)
            {
                Service.EventManager.SendEvent(EventId.BuildingPurchaseModeEnded, null);
            }
        }
示例#15
0
        private void OnAssetSuccess(object asset, object cookie)
        {
            GameObject  gameObject  = (GameObject)asset;
            ShuttleAnim shuttleAnim = (ShuttleAnim)cookie;

            shuttleAnim.GameObj = gameObject;
            SmartEntity smartEntity = (SmartEntity)shuttleAnim.Starport;

            if (this.shuttles.ContainsKey(smartEntity))
            {
                shuttleAnim.Anim = gameObject.GetComponent <Animation>();
                GameObjectViewComponent gameObjectViewComponent = smartEntity.Get <GameObjectViewComponent>();
                Transform transform = gameObject.transform;
                AssetMeshDataMonoBehaviour component;
                if (shuttleAnim.IsContrabandShuttle)
                {
                    bool flag = shuttleAnim.Percentage < 1f || shuttleAnim.State == ShuttleState.Landing || shuttleAnim.State == ShuttleState.Idle;
                    if (smartEntity.GameObjectViewComp == null || smartEntity.GameObjectViewComp.MainGameObject == null)
                    {
                        this.UnloadShuttle(shuttleAnim);
                        StorageSpreadUtils.UpdateAllStarportFullnessMeters();
                        return;
                    }
                    component = smartEntity.GameObjectViewComp.MainGameObject.GetComponent <AssetMeshDataMonoBehaviour>();
                    for (int i = 0; i < component.OtherGameObjects.Count; i++)
                    {
                        if (component.OtherGameObjects[i].name.Contains("locator_vehicle"))
                        {
                            transform.position = component.OtherGameObjects[i].transform.position;
                            break;
                        }
                    }
                    if (flag)
                    {
                        this.AnimateContrabandShuttle(shuttleAnim, shuttleAnim.Percentage);
                    }
                }
                else if (shuttleAnim.IsArmoryShuttle)
                {
                    if (smartEntity.GameObjectViewComp == null || smartEntity.GameObjectViewComp.MainGameObject == null)
                    {
                        this.UnloadShuttle(shuttleAnim);
                        return;
                    }
                    transform.position = gameObjectViewComponent.MainTransform.position;
                    this.AnimateArmoryShuttle(shuttleAnim);
                }
                else
                {
                    transform.position = gameObjectViewComponent.MainTransform.position;
                    this.AnimateShuttle(shuttleAnim, shuttleAnim.Percentage);
                }
                transform.rotation = Quaternion.AngleAxis(-90f, Vector3.up);
                component          = gameObject.GetComponent <AssetMeshDataMonoBehaviour>();
                if (component != null && component.OtherGameObjects != null)
                {
                    shuttleAnim.ShadowGameObject = component.ShadowGameObject;
                    for (int j = 0; j < component.OtherGameObjects.Count; j++)
                    {
                        if (component.OtherGameObjects[j].name.Contains("center_of_mass"))
                        {
                            shuttleAnim.CenterOfMass = component.OtherGameObjects[j];
                            break;
                        }
                    }
                }
                if (shuttleAnim.ShadowGameObject != null)
                {
                    shuttleAnim.ShadowMaterial        = UnityUtils.EnsureMaterialCopy(shuttleAnim.ShadowGameObject.GetComponent <Renderer>());
                    shuttleAnim.ShadowMaterial.shader = Service.Get <AssetManager>().Shaders.GetShader("TransportShadow");
                }
            }
            else
            {
                this.UnloadShuttle(shuttleAnim);
            }
            StorageSpreadUtils.UpdateAllStarportFullnessMeters();
        }
示例#16
0
        public EatResponse OnEvent(EventId id, object cookie)
        {
            switch (id)
            {
            case EventId.BuildingLevelUpgraded:
            case EventId.BuildingSwapped:
            {
                SmartEntity entity = (cookie as ContractEventData).Entity;
                if (entity != null)
                {
                    bool flag = this.buildingSelector.IsPartOfSelection(entity);
                    if (entity != null && flag)
                    {
                        this.buildingSelector.DeselectSelectedBuilding();
                    }
                    SmartEntity smartEntity = this.ReplaceBuildingAfterTOChange(entity);
                    if (flag && smartEntity != null)
                    {
                        this.buildingSelector.SelectBuilding(smartEntity, Vector3.zero);
                    }
                    Service.AchievementController.TryUnlockAchievementById(AchievementType.BuildingLevel, smartEntity.Get <BuildingComponent>().BuildingType.Uid);
                    this.CheckStarportFullness(smartEntity);
                }
                break;
            }

            case EventId.BuildingConstructed:
                this.CheckStarportFullness(((ContractEventData)cookie).Entity);
                break;

            default:
                if (id != EventId.ContractCompleted)
                {
                    if (id != EventId.ContractCompletedForStoryAction)
                    {
                        if (id == EventId.ClearableCleared)
                        {
                            Entity entity2 = (cookie as ContractEventData).Entity;
                            if (entity2 != null && this.buildingSelector.SelectedBuilding == entity2)
                            {
                                this.buildingSelector.DeselectSelectedBuilding();
                            }
                            Service.EntityFactory.DestroyEntity(entity2, true, true);
                        }
                    }
                    else
                    {
                        ContractTO contractTO = (ContractTO)cookie;
                        if (contractTO.ContractType == ContractType.Upgrade)
                        {
                            BuildingTypeVO buildingTypeVO = Service.StaticDataController.Get <BuildingTypeVO>(contractTO.Uid);
                            if (buildingTypeVO.Type == BuildingType.HQ)
                            {
                                this.OnHQUpgraded();
                            }
                        }
                    }
                }
                else
                {
                    ContractEventData contractEventData = cookie as ContractEventData;
                    ContractType      contractType      = contractEventData.Contract.ContractTO.ContractType;
                    if (contractType == ContractType.Upgrade || contractType == ContractType.Build)
                    {
                        BuildingTypeVO buildingTypeVO2 = Service.StaticDataController.Get <BuildingTypeVO>(contractEventData.Contract.ProductUid);
                        if (buildingTypeVO2.Type == BuildingType.NavigationCenter)
                        {
                            Service.CurrentPlayer.AddUnlockedPlanet(contractEventData.Contract.Tag);
                        }
                        if (buildingTypeVO2.Type == BuildingType.HQ && buildingTypeVO2.Lvl >= GameConstants.OBJECTIVES_UNLOCKED)
                        {
                            Service.ObjectiveManager.RefreshFromServer();
                        }
                    }
                }
                break;
            }
            return(EatResponse.NotEaten);
        }
示例#17
0
        public void UnstashBuildingByUID(string buildingUID, bool returnToOriginalPosition, bool stampable, bool panToBuilding, bool playLoweredSound)
        {
            if (this.stashedBuildingMap == null)
            {
                return;
            }
            if (!this.stashedBuildingMap.ContainsKey(buildingUID) || this.stashedBuildingMap[buildingUID].Count < 1)
            {
                Service.Logger.Error("Can't unstash! No buildings of : " + buildingUID + " currently stashed");
                return;
            }
            List <SmartEntity> list         = this.stashedBuildingMap[buildingUID];
            SmartEntity        smartEntity  = list[0];
            BuildingComponent  buildingComp = smartEntity.BuildingComp;
            bool flag = false;

            if (stampable && this.IsBuildingStampable(smartEntity))
            {
                flag = true;
            }
            Position pos = null;

            if (returnToOriginalPosition)
            {
                pos = this.lastSavedMap.GetPosition(buildingComp.BuildingTO.Key);
                if (flag)
                {
                    flag = false;
                    Service.Logger.Warn("No stamping while reverting!!");
                }
            }
            BuildingController      buildingController      = Service.BuildingController;
            GameObjectViewComponent gameObjectViewComponent = smartEntity.Get <GameObjectViewComponent>();
            TransformComponent      transformComponent      = smartEntity.Get <TransformComponent>();

            if (gameObjectViewComponent != null)
            {
                gameObjectViewComponent.SetXYZ(Units.BoardToWorldX(transformComponent.CenterX()), 0f, Units.BoardToWorldZ(transformComponent.CenterZ()));
            }
            if (smartEntity.Has <HealthViewComponent>())
            {
                HealthViewComponent healthViewComponent = smartEntity.Get <HealthViewComponent>();
                healthViewComponent.SetupElements();
            }
            List <SmartEntity> list2 = this.stashedBuildingMap[buildingUID];

            if (list2.Contains(smartEntity))
            {
                list2.Remove(smartEntity);
                if (!buildingController.PositionUnstashedBuilding(smartEntity, pos, flag, panToBuilding, playLoweredSound))
                {
                    Service.Logger.ErrorFormat("Unable to place building from stash.  Building {0} {1}", new object[]
                    {
                        smartEntity.Get <BuildingComponent>().BuildingTO.Key,
                        smartEntity.Get <BuildingComponent>().BuildingType.Uid
                    });
                    Service.UXController.MiscElementsManager.ShowPlayerInstructionsError(Service.Lang.Get("NO_VALID_POSITION_FOR_UNSTASH", new object[0]));
                    this.StashBuilding(smartEntity);
                }
            }
        }