using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using Variables;
|
|
|
|
public class MonsterController : MonoBehaviour, IResettable
|
|
{
|
|
|
|
[SerializeField, Header("References")]
|
|
Reference<float> m_light;
|
|
|
|
[SerializeField]
|
|
private GameObject[] m_possibleFrames;
|
|
|
|
|
|
private Transform m_player;
|
|
public GameObject m_defaultObject;
|
|
|
|
[SerializeField]
|
|
private float m_distance = 3;
|
|
|
|
[SerializeField]
|
|
private Vector3 m_offset = Vector3.zero;
|
|
|
|
private bool m_hasChanged = false;
|
|
|
|
private void OnEnable()
|
|
{
|
|
m_light.OnValueChanged += OnLightChange;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
m_light.OnValueChanged -= OnLightChange;
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
m_player = GameObject.FindGameObjectWithTag("Player").transform;
|
|
foreach (Transform child in transform)
|
|
{
|
|
if (child.gameObject.activeInHierarchy)
|
|
m_defaultObject = child.gameObject;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private void ChangeRandomMonster()
|
|
{
|
|
GameObject[] inactiveFrames = m_possibleFrames.Where(p => !p.activeInHierarchy).ToArray();
|
|
GameObject nextFrame = inactiveFrames[Random.Range(0, inactiveFrames.Length)];
|
|
|
|
foreach(Transform child in transform)
|
|
{
|
|
child.gameObject.SetActive(child.gameObject == nextFrame);
|
|
}
|
|
}
|
|
|
|
private void ResetMonster()
|
|
{
|
|
foreach (Transform child in transform)
|
|
{
|
|
child.gameObject.SetActive(child.gameObject == m_defaultObject);
|
|
}
|
|
}
|
|
|
|
|
|
private void OnLightChange(float value)
|
|
{
|
|
float distanceToPlayer = Vector3.Distance(m_player.position, transform.position + m_offset);
|
|
|
|
if (value <= 0.1 && distanceToPlayer < m_distance && !m_hasChanged)
|
|
{
|
|
Debug.Log(distanceToPlayer);
|
|
ChangeRandomMonster();
|
|
m_hasChanged = true;
|
|
}
|
|
else if (value <= 0)
|
|
{
|
|
ResetMonster();
|
|
}
|
|
if (value > 0.5)
|
|
{
|
|
m_hasChanged = false;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public void OnLevelLoad()
|
|
{
|
|
|
|
}
|
|
|
|
public IEnumerator OnResetStart(float time)
|
|
{
|
|
yield break;
|
|
}
|
|
|
|
public void OnResetEnd()
|
|
{
|
|
ResetMonster();
|
|
}
|
|
|
|
|
|
private void OnDrawGizmosSelected()
|
|
{
|
|
Gizmos.color = Color.yellow;
|
|
Gizmos.DrawWireSphere(transform.position + m_offset, m_distance);
|
|
}
|
|
}
|