using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class ObjectManager : MonoBehaviour { public enum ObjectType {Nothing, PushPull, Sign, Ladder}; public ObjectType objectType = ObjectType.Nothing; private Rigidbody rigidBody; private MeshRenderer meshRenderer; private PlayerManager playerManager; private bool interact = false; public GameObject detailSign; public List MovePoints = new List(); // Start is called before the first frame update void Start() { if (objectType == ObjectType.Sign) { MeshRenderer[] meshR = GetComponentsInChildren(); if (meshR[0].materials[1] != null) { meshRenderer = meshR[0]; } else { meshRenderer = meshR[1]; } } else if (objectType == ObjectType.Ladder) { meshRenderer = GetComponentInChildren(); } else { meshRenderer = GetComponent(); } meshRenderer.materials[0].DisableKeyword("_EMISSION"); meshRenderer.materials[1].SetFloat ("_Outline", 0.0f); meshRenderer.materials[1].SetColor("_OutlineColor", new Color(0.5276349f, 0.5566038f, 0.118147f)); rigidBody = GetComponent(); } // Update is called once per frame void Update() { if (interact) { if (objectType == ObjectType.PushPull) { if (Input.GetKeyUp(KeyCode.E)) { if (playerManager.GetPushPullObject() == null && playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 2) { playerManager.SetPushPullObject(this.gameObject); meshRenderer.materials[1].SetColor("_OutlineColor", new Color(0.5568628f, 0.3785397f, 0.1176471f)); } else { playerManager.RemovePushPullObject(); meshRenderer.materials[1].SetColor("_OutlineColor", new Color(0.5276349f, 0.5566038f, 0.118147f)); playerManager = null; } } } else if (objectType == ObjectType.Sign) { if (Input.GetKeyUp(KeyCode.E) && !detailSign.activeSelf) { detailSign.SetActive(true); } else if ((Input.GetAxisRaw("Jump") > 0 || Input.GetAxisRaw("Horizontal") != 0 || Input.GetKeyUp(KeyCode.E)) && detailSign.activeSelf) { detailSign.SetActive(false); if (meshRenderer != null) { meshRenderer.materials[0].DisableKeyword("_EMISSION"); meshRenderer.materials[1].SetFloat("_Outline", 0.0f); } this.GetComponent().enabled = false; } } } else { if (playerManager != null && playerManager.GetPushPullObject() == null) { meshRenderer.materials[1].SetColor("_OutlineColor", new Color(0.5276349f, 0.5566038f, 0.118147f)); } if (objectType == ObjectType.PushPull) { if (Input.GetKeyUp(KeyCode.E)) { if (playerManager != null) { playerManager.RemovePushPullObject(); playerManager = null; } } } } } private void OnTriggerEnter(Collider other) { if (other.gameObject.tag == "Player") { if (objectType == ObjectType.Sign && this.GetComponent().enabled) { playerManager = other.gameObject.GetComponent(); meshRenderer.materials[0].EnableKeyword("_EMISSION"); meshRenderer.materials[0].SetColor("_EmissionColor", new Color(0.2735849f, 0.2018939f, 0.09162514f) * 0.8f); meshRenderer.materials[1].SetFloat("_Outline", 2.5f); interact = true; } if (objectType == ObjectType.Ladder) { playerManager = other.gameObject.GetComponent(); playerManager.onLadder = true; if (playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 4) { playerManager.GetComponent().useGravity = false; } interact = true; } } } private void OnTriggerStay(Collider other) { if (other.gameObject.tag == "Player") { if (objectType == ObjectType.Ladder) { playerManager = other.gameObject.GetComponent(); if (playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 4) { playerManager.onLadder = true; playerManager.GetComponent().useGravity = false; interact = true; } } } } private void OnTriggerExit(Collider other) { if (other.gameObject.tag == "Player") { if (objectType == ObjectType.Ladder) { playerManager.onLadder = false; playerManager.GetComponent().useGravity = true; } if (meshRenderer != null) { meshRenderer.materials[0].DisableKeyword("_EMISSION"); meshRenderer.materials[1].SetFloat("_Outline", 0.0f); } interact = false; } } private void OnCollisionStay(Collision collision) { if (collision.gameObject.tag == "Player") { Vector3 hit = collision.contacts[0].normal; if (hit.x != 0 && hit.y == 0) { playerManager = collision.gameObject.GetComponent(); if (playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 2) { meshRenderer.materials[1].SetFloat("_Outline", 0.01f); } else { meshRenderer.materials[1].SetFloat("_Outline", 0.0f); } interact = true; } } } private void OnCollisionExit(Collision collision) { if (collision.gameObject.tag == "Player") { meshRenderer.materials[1].SetFloat("_Outline", 0.0f); interact = false; } } }