GlobalGameJame/Assets/Scripts/PlayerManager.cs

218 lines
7.5 KiB
C#
Raw Normal View History

2020-01-31 20:47:30 +00:00
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
2020-02-01 11:11:56 +00:00
using UnityEngine.SceneManagement;
2020-01-31 20:47:30 +00:00
public class PlayerManager : MonoBehaviour
{
public float speed = 10;
public float runSpeed = 25;
public float rotateSpeed = 5;
public float mouseSensitive = 200;
2020-01-31 21:32:05 +00:00
public float buildRate = 0.5f;
2020-02-01 11:11:56 +00:00
public float health = 100;
2020-02-01 15:20:10 +00:00
public float actualHealth = 100;
2020-01-31 21:32:05 +00:00
private float buildTime;
2020-01-31 20:47:30 +00:00
private bool run = false;
private Camera playerCamera;
private Rigidbody rigidBody;
2020-02-01 17:53:28 +00:00
public int barricadeMaterials = 50;
public int ammo = 50;
2020-01-31 20:47:30 +00:00
public List<GameObject> weaponList = new List<GameObject>();
2020-01-31 23:53:03 +00:00
private GameObject createWeapon;
2020-02-01 17:17:29 +00:00
public GuiManager guiManager;
2020-01-31 20:47:30 +00:00
[HideInInspector]public int selectedWeapon = 0;
// Start is called before the first frame update
void Start()
{
2020-02-01 11:11:56 +00:00
actualHealth = health;
2020-01-31 21:32:05 +00:00
buildTime = buildRate;
2020-01-31 20:47:30 +00:00
playerCamera = GetComponentInChildren<Camera>();
rigidBody = GetComponent<Rigidbody>();
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
}
// Update is called once per frame
void Update()
{
Move();
RunSwitch();
2020-01-31 21:32:05 +00:00
SelectWeapon();
BuildBlock();
2020-02-01 11:11:56 +00:00
Interact();
if (actualHealth <= 0)
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name, LoadSceneMode.Single);
}
2020-01-31 20:47:30 +00:00
}
void FixedUpdate()
{
Rotate();
}
void Move()
{
rigidBody.MovePosition(
transform.position +
(transform.forward * (run ? runSpeed : speed) * Input.GetAxis("Vertical") * Time.deltaTime) +
(transform.right * (run ? runSpeed : speed) * Input.GetAxis("Horizontal") * Time.deltaTime)
);
}
2020-02-01 11:11:56 +00:00
public void Damage(float damage)
{
actualHealth -= damage;
}
2020-01-31 20:47:30 +00:00
void Rotate()
{
2020-02-01 07:52:46 +00:00
rigidBody.freezeRotation = false;
2020-01-31 20:47:30 +00:00
transform.Rotate(new Vector3(0, rotateSpeed * Input.GetAxis("Mouse X") * mouseSensitive * Time.deltaTime, 0));
if (
((playerCamera.transform.localEulerAngles.x >= 270 && playerCamera.transform.localEulerAngles.x <= 360) &&
playerCamera.transform.localEulerAngles.y == 0 &&
playerCamera.transform.localEulerAngles.z == 0) ||
((playerCamera.transform.localEulerAngles.x <= 90 && playerCamera.transform.localEulerAngles.x >= 0) &&
playerCamera.transform.localEulerAngles.y == 0 &&
playerCamera.transform.localEulerAngles.z == 0)
) {
playerCamera.transform.Rotate(new Vector3(rotateSpeed * -Input.GetAxis("Mouse Y") * mouseSensitive * Time.deltaTime, 0, 0));
} else if (
((playerCamera.transform.localEulerAngles.x >= 270 && playerCamera.transform.localEulerAngles.x <= 360) &&
playerCamera.transform.localEulerAngles.y == 180 &&
playerCamera.transform.localEulerAngles.z == 180)
) {
playerCamera.transform.Rotate(new Vector3(rotateSpeed * (-Input.GetAxis("Mouse Y") > 0 ? -Input.GetAxis("Mouse Y") : 0) * mouseSensitive * Time.deltaTime, 0, 0));
} else if (
((playerCamera.transform.localEulerAngles.x <= 90 && playerCamera.transform.localEulerAngles.x >= 0) &&
playerCamera.transform.localEulerAngles.y == 180 &&
playerCamera.transform.localEulerAngles.z == 180)
) {
playerCamera.transform.Rotate(new Vector3(rotateSpeed * (-Input.GetAxis("Mouse Y") < 0 ? -Input.GetAxis("Mouse Y") : 0) * mouseSensitive * Time.deltaTime, 0, 0));
}
2020-01-31 23:53:03 +00:00
else
{
playerCamera.transform.Rotate(new Vector3(rotateSpeed * -Input.GetAxis("Mouse Y") * mouseSensitive * Time.deltaTime, 0, 0));
}
2020-02-01 07:52:46 +00:00
rigidBody.freezeRotation = true;
2020-01-31 20:47:30 +00:00
}
void RunSwitch()
{
if (Input.GetAxisRaw("Run") > 0)
{
run = true;
}
else
{
run = false;
}
}
2020-01-31 21:32:05 +00:00
void SelectWeapon()
2020-01-31 20:47:30 +00:00
{
2020-01-31 21:32:05 +00:00
if (weaponList.Count > 0)
2020-01-31 20:47:30 +00:00
{
if (Input.mouseScrollDelta.y > 0)
{
2020-01-31 23:53:03 +00:00
WeaponManager weaponManager = weaponList[selectedWeapon].GetComponent<WeaponManager>();
if (weaponManager != null && createWeapon != null)
{
Destroy(createWeapon);
}
2020-01-31 20:47:30 +00:00
if (weaponList.Count > selectedWeapon + 1) {
selectedWeapon++;
}
else
{
selectedWeapon = 0;
}
}
else if (Input.mouseScrollDelta.y < 0)
{
2020-01-31 23:53:03 +00:00
WeaponManager weaponManager = weaponList[selectedWeapon].GetComponent<WeaponManager>();
if (weaponManager != null && createWeapon != null)
{
Destroy(createWeapon);
}
2020-01-31 20:47:30 +00:00
if (selectedWeapon > 0)
{
selectedWeapon--;
}
else
{
selectedWeapon = weaponList.Count - 1;
}
}
2020-01-31 23:53:03 +00:00
WeaponManager weaponManager2 = weaponList[selectedWeapon].GetComponent<WeaponManager>();
if (weaponManager2 != null && createWeapon == null)
{
createWeapon = Instantiate(weaponList[selectedWeapon]) as GameObject;
createWeapon.transform.parent = playerCamera.transform;
createWeapon.transform.localPosition = Vector3.zero;
createWeapon.transform.localEulerAngles = Vector3.zero;
}
2020-01-31 21:32:05 +00:00
}
}
void BuildBlock ()
{
if (Input.GetAxisRaw("Fire1") > 0 && buildTime < Time.time && weaponList.Count > 0)
{
Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("BuildPlace")))
{
BlockManager blockManager = weaponList[selectedWeapon].GetComponent<BlockManager>();
if (blockManager != null) {
Instantiate(weaponList[selectedWeapon], hit.point, transform.rotation);
buildTime = buildRate + Time.time;
}
}
}
}
2020-02-01 11:11:56 +00:00
void Interact()
2020-01-31 23:53:03 +00:00
{
Ray ray = playerCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
2020-02-01 13:26:43 +00:00
if (Physics.Raycast(ray, out hit, 2))
2020-01-31 23:53:03 +00:00
{
2020-02-01 17:17:29 +00:00
if (hit.transform.CompareTag("BarricadeField") || hit.transform.CompareTag("Interact"))
{
guiManager.InteractVerifier(true);
}
else
{
guiManager.InteractVerifier(false);
}
2020-01-31 23:53:03 +00:00
if (Input.GetAxisRaw("Build") > 0 && buildTime < Time.time && barricadeMaterials > 0 && hit.transform.tag == "BarricadeField")
{
BarricadeManager barricadeManager = hit.transform.GetComponent<BarricadeManager>();
barricadeManager.addPlank();
2020-02-01 15:20:10 +00:00
barricadeMaterials--;
2020-01-31 23:53:03 +00:00
buildTime = buildRate + Time.time;
}
2020-02-01 11:11:56 +00:00
if (Input.GetAxisRaw("Build") > 0 && hit.transform.tag == "Interact")
2020-02-01 15:20:10 +00:00
{
}
if (Input.GetKeyDown(KeyCode.E) && hit.transform.tag == "Interact")
2020-02-01 11:11:56 +00:00
{
BlockManager blockManager = hit.transform.GetComponent<BlockManager>();
blockManager.Action();
2020-02-01 15:20:10 +00:00
2020-02-01 11:11:56 +00:00
}
2020-01-31 20:47:30 +00:00
}
2020-02-01 17:17:29 +00:00
else
{
guiManager.InteractVerifier(false);
}
2020-01-31 20:47:30 +00:00
}
}