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(); } ); }
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); }
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); } ); }
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); } }
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"); } } }
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); } }
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; }
private void DoSecondDrop(object sender, EventArgs e) { DecisionSubPhase.ConfirmDecisionNoCallback(); IsSecondBombDropped = true; ForbiddenTemplate = BombsManager.LastManeuverTemplateUsed; HostShip.OnGetAvailableBombDropTemplatesForbid += RestrictLastTemplate; // TODO: Check interactions BombsManager.DropSelectedDevice(false); }
private void CheckSecondDrop() { if (BombsManager.CurrentDevice.GetType() == HostUpgrade.GetType() && !IsSecondBombDropped && HostUpgrade.State.Charges > 0) { RegisterAbilityTrigger(TriggerTypes.OnCheckDropOfSecondDevice, AskSecondDrop); } else { IsSecondBombDropped = false; ForbiddenTemplate = null; } }
private void SelectTemplate(ManeuverTemplate selectedTemplate) { if (BombsManager.CurrentDevice is GenericBomb) { ShowBombAndLaunchTemplate(selectedTemplate); } else if (BombsManager.CurrentDevice.UpgradeInfo.SubType == UpgradeSubType.Remote) { ShowRemoteAndLaunchTemplate(selectedTemplate); } DecisionSubPhase.ConfirmDecision(); }
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; }
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); } } }
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(); } ); } }
public void CallUpdateChosenBarrelRollTemplate(ref ManeuverTemplate barrelRollTemplate) { OnUpdateChosenBarrelRollTemplate?.Invoke(ref barrelRollTemplate); }
private void SelectTemplate(ManeuverTemplate maneuverTemplate) { SelectedManeuverTemplate = maneuverTemplate; DecisionSubPhase.ConfirmDecision(); }