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(); } }
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); }
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(); } }
public void StartBoostPlanning() { AvailableBoostMoves = TheShip.GetAvailableBoostTemplates(); InitializeRendering(); AskSelectTemplate(); }
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 ); }
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); } }
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; }
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); } }
protected virtual void FinishMovement() { //TEMP GameManagerScript Game = GameObject.Find("GameManager").GetComponent <GameManagerScript>(); Game.Movement.isMoving = false; TheShip.ApplyRotationHelpers(); TheShip.ResetRotationHelpers(); ManeuverEndRotation(FinishMovementEvents); }
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; }
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; }
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); }
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(); }
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; }
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); }
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(); }
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); }
public void StartBoostPlanning() { AvailableBoostMoves = TheShip.GetAvailableBoostTemplates(HostAction); InitializeRendering(); if (SelectedBoostHelper != null) { SelectTemplate(AvailableBoostMoves.First(n => n.Name == SelectedBoostHelper)); SelectTemplateDecisionIsTaken(); } else { AskSelectTemplate(); } }
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(); }
private void SelectTemplateDecisionIsTaken() { if (SelectedBoostHelper != null) { TheShip.CallUpdateChosenBoostTemplate(ref SelectedBoostHelper); (HostAction as BoostAction).SelectedBoostTemplate = SelectedBoostHelper; TryConfirmBoostPosition(); } else { CancelBoost(new List <ActionFailReason>() { ActionFailReason.NoTemplateAvailable }); } }
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)); } } } }