Example #1
0
        private void HidePlanningTemplates()
        {
            TheShip.GetBoosterHelper().Find(SelectedBoostHelper).gameObject.SetActive(false);
            MonoBehaviour.Destroy(ShipStand);

            Roster.SetRaycastTargets(true);
        }
        protected override void StartRepositionExecutionSubphase()
        {
            Pause();

            TheShip.ToggleShipStandAndPeg(false);

            if (SelectedDirectionPrimary == Direction.Top)
            {
                DecloakBoostExecutionSubPhase execution = (DecloakBoostExecutionSubPhase)Phases.StartTemporarySubPhaseNew(
                    "Boost execution",
                    typeof(DecloakBoostExecutionSubPhase),
                    CallBack
                    );
                execution.TheShip             = TheShip;
                execution.IsTractorBeamBoost  = IsTractorBeamBarrelRoll;
                execution.SelectedBoostHelper = SelectedBoostHelper;
                execution.FinalPositionInfo   = new ShipPositionInfo(TemporaryShipBase.transform.position, TemporaryShipBase.transform.eulerAngles);
                execution.Start();
            }
            else
            {
                BarrelRollExecutionSubPhase executionSubphase = (DecloakBarrelRollExecutionSubPhase)Phases.StartTemporarySubPhaseNew(
                    "Barrel Roll execution",
                    typeof(DecloakBarrelRollExecutionSubPhase),
                    CallBack
                    );

                executionSubphase.TheShip                 = TheShip;
                executionSubphase.TemporaryShipBase       = TemporaryShipBaseFinal;
                executionSubphase.Direction               = SelectedDirectionPrimary;
                executionSubphase.IsTractorBeamBarrelRoll = IsTractorBeamBarrelRoll;

                executionSubphase.Start();
            }
        }
Example #3
0
        public override GameObject[] PlanMovement()
        {
            GameObject[] result = new GameObject[101];

            float   distancePart = (TheShip.ShipBase.GetShipBaseDistance() + Speed * GetMovement1()) / 100f;
            Vector3 position     = TheShip.GetPosition();

            for (int i = 0; i <= 100; i++)
            {
                if (i > 0)
                {
                    position = Vector3.MoveTowards(position, position + TheShip.TransformDirection(Vector3.forward), distancePart);
                }
                GameObject prefab    = (GameObject)Resources.Load(TheShip.ShipBase.TemporaryPrefabPath, typeof(GameObject));
                GameObject ShipStand = MonoBehaviour.Instantiate(prefab, position, TheShip.GetRotation(), BoardTools.Board.GetBoard());

                Renderer[] renderers = ShipStand.GetComponentsInChildren <Renderer>();
                if (!DebugManager.DebugMovement)
                {
                    foreach (var render in renderers)
                    {
                        render.enabled = false;
                    }
                }

                result[i] = ShipStand;
            }

            return(result);
        }
Example #4
0
        private void RotateTractoredShip(Direction direction, Action callback)
        {
            //We need to change Selection.ThisShip before rotating. Making sure that we always change back afterwards
            var selectedShip = Selection.ThisShip;

            Selection.ThisShip = TheShip;

            Action resetSelection = () =>
            {
                Selection.ThisShip = selectedShip;
                callback();
            };

            Action assignStress = () =>
            {
                TheShip.Tokens.AssignToken(typeof(StressToken), resetSelection);
            };

            if (direction == Direction.Left)
            {
                TheShip.Rotate90Counterclockwise(assignStress);
            }
            else if (direction == Direction.Right)
            {
                TheShip.Rotate90Clockwise(assignStress);
            }
            else
            {
                resetSelection();
            }
        }
Example #5
0
        public void StartBoostPlanning()
        {
            AvailableBoostMoves = TheShip.GetAvailableBoostTemplates();

            InitializeRendering();

            AskSelectTemplate();
        }
Example #6
0
 private void FinishTractorBeamMovement(ActionsList.GenericAction action)
 {
     TheShip.CallActionIsTaken(action, delegate {
         // ^ CallActionIsTaken to support interaction with black one, etc
         Rules.AsteroidHit.CheckDamage(TheShip);
         Triggers.ResolveTriggers(TriggerTypes.OnShipMovementFinish, Next);
     });
 }
 private void ShowBarrelRollTemplate()
 {
     SelectedTemplate.ApplyTemplate(
         TheShip,
         (SelectedDirectionPrimary == Direction.Left) ? TheShip.GetLeft() : TheShip.GetRight(),
         SelectedDirectionPrimary
         );
 }
Example #8
0
 private void SyncCollisions(ObstaclesStayDetectorForced collider)
 {
     TheShip.ObstaclesLanded = new List <GenericObstacle>(collider.OverlappedAsteroidsNow);
     if (!TheShip.IsIgnoreObstaclesDuringBarrelRoll())
     {
         collider.OverlappedAsteroidsNow
         .Where((a) => !TheShip.ObstaclesHit.Contains(a)).ToList()
         .ForEach(TheShip.ObstaclesHit.Add);
     }
 }
Example #9
0
        protected virtual void FinishMovementEvents()
        {
            MovementTemplates.HideLastMovementRuler();

            TheShip.CallExecuteMoving();

            //Called as callbacks
            //TargetShip.FinishMovement();
            //TargetShip.FinishPosition();
            //Phases.FinishSubPhase(typeof(SubPhases.MovementExecutionSubPhase));
        }
        public void ProcessTemplatePositionSlider(float value)
        {
            Vector3 newPositionRel = Vector3.zero;

            newPositionRel.x = HelperDirection * TheShip.ShipBase.HALF_OF_SHIPSTAND_SIZE;
            newPositionRel.z = value;

            Vector3 newPositionAbs = TheShip.TransformPoint(newPositionRel);

            DecloakTemplate.transform.position = newPositionAbs;
        }
Example #11
0
        public void ProcessTemplatePositionSlider(float value)
        {
            Vector3 newPositionRel = Vector3.zero;

            newPositionRel.x = HelperDirection * templateWidth;
            newPositionRel.z = value;

            Vector3 newPositionAbs = TheShip.TransformPoint(newPositionRel);

            BarrelRollTemplate.transform.position = newPositionAbs;
        }
        public override void UpdateMovementExecution()
        {
            float progressDelta = AnimationSpeed * Time.deltaTime;

            progressDelta    = Mathf.Clamp(progressDelta, 0, Mathf.Abs(ProgressTarget - ProgressCurrent));
            ProgressCurrent += progressDelta;

            TheShip.SetPosition(Vector3.MoveTowards(TheShip.GetPosition(), TheShip.GetPosition() + TheShip.TransformDirection(Vector3.forward), progressDelta));

            base.UpdateMovementExecution();
        }
 public virtual void LaunchShipMovement()
 {
     if (!DebugManager.BatchAiSquadTestingModeActive)
     {
         GameManagerScript.Wait(0.5f, delegate { TheShip.StartMoving(LaunchShipMovementContinue); });
     }
     else
     {
         TheShip.StartMoving(LaunchShipMovementContinue);
     }
 }
Example #14
0
        protected virtual void FinishMovement()
        {
            //TEMP
            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.isMoving = false;

            TheShip.ApplyRotationHelpers();
            TheShip.ResetRotationHelpers();

            ManeuverEndRotation(FinishMovementEvents);
        }
Example #15
0
        private void ShowBoosterHelper()
        {
            TheShip.GetBoosterHelper().Find(SelectedBoostHelper).gameObject.SetActive(true);

            Transform newBase = TheShip.GetBoosterHelper().Find(SelectedBoostHelper + "/Finisher/BasePosition");

            ShipStand.transform.position = new Vector3(newBase.position.x, 0, newBase.position.z);
            ShipStand.transform.rotation = newBase.rotation;

            obstaclesStayDetectorMovementTemplate         = TheShip.GetBoosterHelper().Find(SelectedBoostHelper).GetComponentInChildren <ObstaclesStayDetectorForced>();
            obstaclesStayDetectorMovementTemplate.TheShip = TheShip;
        }
Example #16
0
        protected override void FinishMovement()
        {
            //TEMP
            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.FuncsToUpdate.Remove(UpdateBoost);

            MovementTemplates.HideLastMovementRuler();
            TheShip.ResetRotationHelpers();

            (Phases.CurrentSubPhase as SubPhases.BoostExecutionSubPhase).FinishBoost();
        }
        protected virtual void LaunchMovementFinisher()
        {
            ProgressCurrent = 0;

            Vector3 TargetPosition = new Vector3(0, 0, TheShip.ShipBase.GetShipBaseDistance());

            ProgressTarget = TargetPosition.z * finisherTargetSuccess;

            AnimationSpeed = Options.ManeuverSpeed * 5f;

            TheShip.SimplifyRotationHelpers();
            movementFinisherLaunched = true;
        }
Example #18
0
        private void ApplyBarrelRollTemplateLimits()
        {
            Vector3 newPosition = TheShip.InverseTransformPoint(BarrelRollTemplate.transform.position);

            Vector3 fixedPositionRel = newPosition;

            fixedPositionRel.x = HelperDirection * templateWidth;
            fixedPositionRel.z = Mathf.Clamp(fixedPositionRel.z, -0.75f * TheShip.ShipBase.SHIPSTAND_SIZE, -0.25f * TheShip.ShipBase.SHIPSTAND_SIZE);

            Vector3 fixedPositionAbs = TheShip.TransformPoint(fixedPositionRel);

            BarrelRollTemplate.transform.position = fixedPositionAbs;
        }
        // ROTATION

        public void UpdateRotation()
        {
            if (GetPathToProcessLeft(TheShip.GetModelOrientation()) > 0)
            {
                float rotationFix = GetRotationFix(TheShip.GetModelOrientation());
                TheShip.SetRotationHelper2Angles(new Vector3(0, rotationFix, 0));

                float angleFix = GetAngleFix(TheShip.GetModelOrientation());
                TheShip.UpdateRotationHelperAngles(new Vector3(0, angleFix, 0));
            }

            AddMovementTemplateCenterPoint(TheShip.Model);
        }
Example #20
0
        public void CancelBoost()
        {
            TheShip.IsLandedOnObstacle = false;

            TheShip.RemoveAlreadyExecutedAction(typeof(ActionsList.BoostAction));
            MonoBehaviour.Destroy(ShipStand);

            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.CollidedWith = null;
            MovementTemplates.HideLastMovementRuler();

            PreviousSubPhase.Resume();
        }
Example #21
0
        private void StartBarrelRollExecution()
        {
            Rules.Collision.ClearBumps(TheShip);

            progressCurrent = 0;
            progressTarget  = Vector3.Distance(TheShip.GetPosition(), TemporaryShipBase.transform.position);

            initialRotation = (TheShip.GetAngles().y < 180) ? TheShip.GetAngles().y : -(360 - TheShip.GetAngles().y);
            plannedRotation = (TemporaryShipBase.transform.eulerAngles.y - initialRotation < 180) ? TemporaryShipBase.transform.eulerAngles.y : -(360 - TemporaryShipBase.transform.eulerAngles.y);

            Sounds.PlayFly(TheShip);

            performingAnimation = true;
        }
Example #22
0
        public void InitializeRendering()
        {
            GameObject prefab = (GameObject)Resources.Load(TheShip.ShipBase.TemporaryPrefabPath, typeof(GameObject));

            ShipStand = MonoBehaviour.Instantiate(prefab, TheShip.GetPosition(), TheShip.GetRotation(), BoardTools.Board.GetBoard());
            ShipStand.transform.position = new Vector3(ShipStand.transform.position.x, 0, ShipStand.transform.position.z);
            foreach (Renderer render in ShipStand.transform.Find("ShipBase").GetComponentsInChildren <Renderer>())
            {
                render.enabled = false;
            }
            ShipStand.transform.Find("ShipBase").Find("ObstaclesStayDetector").gameObject.AddComponent <ObstaclesStayDetectorForced>();
            obstaclesStayDetectorBase         = ShipStand.GetComponentInChildren <ObstaclesStayDetectorForced>();
            obstaclesStayDetectorBase.TheShip = TheShip;
            Roster.SetRaycastTargets(false);
        }
Example #23
0
        protected override void FinishMovement()
        {
            //TEMP
            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.FuncsToUpdate.Remove(UpdateBoost);

            MovementTemplates.HideLastMovementRuler();
            TheShip.ResetRotationHelpers();

            // Important! Fixes final position according to prediction - otherwise animation can cause another final position
            TheShip.SetPositionInfo(FinalPositionInfo);

            (Phases.CurrentSubPhase as SubPhases.BoostExecutionSubPhase).FinishBoost();
        }
Example #24
0
        protected virtual void FinishMovement()
        {
            //TEMP
            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.isMoving = false;

            TheShip.ApplyRotationHelpers();
            TheShip.ResetRotationHelpers();

            // TODO: Use Selection.ActiveShip instead of TheShip
            Selection.ActiveShip = TheShip;

            ManeuverEndRotation(FinishManeuverExecution);
        }
        private bool IsBoostTemplateColliderDataAllowed(ObstaclesStayDetectorForced collider)
        {
            if (!TheShip.IsIgnoreObstacles &&
                !TheShip.IsIgnoreObstaclesDuringBarrelRoll() &&
                !IsTractorBeamBarrelRoll &&
                collider.OverlapsAsteroidNow)
            {
                BarrelRollProblems.Add(ActionFailReason.ObstacleHit);
            }
            else if (collider.OffTheBoardNow)
            {
                BarrelRollProblems.Add(ActionFailReason.OffTheBoard);
            }

            return(BarrelRollProblems.Count == 0);
        }
Example #26
0
        public void StartBoostPlanning()
        {
            AvailableBoostMoves = TheShip.GetAvailableBoostTemplates(HostAction);

            InitializeRendering();

            if (SelectedBoostHelper != null)
            {
                SelectTemplate(AvailableBoostMoves.First(n => n.Name == SelectedBoostHelper));
                SelectTemplateDecisionIsTaken();
            }
            else
            {
                AskSelectTemplate();
            }
        }
Example #27
0
        public void CancelBarrelRoll()
        {
            StopDrag();

            TheShip.RemoveAlreadyExecutedAction(typeof(ActionsList.BarrelRollAction));

            TheShip.IsLandedOnObstacle = false;
            GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>();

            Game.Movement.CollidedWith = null;

            MonoBehaviour.Destroy(TemporaryShipBase);
            BarrelRollTemplate.SetActive(false);

            PreviousSubPhase.Resume();
        }
Example #28
0
        private void SelectTemplateDecisionIsTaken()
        {
            if (SelectedBoostHelper != null)
            {
                TheShip.CallUpdateChosenBoostTemplate(ref SelectedBoostHelper);

                (HostAction as BoostAction).SelectedBoostTemplate = SelectedBoostHelper;
                TryConfirmBoostPosition();
            }
            else
            {
                CancelBoost(new List <ActionFailReason>()
                {
                    ActionFailReason.NoTemplateAvailable
                });
            }
        }
Example #29
0
        private void DoBarrelRollAnimation()
        {
            float progressStep = 2.5f * Time.deltaTime * Options.AnimationSpeed;

            progressStep     = Mathf.Min(progressStep, progressTarget - progressCurrent);
            progressCurrent += progressStep;

            TheShip.SetPosition(Vector3.MoveTowards(TheShip.GetPosition(), TemporaryShipBase.transform.position, progressStep));
            TheShip.RotateModelDuringBarrelRoll(progressCurrent / progressTarget, HelperDirection);
            TheShip.SetRotationHelper2Angles(new Vector3(0, progressCurrent / progressTarget * (plannedRotation - initialRotation), 0));
            TheShip.MoveUpwards(progressCurrent / progressTarget);
            if (progressCurrent >= progressTarget)
            {
                performingAnimation = false;
                GameMode.CurrentGameMode.FinishBarrelRoll();
            }
        }
        public void UpdateRotationFinisher()
        {
            if (MovementTemplates.CurrentTemplate.transform.Find("Finisher") != null)
            {
                TheShip.SimplifyRotationHelpers();
                bool isSuccessfull = TryRotateUsingStarter(TheShip.GetModelOrientation());
                //bool isSuccessfull = false;

                if (!isSuccessfull)
                {
                    if (GetPathToProcessFinisherLeft(TheShip.Model) > 0)
                    {
                        float angleToNearestCenterPoint = GetAngleToLastSavedTemplateCenterPoint(TheShip.GetModelOrientation());
                        TheShip.UpdateRotationHelper2Angles(new Vector3(0, angleToNearestCenterPoint * GetDirectionModifier(), 0));
                    }
                }
            }
        }