193 lines
6.8 KiB
C#
193 lines
6.8 KiB
C#
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<Transform> MovePoints = new List<Transform>();
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
if (objectType == ObjectType.Sign) {
|
|
MeshRenderer[] meshR = GetComponentsInChildren<MeshRenderer>();
|
|
if (meshR[0].materials[1] != null) {
|
|
meshRenderer = meshR[0];
|
|
}
|
|
else
|
|
{
|
|
meshRenderer = meshR[1];
|
|
}
|
|
}
|
|
else if (objectType == ObjectType.Ladder)
|
|
{
|
|
meshRenderer = GetComponentInChildren<MeshRenderer>();
|
|
}
|
|
else
|
|
{
|
|
meshRenderer = GetComponent<MeshRenderer>();
|
|
}
|
|
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<Rigidbody>();
|
|
}
|
|
|
|
// 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<ObjectManager>().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<ObjectManager>().enabled)
|
|
{
|
|
playerManager = other.gameObject.GetComponent<PlayerManager>();
|
|
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", 0.25f);
|
|
interact = true;
|
|
}
|
|
|
|
if (objectType == ObjectType.Ladder)
|
|
{
|
|
playerManager = other.gameObject.GetComponent<PlayerManager>();
|
|
playerManager.onLadder = true;
|
|
if (playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 4) {
|
|
playerManager.GetComponent<Rigidbody>().useGravity = false;
|
|
}
|
|
interact = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnTriggerStay(Collider other)
|
|
{
|
|
if (other.gameObject.tag == "Player")
|
|
{
|
|
if (objectType == ObjectType.Ladder)
|
|
{
|
|
playerManager = other.gameObject.GetComponent<PlayerManager>();
|
|
if (playerManager.activeAbility.Count > 0 && playerManager.activeAbility[0] == 4)
|
|
{
|
|
playerManager.onLadder = true;
|
|
playerManager.GetComponent<Rigidbody>().useGravity = false;
|
|
interact = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnTriggerExit(Collider other)
|
|
{
|
|
if (other.gameObject.tag == "Player")
|
|
{
|
|
if (objectType == ObjectType.Ladder)
|
|
{
|
|
playerManager.onLadder = false;
|
|
playerManager.GetComponent<Rigidbody>().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<PlayerManager>();
|
|
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;
|
|
}
|
|
}
|
|
}
|