void Update()
    {
        // Cheap AI Control
        core.SetThrottle(1f);
        Vector3 firstDir = (player.transform.position - transform.position).normalized;

        firstDir = Quaternion.Euler(0f, -shipPivot.transform.eulerAngles.y, 0f) * firstDir;
        Vector3 orbitOffset;

        if (firstDir.x > 0f)
        {
            orbitOffset = Quaternion.Euler(0f, -90f, 0f) * (player.transform.position - transform.position).normalized;
        }
        else
        {
            orbitOffset = Quaternion.Euler(0f, 90f, 0f) * (player.transform.position - transform.position).normalized;
        }
        Vector3 targetDir = (player.transform.position + orbitOffset * targetOrbitDistance - transform.position).normalized;

        targetDir = Quaternion.Euler(0f, -shipPivot.transform.eulerAngles.y, 0f) * targetDir;
        if (targetDir.x > 0f)
        {
            core.SetRudder(1f);
        }
        else
        {
            core.SetRudder(-1f);
        }
        turret.UpdateAim(player.transform.position + Quaternion.Euler(0f, player.transform.Find("Ship Pivot").eulerAngles.y, 0f) * new Vector3(0f, 0.25f, -0.65f), player.GetComponent <ShipCore>().GetVelocity());
        if (turret.IfOnTarget())
        {
            turret.FireCannon(playerMask);
        }
        if (core.GetHealth() == 0f)
        {
            //player.GetComponent<PlayerShipController>().IncreaseScore();
            //gameMaster.EnemyDestroyed();
            Destroy(gameObject);
        }
    }
Exemple #2
0
    private void Update()
    {
        if (isLocal)
        {
            HideCursor(gameMaster.IsGameInProgress());
            if (playerInput == PlayerInput.KEYBOARD)
            {
                if (isAlive)
                {
                    if (Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S))
                    {
                        core.SetThrottle(1f);
                    }
                    else if (Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.W))
                    {
                        core.SetThrottle(-1f);
                    }
                    else
                    {
                        core.SetThrottle(0f);
                    }
                    if (Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D))
                    {
                        core.SetRudder(-1f);
                    }
                    else if (Input.GetKey(KeyCode.D) && !Input.GetKey(KeyCode.A))
                    {
                        core.SetRudder(1f);
                    }
                    else
                    {
                        core.SetRudder(0f);
                    }
                }
                cameraAim = new Vector2(cameraAim.x + Input.GetAxis("Mouse X"), Mathf.Clamp(cameraAim.y - Input.GetAxis("Mouse Y"), -cameraMaxY_up, cameraMaxY_down));
                cameraPivot.transform.rotation = Quaternion.Euler(cameraAim.y, cameraAim.x, 0f);
                if (isAlive)
                {
                    if (Input.GetMouseButton(0))
                    {
                        turret.FireCannon(playerMask);
                    }
                    if (Input.GetMouseButton(1))
                    {
                        missileLauncher.Launch();
                    }
                }
            }

            if (isAlive)
            {
                Ray aimRay = mainCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
                if (Physics.Raycast(aimRay, out RaycastHit aimHit, 50000f, playerMask + (1 << 14)))
                {
                    //Debug.Log("Raycast hit: " + aimHit.transform.name);
                    if (aimHit.transform.gameObject.layer == 9 || aimHit.transform.gameObject.layer == 13)
                    {
                        KaijuCore enemy = aimHit.transform.root.Find("Kaiju").GetComponent <KaijuCore>();
                        //turret.UpdateAim(enemy.transform.position + Quaternion.Euler(0f, enemy.transform.Find("Ship Pivot").eulerAngles.y, 0f) * new Vector3(0f, 0.25f, -0.65f), enemy.GetMovement());//enemy.GetVelocity());
                        turret.UpdateAim(aimHit.point, enemy.GetMovement());
                        //Vector3 point = enemy.transform.position + Quaternion.Euler(0f, enemy.transform.Find("Ship Pivot").eulerAngles.y, 0f) * new Vector3(0f, 0.25f, -0.65f);
                        Vector3 point = aimHit.point;
                        Debug.DrawLine(point, turret.transform.position, Color.red);
                        crosshair.color = new Color(1f, 0.25f, 0f, 0.65f);
                    }
                    else
                    {
                        turret.UpdateAim(aimHit.point, Vector3.zero);
                        crosshair.color = new Color(1f, 1f, 1f, 0.65f);
                    }
                }
                else
                {
                    Vector3 targetPointTemp = mainCamera.gameObject.transform.position + aimRay.direction * 50000f;
                    if (targetPointTemp.y < 0f)
                    {
                        targetPointTemp = new Vector3(targetPointTemp.x, 0f, targetPointTemp.z);
                    }
                    turret.UpdateAim(targetPointTemp, Vector3.zero);
                    crosshair.color = new Color(0.75f, 0.75f, 0.75f, 0.50f);
                }
            }
        }
    private void Update()
    {
        // Add Player To GameMaster
        if (!gameMasterActive && gameMaster != null)
        {
            playerNumber     = gameMaster.AddPlayer(gameObject);
            gameMasterActive = true;
        }

        // Health / Set Alive
        if (playing && isKaiju && (kaijuHealth > 0f) != kaijuController.isAlive)
        {
            kaijuController.isAlive = kaijuHealth > 0f;
            if (playing && kaijuCore.dying != (kaijuHealth <= 0f))
            {
                kaijuCore.dying = kaijuHealth <= 0f;
            }
        }
        if (playing && !isKaiju && (shipHealth > 0f) != shipController.isAlive)
        {
            shipController.isAlive = shipHealth > 0f;
            if (playing && shipCore.dying != (shipHealth <= 0f))
            {
                shipCore.dying = shipHealth <= 0f;
            }
        }
        // Set Active Weapon
        if (playing && shipWeapon == Weapons.RAILGUN && (!shipWeapons[0].activeSelf || shipWeapons[1].activeSelf || shipWeapons[2].activeSelf))
        {
            shipWeapons[0].SetActive(true);
            shipWeapons[1].SetActive(false);
            shipWeapons[2].SetActive(false);
        }
        if (playing && shipWeapon == Weapons.LASER && (shipWeapons[0].activeSelf || !shipWeapons[1].activeSelf || shipWeapons[2].activeSelf))
        {
            shipWeapons[0].SetActive(false);
            shipWeapons[1].SetActive(true);
            shipWeapons[2].SetActive(false);
        }
        if (playing && shipWeapon == Weapons.MINIGUN && (shipWeapons[0].activeSelf || shipWeapons[1].activeSelf || !shipWeapons[2].activeSelf))
        {
            shipWeapons[0].SetActive(false);
            shipWeapons[1].SetActive(false);
            shipWeapons[2].SetActive(true);
        }
        if (!playing && (shipWeapons[0].activeSelf || shipWeapons[1].activeSelf || shipWeapons[2].activeSelf))
        {
            shipWeapons[0].SetActive(false);
            shipWeapons[1].SetActive(false);
            shipWeapons[2].SetActive(false);
        }

        // Set Kaiju/Ship
        if (playing && isKaiju && !playerObjects[0].activeSelf)
        {
            playerObjects[0].SetActive(true);
            playerObjects[1].SetActive(false);
            globalGameObjects["kaiju_track_point"] = playerObjects[0].transform.Find("KaijuTrackPoint").gameObject;
        }
        if (playing && !isKaiju && !playerObjects[1].activeSelf)
        {
            playerObjects[0].SetActive(false);
            playerObjects[1].SetActive(true);
        }
        if (!playing && (playerObjects[0].activeSelf || playerObjects[1].activeSelf))
        {
            playerObjects[0].SetActive(false);
            playerObjects[1].SetActive(false);
        }

        // Set Local Camera
        if (playing && isLocalPlayer && ((isKaiju && (!playerCameras[0].activeSelf || playerCameras[1].activeSelf)) || (!isKaiju && (playerCameras[0].activeSelf || !playerCameras[1].activeSelf))))
        {
            playerCameras[0].SetActive(isKaiju);
            playerCameras[1].SetActive(!isKaiju);

            startingCamera.SetActive(false);
            if (isKaiju)
            {
                ocean.GetComponent <OceanRenderer>().Viewpoint = playerCameras[0].transform;
            }
            else
            {
                ocean.GetComponent <OceanRenderer>().Viewpoint = playerCameras[1].transform;
            }

            /*
             * //setting cache here
             * if (globalGameObjects.TryGetValue("ocean", out gameObjectCache))
             * {
             *  if (isKaiju)
             *  {
             *      gameObjectCache.GetComponent<OceanRenderer>().Viewpoint = playerCameras[0].transform;
             *  }
             *  else
             *  {
             *      gameObjectCache.GetComponent<OceanRenderer>().Viewpoint = playerCameras[1].transform;
             *  }
             * }
             * else Debug.LogError("Could not find the ocean");
             *
             * //setting cache here
             * if (globalGameObjects.TryGetValue("starting_camera", out gameObjectCache) && gameObjectCache.activeSelf)
             * {
             *  gameObjectCache.SetActive(false);
             *  //hasStarted = true;
             * }
             * else// if(!hasStarted)
             * {
             *  Debug.LogError("Could not find starting camera");
             * }*/
        }
        else if ((!playing || !isLocalPlayer) && (playerCameras[0].activeSelf || playerCameras[1].activeSelf))
        {
            playerCameras[0].SetActive(false);
            playerCameras[1].SetActive(false);
        }

        // Send/Receive Player Info
        if (playing && isKaiju && kaijuController.isLocal != isLocalPlayer)
        {
            kaijuController.isLocal = isLocalPlayer;
        }
        if (playing && !isKaiju && shipController.isLocal != isLocalPlayer)
        {
            shipController.isLocal = isLocalPlayer;
        }
        updateTime += Time.deltaTime;

        if (playing && updateTime > 0.2f)
        {
            updateTime = 0f;
            int k = 0;
            if (!isKaiju)
            {
                k = 1;
            }
            if (isLocalPlayer)
            {
                CmdUpdatePlayer(
                    playerObjects[k].transform.position,
                    kaijuCore.GetDesiredRotation(),
                    kaijuCore.GetRotation(),
                    kaijuCore.GetDesiredMovement(),
                    kaijuCore.GetMovement(),
                    kaijuCore.GetSubmerged(),
                    shipCore.GetRudder(),
                    shipCore.GetActualRudder(),
                    shipCore.GetRotation(),
                    shipCore.GetThrottle(),
                    shipCore.GetSpeed(),
                    shipTurret.GetAimPoint(),
                    shipTurret.GetTargetVelocity()
                    );
            }
            else
            {
                playerObjects[k].transform.position = playerPosition;
                kaijuCore.SetDesiredRotation(playerDesiredRotation);
                kaijuCore.HardSetRotation(playerKaijuRotation);
                kaijuCore.SetDesiredMovement(playerDesiredMovement);
                kaijuCore.HardSetMovement(playerKaijuMovement);
                kaijuCore.HardSetSubmerged(playerSubmerged);
                shipCore.SetRudder(playerRudder);
                shipCore.HardSetRudder(playerActualRudder);
                shipCore.HardSetRotation(playerShipRotation);
                shipCore.SetThrottle(playerThrottle);
                shipCore.HardSetSpeed(playerShipSpeed);
                shipTurret.UpdateAim(playerAimPoint, playerTargetVelocity);
                if (playerSlashCount > slashCount)
                {
                    slashCount = playerSlashCount;
                    kaijuCore.HardTriggerSlash();
                }
                if (playerShotsFired > shotsFired)
                {
                    shotsFired = playerShotsFired;
                    shipTurret.HardFireCannon(lastShotMask, lastShotPosition, lastShotRotation, lastShotVelocity);
                }
            }
        }
        //UI control
        if (isLocalPlayer)
        {
            if (isKaiju)
            {
                healthUI.text = "Health: " + kaijuHealth;
                kaijuTracker.SetActive(false);
            }
            else
            {
                kaijuTracker.SetActive(true);
                healthUI.text = "Health: " + shipHealth;
                //setting cache here
                if (globalGameObjects.TryGetValue("kaiju_track_point", out gameObjectCache))
                {
                    if (!kaijuTracker.active && !kaijuCore.IsSubmerged())
                    {
                        kaijuTracker.SetActive(true);
                    }

                    if (kaijuCore.IsSubmerged())
                    {
                        Debug.Log("submerged");
                        kaijuTracker.SetActive(false);
                    }

                    var vect = playerCameras[1].GetComponent <Camera>().WorldToScreenPoint(gameObjectCache.transform.position);
                    var z    = vect.z;
                    vect.z = 0;
                    kaijuTracker.transform.position = vect;

                    var r = kaijuTracker.GetComponent <RectTransform>();

                    var distance = Vector3.Distance(gameObjectCache.transform.position, playerCameras[1].transform.position);

                    r.sizeDelta = new Vector2(1000, 1000) * (1 / distance * 100 * (float)goldenRatio);

                    if (Mathf.Sign(z) < 0)
                    {
                        //maybe have an onscreen indicator to show which way to turn
                        kaijuTracker.GetComponent <Image>().enabled = false;
                    }
                    else
                    {
                        kaijuTracker.GetComponent <Image>().enabled = true;
                    }
                }
            }
        }

        /*if (transform.Find("Kaiju").Find("Kaiju Pivot").gameObject.activeSelf != (kaijuHealth > 0f && isKaiju))
         * {
         *  transform.Find("Kaiju").Find("Kaiju Pivot").gameObject.SetActive(kaijuHealth > 0f && isKaiju);
         * }
         * if (transform.Find("Ship").Find("Ship Pivot").gameObject.activeSelf != (shipHealth > 0f && !isKaiju))
         * {
         *  transform.Find("Ship").Find("Ship Pivot").gameObject.SetActive(kaijuHealth > 0f && !isKaiju);
         * }*/
    }