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); } }
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); * }*/ }