Beispiel #1
0
        private void DropCargoToken()
        {
            Action Callback = Phases.CurrentSubPhase.CallBack;

            DecisionSubPhase.ConfirmDecisionNoCallback();

            HostUpgrade.State.SpendCharge();

            ManeuverTemplate dropTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed1, isBombTemplate: true);

            dropTemplate.ApplyTemplate(HostShip, HostShip.GetBack(), Direction.Bottom);

            Debris looseCargo = new Debris("Loose Cargo", "loosecargo");

            looseCargo.Spawn("Loose Cargo " + HostShip.ShipId, Board.GetBoard());
            ObstaclesManager.AddObstacle(looseCargo);

            looseCargo.ObstacleGO.transform.position    = dropTemplate.GetFinalPosition();
            looseCargo.ObstacleGO.transform.eulerAngles = dropTemplate.GetFinalAngles();
            looseCargo.IsPlaced = true;

            GameManagerScript.Wait(
                1,
                delegate
            {
                dropTemplate.DestroyTemplate();
                Callback();
            }
                );
        }
Beispiel #2
0
        protected virtual void SkilledBombardierTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            List <ManeuverTemplate> AddedTemplates = new List <ManeuverTemplate>();

            foreach (ManeuverTemplate availableTemplate in availableTemplates)
            {
                ManeuverSpeed    reducedSpeed         = availableTemplate.Speed - 1;
                ManeuverTemplate reducedSpeedTemplate = new ManeuverTemplate(availableTemplate.Bearing, availableTemplate.Direction, reducedSpeed, isBombTemplate: true);
                if (reducedSpeedTemplate.IsValidTemplate() &&
                    !availableTemplates.Any(t => t.Name == reducedSpeedTemplate.Name) &&
                    !AddedTemplates.Any(t => t.Name == reducedSpeedTemplate.Name)
                    )
                {
                    AddedTemplates.Add(reducedSpeedTemplate);
                }

                ManeuverSpeed    increasedSpeed         = availableTemplate.Speed + 1;
                ManeuverTemplate increasedSpeedTemplate = new ManeuverTemplate(availableTemplate.Bearing, availableTemplate.Direction, increasedSpeed, isBombTemplate: true);
                if (increasedSpeedTemplate.IsValidTemplate() &&
                    !availableTemplates.Any(t => t.Name == increasedSpeedTemplate.Name) &&
                    !AddedTemplates.Any(t => t.Name == increasedSpeedTemplate.Name)
                    )
                {
                    AddedTemplates.Add(increasedSpeedTemplate);
                }
            }

            availableTemplates.AddRange(AddedTemplates);
        }
Beispiel #3
0
        private void DropSparePartsToken()
        {
            Action Callback = Phases.CurrentSubPhase.CallBack;

            DecisionSubPhase.ConfirmDecisionNoCallback();

            HostUpgrade.State.SpendCharge();

            ManeuverTemplate dropTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed1, isBombTemplate: true);

            dropTemplate.ApplyTemplate(HostShip, HostShip.GetBack(), Direction.Bottom);

            Debris spareParts = new Debris("Spare Parts", "spareparts");

            spareParts.Spawn("Spare Parts " + HostShip.ShipId, Board.GetBoard());
            ObstaclesManager.AddObstacle(spareParts);

            spareParts.ObstacleGO.transform.position    = dropTemplate.GetFinalPosition();
            spareParts.ObstacleGO.transform.eulerAngles = dropTemplate.GetFinalAngles();
            spareParts.IsPlaced = true;

            GameManagerScript.Wait(
                1,
                delegate
            {
                Messages.ShowInfo("Spare Parts are dropped");
                dropTemplate.DestroyTemplate();
                BreakAllLocksRecursive(Callback);
            }
                );
        }
Beispiel #4
0
        protected virtual void ConstableZuvioTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            ManeuverTemplate newTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed1);

            if (!availableTemplates.Any(t => t.Name == newTemplate.Name))
            {
                availableTemplates.Add(newTemplate);
            }
        }
Beispiel #5
0
        private void BombardierTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            ManeuverTemplate newTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed2, isBombTemplate: true);

            if (!availableTemplates.Any(t => t.Name == newTemplate.Name))
            {
                availableTemplates.Add(newTemplate);
            }
        }
 private void UpdateBarrelRollTemplate(ref ManeuverTemplate maneuverTemplate)
 {
     if (ActionsHolder.CurrentAction.IsRed)
     {
         if (maneuverTemplate.TryIncreaseSpeed())
         {
             Messages.ShowInfo("Overdrive Thursters: Template of 1 speed higher is used");
         }
     }
 }
Beispiel #7
0
        private void RestrictLastTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            HostShip.OnGetAvailableBombDropTemplatesForbid -= RestrictLastTemplate;

            ManeuverTemplate existingTemplate = availableTemplates.FirstOrDefault(n => n.Name == ForbiddenTemplate?.Name);

            if (existingTemplate != null)
            {
                availableTemplates.Remove(existingTemplate);
            }
        }
Beispiel #8
0
        private void ShowBombAndLaunchTemplate(ManeuverTemplate bombDropTemplate)
        {
            bombDropTemplate.ApplyTemplate(Selection.ThisShip, Selection.ThisShip.GetPosition(), Direction.Top);

            Vector3    bombPosition = bombDropTemplate.GetFinalPosition();
            Quaternion bombRotation = bombDropTemplate.GetFinalRotation();

            CreateBombObject(bombPosition, bombRotation);
            BombObjects[0].transform.position = bombPosition;

            SelectedBombLaunchHelper = bombDropTemplate;
        }
Beispiel #9
0
        private void DoSecondDrop(object sender, EventArgs e)
        {
            DecisionSubPhase.ConfirmDecisionNoCallback();

            IsSecondBombDropped = true;
            ForbiddenTemplate   = BombsManager.LastManeuverTemplateUsed;

            HostShip.OnGetAvailableBombDropTemplatesForbid += RestrictLastTemplate;

            // TODO: Check interactions
            BombsManager.DropSelectedDevice(false);
        }
Beispiel #10
0
 private void CheckSecondDrop()
 {
     if (BombsManager.CurrentDevice.GetType() == HostUpgrade.GetType() && !IsSecondBombDropped && HostUpgrade.State.Charges > 0)
     {
         RegisterAbilityTrigger(TriggerTypes.OnCheckDropOfSecondDevice, AskSecondDrop);
     }
     else
     {
         IsSecondBombDropped = false;
         ForbiddenTemplate   = null;
     }
 }
Beispiel #11
0
        private void SelectTemplate(ManeuverTemplate selectedTemplate)
        {
            if (BombsManager.CurrentDevice is GenericBomb)
            {
                ShowBombAndLaunchTemplate(selectedTemplate);
            }
            else if (BombsManager.CurrentDevice.UpgradeInfo.SubType == UpgradeSubType.Remote)
            {
                ShowRemoteAndLaunchTemplate(selectedTemplate);
            }

            DecisionSubPhase.ConfirmDecision();
        }
Beispiel #12
0
        protected virtual void TrajectorySimulatorTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            if (upgrade.UpgradeInfo.SubType != UpgradeSubType.Bomb)
            {
                return;
            }

            ManeuverTemplate newTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed5);

            if (!availableTemplates.Any(t => t.Name == newTemplate.Name))
            {
                availableTemplates.Add(newTemplate);
            }
        }
        private void ShowBombAndDropTemplate(ManeuverTemplate bombDropTemplate)
        {
            GenericBomb bomb = BombsManager.CurrentDevice as GenericBomb;

            bombDropTemplate.ApplyTemplate(Selection.ThisShip, Selection.ThisShip.GetBack(), Direction.Bottom);

            Vector3    bombPosition = bombDropTemplate.GetFinalPosition();
            Quaternion bombRotation = bombDropTemplate.GetFinalRotation();

            CreateBombObject(bombPosition, bombRotation);

            for (int i = 0; i < BombObjects.Count; i++)
            {
                switch (i)
                {
                case 0:
                    BombObjects[i].transform.position = bombPosition;
                    break;

                case 1:
                    BombObjects[i].transform.position = bombPosition
                                                        + BombObjects.First().transform.TransformVector(new Vector3(
                                                                                                            bomb.bombSideDistanceX,
                                                                                                            0,
                                                                                                            bomb.bombSideDistanceZ
                                                                                                            )
                                                                                                        );
                    break;

                case 2:
                    BombObjects[i].transform.position = bombPosition
                                                        + BombObjects.First().transform.TransformVector(new Vector3(
                                                                                                            -bomb.bombSideDistanceX,
                                                                                                            0,
                                                                                                            bomb.bombSideDistanceZ
                                                                                                            )
                                                                                                        );
                    break;

                default:
                    break;
                }

                BombObjects[i].transform.rotation = bombRotation;
            }

            SelectedBombDropHelper = bombDropTemplate;
        }
        private void ShowRemoteAndDropTemplate(ManeuverTemplate bombDropTemplate)
        {
            bombDropTemplate.ApplyTemplate(Selection.ThisShip, Selection.ThisShip.GetBack(), Direction.Bottom);

            Vector3    bombPosition = bombDropTemplate.GetFinalPosition();
            Quaternion bombRotation = bombDropTemplate.GetFinalRotation();

            // TODO: get type of remote from upgrade
            ShipFactory.SpawnRemote(
                (GenericRemote)Activator.CreateInstance(BombsManager.CurrentDevice.UpgradeInfo.RemoteType, Selection.ThisShip.Owner),
                bombPosition,
                bombRotation
                );

            SelectedBombDropHelper = bombDropTemplate;
        }
Beispiel #15
0
        private void TryToAddSecondTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            if (upgrade == HostUpgrade)
            {
                ManeuverTemplate secondTemplate = new ManeuverTemplate(
                    ManeuverBearing.Straight,
                    ManeuverDirection.Forward,
                    ManeuverSpeed.Speed2,
                    isBombTemplate: true
                    );

                if (!availableTemplates.Any(t => t.Name == secondTemplate.Name))
                {
                    availableTemplates.Add(secondTemplate);
                }
            }
        }
Beispiel #16
0
        protected override void TrajectorySimulatorTemplate(List <ManeuverTemplate> availableTemplates, GenericUpgrade upgrade)
        {
            if (Phases.CurrentPhase.GetType() != typeof(MainPhases.SystemsPhase))
            {
                return;
            }

            if (upgrade.UpgradeInfo.SubType != UpgradeSubType.Bomb)
            {
                return;
            }

            ManeuverTemplate newTemplate = new ManeuverTemplate(ManeuverBearing.Straight, ManeuverDirection.Forward, ManeuverSpeed.Speed5);

            if (!availableTemplates.Any(t => t.Name == newTemplate.Name))
            {
                availableTemplates.Add(newTemplate);
            }
        }
 public void SelectTemplate(ManeuverTemplate template, Direction directionPrimary, Direction directionSecondary = Direction.None)
 {
     SelectedTemplate           = template;
     SelectedDirectionPrimary   = directionPrimary;
     SelectedDirectionSecondary = directionSecondary;
 }
        protected virtual void GenerateSelectTemplateDecisions(DecisionSubPhase subphase)
        {
            // Straight templates
            foreach (ManeuverTemplate template in AvailableRepositionTemplates)
            {
                if (template.Bearing == ManeuverBearing.Straight)
                {
                    subphase.AddDecision(
                        "Left " + template.NameNoDirection,
                        (EventHandler) delegate {
                        SelectTemplate(template, Direction.Left);
                        DecisionSubPhase.ConfirmDecision();
                    }
                        );

                    subphase.AddDecision(
                        "Right " + template.NameNoDirection,
                        (EventHandler) delegate {
                        SelectTemplate(template, Direction.Right);
                        DecisionSubPhase.ConfirmDecision();
                    }
                        );
                }
            }

            // Bank templates
            ManeuverTemplate bankLeft  = AvailableRepositionTemplates.FirstOrDefault(n => n.Bearing == ManeuverBearing.Bank && n.Direction == ManeuverDirection.Left);
            ManeuverTemplate bankRight = AvailableRepositionTemplates.FirstOrDefault(n => n.Bearing == ManeuverBearing.Bank && n.Direction == ManeuverDirection.Right);

            if (bankLeft != null && bankRight != null)
            {
                subphase.AddDecision(
                    "Left " + bankRight.NameNoDirection + " Forward",
                    (EventHandler) delegate
                {
                    SelectTemplate(bankRight, Direction.Left, Direction.Top);
                    DecisionSubPhase.ConfirmDecision();
                }
                    );

                subphase.AddDecision(
                    "Right " + bankLeft.NameNoDirection + " Forward",
                    (EventHandler) delegate
                {
                    SelectTemplate(bankLeft, Direction.Right, Direction.Top);
                    DecisionSubPhase.ConfirmDecision();
                }
                    );

                subphase.AddDecision(
                    "Left " + bankLeft.NameNoDirection + " Backwards",
                    (EventHandler) delegate
                {
                    SelectTemplate(bankLeft, Direction.Left, Direction.Bottom);
                    DecisionSubPhase.ConfirmDecision();
                }
                    );

                subphase.AddDecision(
                    "Right " + bankRight.NameNoDirection + " Backwards",
                    (EventHandler) delegate
                {
                    SelectTemplate(bankRight, Direction.Right, Direction.Bottom);
                    DecisionSubPhase.ConfirmDecision();
                }
                    );
            }
        }
Beispiel #19
0
 public void CallUpdateChosenBarrelRollTemplate(ref ManeuverTemplate barrelRollTemplate)
 {
     OnUpdateChosenBarrelRollTemplate?.Invoke(ref barrelRollTemplate);
 }
Beispiel #20
0
 private void SelectTemplate(ManeuverTemplate maneuverTemplate)
 {
     SelectedManeuverTemplate = maneuverTemplate;
     DecisionSubPhase.ConfirmDecision();
 }