/// <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();
        }
    }
Exemplo n.º 2
0
    /// <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();
        }
    }
Exemplo n.º 3
0
    /// <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;
            }
        }
    }