using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class Chest : MonoBehaviour {
public enum State
{
open,
close,
inbetween
}
public AudioClip openSound;
public AudioClip closeSound;
public GameObject[] _parts;
private Color[] _defaultColors;
public float maxDistance = 5;
public State state;
private GameObject _player;
private Transform _myTransform;
public bool inUse = false;
private bool _used = false;
public List<Item> _loot = new List<Item>();
// Use this for initialization
void Start () {
_myTransform = transform;
state = Chest.State.close;
_defaultColors = new Color[_parts.Length];
if(_parts.Length > 0)
for(int i = 0; i < _defaultColors.Length; i++)
_defaultColors[i] = _parts[i].renderer.material.GetColor("_Color");
}
void Update(){
if(!inUse)
return;
if(_player == null)
return;
if(Vector3.Distance(transform.position, _player.transform.position) > maxDistance)
myGUI.chest.ForceClose();
//Messenger.Broadcast("CloseChest");
}
public void OnMouseEnter()
{
Debug.Log("Enetr");
HighLight(true);
}
public void OnMouseExit()
{
Debug.Log("Exit");
HighLight(false);
}
public void OnMouseUp()
{
GameObject go = GameObject.FindGameObjectWithTag("Player");
if(go == null)
{
return;
}
if(Vector3.Distance(_myTransform.position, go.transform.position) > maxDistance && !inUse)
return;
Debug.Log("Up");
switch(state)
{
case State.open: state = Chest.State.inbetween;ForceClose();break;
case State.close:
if(myGUI.chest != null)
{
myGUI.chest.ForceClose();
}
state = Chest.State.inbetween; StartCoroutine("Open"); break;
}
/*if(state == Chest.State.close)
Open();
else
Close();*/
}
private IEnumerator Open()
{
myGUI.chest = this;
_player = GameObject.FindGameObjectWithTag("Player");
inUse = true;
animation.Play("open");
audio.PlayOneShot(openSound);
if(!_used)
PopulateChest(5);
yield return new WaitForSeconds(animation["open"].length);
state = Chest.State.open;
// Messenger<int>.Broadcast("PopulateChest", 5, MessengerMode.DONT_REQUIRE_LISTENER);
Messenger.Broadcast("DisplayLoot");
}
private void PopulateChest(int x)
{
for(int i = 0; i < x; i++)
{
_loot.Add(new Item());
_loot[i].Name = "I:" + Random.Range(0, 100);
}
_used = true;
}
private IEnumerator Close()
{
_player = null;
inUse = false;
animation.Play("close");
audio.PlayOneShot(closeSound);
yield return new WaitForSeconds(animation["close"].length);
state = Chest.State.close;
}
public void ForceClose()
{
Messenger.Broadcast("CloseChest");
StopCoroutine("Open");
StartCoroutine("Close");
}
private void HighLight(bool glow)
{
if(glow)
{
if(_parts.Length > 0)
for(int i = 0; i < _defaultColors.Length; i++)
_parts[i].renderer.material.SetColor("_Color", Color.yellow);
}
else
{
if(_parts.Length > 0)
for(int i = 0; i < _defaultColors.Length; i++)
_parts[i].renderer.material.SetColor("_Color", _defaultColors[i]);
}
}
}