/// <summary> /// Prepares the action shot. /// </summary> public override void Prepare() { base.Prepare(); List <Turret> availableTurrets = new List <Turret>(); if (BattleInterface.battle.recentTurnInformation.hitShips.Count > 0) { Ship ship = BattleInterface.battle.recentTurnInformation.hitShips[0]; if (ship.eliminated && (ship.IsRevealedTo(BattleInterface.battle.attackingPlayer) || (GameController.humanPlayers == 1 && !BattleInterface.battle.defendingPlayer.AI) || GameController.humanPlayers == 0)) { killingShot = true; } if ((GameController.humanPlayers == 1 && !BattleInterface.battle.defendingPlayer.AI) || GameController.humanPlayers == 0 || killingShot) { BattleInterface.battle.recentTurnInformation.hitShips[0].gameObject.SetActive(true); } } foreach (Ship ship in attackers) { //ship.PrepareToFireAt(BattleInterface.battle.defendingPlayer.board.tiles[(int)BattleInterface.battle.recentlyShot.x, (int)BattleInterface.battle.recentlyShot.y].worldPosition, BattleInterface.battle.defendingPlayer.board.tiles[(int)BattleInterface.battle.recentlyShot.x, (int)BattleInterface.battle.recentlyShot.y].containedShip); ship.PrepareToFireAt(BattleInterface.battle.recentTurnInformation.hitTiles[0].transform.position, BattleInterface.battle.recentTurnInformation.hitShips.Count > 0 ? BattleInterface.battle.recentTurnInformation.hitShips[0] : null); foreach (Turret turret in ship.turrets) { if (turret.canFire && !turret.ignoredByActionCamera) { availableTurrets.Add(turret); } } } if (availableTurrets.Count > 0) { selectedTurret = availableTurrets[Random.Range(0, availableTurrets.Count)]; selectedShip = selectedTurret.ship; if (selectedShip != null && !killingShot) { Vector3 direction = selectedTurret.gunDirection; float xzDistance = Vector2.Distance(Vector2.zero, new Vector2(direction.x, direction.z)); Vector3 angle = new Vector3(Mathf.Atan2(-direction.y, xzDistance) * Mathf.Rad2Deg, Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg, 0f); direction.y = 0f; Cameraman.TakePosition(new Cameraman.CameraPosition(0.25f, selectedTurret.transform.position + Vector3.up * 0.3f - direction, angle)); } } if (attackers.Count == 0) { Actionman.EndActionView(); } }
/// <summary> /// Refreshes the action shot. /// </summary> public override void Refresh() { base.Refresh(); if (Cameraman.transitionProgress > 99.7f && !fired) { fired = true; selectedDestroyer.FireTorpedoLaunchers(); } if (lifetime > 12f || (BattleInterface.battle.recentTurnInformation.torpedoInfo.impacts.Count == 0 && lifetime > 4f)) { Actionman.EndActionView(); } }
/// <summary> /// On battle state change. /// </summary> /// <param name="switchingFrom">...</param> /// <param name="switchingTo">...</param> static void OnBattleStateChange(BattleState switchingFrom, BattleState switchingTo) { switch (switchingFrom) { case BattleState.SHOWING_HIT_TILE: break; case BattleState.FIRING: foreach (Ship ship in battle.attackingPlayer.livingShips) { ship.PositionOnPlayingBoard(); ship.gameObject.SetActive(false); } break; case BattleState.CHOOSING_TILE_TO_SHOOT: TorpedoTargetingBattleUIModule.Disable(); break; } switch (switchingTo) { case BattleState.FIRING: battle.ChangeState(BattleState.SHOWING_HIT_TILE, 1f); Actionman.ActionView(); break; case BattleState.SHOWING_HIT_TILE: battle.ChangeState(BattleState.TURN_FINISHED, 1.5f); ViewPlayer(battle.defendingPlayer); break; case BattleState.TURN_FINISHED: SetUpOverhead(); Cameraman.TakePosition("Overhead View", 0.45f); Interface.SwitchMenu("Overhead"); break; case BattleState.CHOOSING_TILE_TO_SHOOT: break; } }
/// <summary> /// Prepares the action view. /// </summary> public override void Prepare() { base.Prepare(); Vector3 fleetPosition = Vector3.zero; if (BattleInterface.battle.recentTurnInformation.hitShips.Count > 0) { if ((GameController.humanPlayers == 1 && !BattleInterface.battle.defendingPlayer.AI) || GameController.humanPlayers == 0) { BattleInterface.battle.recentTurnInformation.hitShips[0].gameObject.SetActive(true); } } if (Mathf.Abs(BattleInterface.battle.defendingPlayer.board.transform.position.z) < Mathf.Abs(BattleInterface.battle.defendingPlayer.board.transform.position.x)) { fleetPosition = BattleInterface.battle.defendingPlayer.board.transform.position - Vector3.right * GameController.playerBoardDistanceFromCenter * Mathf.Sign(BattleInterface.battle.defendingPlayer.board.transform.position.x) * 1.5f; } else { fleetPosition = BattleInterface.battle.defendingPlayer.board.transform.position - Vector3.forward * GameController.playerBoardDistanceFromCenter * Mathf.Sign(BattleInterface.battle.defendingPlayer.board.transform.position.z) * 1.5f; } fleetPosition.y = GameController.seaLevel; Vector3 targetCameraPosition = Vector3.Lerp(fleetPosition, BattleInterface.battle.recentTurnInformation.hitTiles[0].transform.position, 0.5f); targetCameraPosition.y = 35f; Cameraman.TakePosition(new Cameraman.CameraPosition(0.45f, targetCameraPosition, Vector3.right * 90f)); foreach (Ship ship in attackers) { //ship.PrepareToFireAt(BattleInterface.battle.defendingPlayer.board.tiles[(int)BattleInterface.battle.recentlyShot.x, (int)BattleInterface.battle.recentlyShot.y].worldPosition, BattleInterface.battle.defendingPlayer.board.tiles[(int)BattleInterface.battle.recentlyShot.x, (int)BattleInterface.battle.recentlyShot.y].containedShip); float time = ship.PrepareToFireAt(BattleInterface.battle.recentTurnInformation.hitTiles[0].transform.position, BattleInterface.battle.recentTurnInformation.hitShips[0]); timeNeeded = (time > timeNeeded) ? time : timeNeeded; } if (attackers.Count == 0) { Actionman.EndActionView(); } }
/// <summary> /// Refreshes the action view. /// </summary> public override void Refresh() { base.Refresh(); switch (stage) { case 0: if (Cameraman.transitionProgress > 98f) { foreach (Ship ship in attackers) { ship.Fire(); } stage = 1; } break; case 1: if (lifetime > 3.5f) { Actionman.EndActionView(); } break; } }
/// <summary> /// Refreshes the action shot. /// </summary> public override void Refresh() { base.Refresh(); //killingShot = true; if (killingShot) { switch (stage) { case 0: CalculateEndStageCameraOffsetDirection(); EndStageCamera(); stage = 1; break; case 1: if (Cameraman.transitionProgress > 98f) { FireAllShipGuns(); stage = 2; } break; case 2: if (lifetime > 3.5f) { Actionman.EndActionView(); } break; } } else { switch (stage) { case 0: if (Cameraman.transitionProgress > 98.75f) { FireAllShipGuns(); CalculateEndStageCameraOffsetDirection(); stage = 1; } break; case 1: if (FollowProjectile()) { stage = 2; } break; case 2: if (FollowProjectile()) { if (projectile.travelTimeLeft / projectile.TravelTime < 0.2f) { EndStageCamera(); stage = 3; } } else { EndStageCamera(); stage = 3; } break; case 3: if (Cameraman.transitionProgress > 98f) { Actionman.EndActionView(); } break; } } }