3[CreateAssetMenu(fileName =
"Mirroring", menuName =
"FiniteStateMachine/Creature/Mirroring")]
6 [SerializeField, Tooltip(
"Zone where mirroring won't happen to prevent rapid changing")]
private float deadZoneRadius = 0.5f;
7 [SerializeField, Tooltip(
"time (seconds) to stay near big creature")]
private float timeToStay = 4.0f;
8 [SerializeField, Tooltip(
"hugging countdown VFX prefab")]
private GameObject countdownVFXPrefab;
12 private GameObject countdownVFXObj;
13 public override string GetName() {
return "Mirroring"; }
17 Debug.Log(
"-----Enter Mirroring state-----");
25 UpdateLocation(creature);
30 timer += Time.deltaTime;
33 if (countdownVFXObj ==
null)
35 countdownVFXObj = Instantiate(countdownVFXPrefab);
38 Debug.Log($
"near big creature with {timer}s");
39 if (timer >= timeToStay)
42 Destroy(countdownVFXObj);
50 Destroy(countdownVFXObj);
59 Vector3 center = cavernSetup.transform.position;
60 Vector3 cavernFlatPos =
new Vector3(center.x, 0, center.z);
61 Vector3 newDirection = (
new Vector3(playerTracker.position.x, 0, playerTracker.position.z) - cavernFlatPos).normalized;
62 float newRadius = (2 * cavernSetup.
GetCavernRadius() - (Vector3.Distance(
new Vector3(playerTracker.position.x, 0, playerTracker.position.z), cavernFlatPos)));
64 if (newRadius > deadZoneRadius)
66 Vector3 newVector = newDirection * newRadius;
67 Vector3 mirroredPosition = center +
new Vector3(newVector.x, playerTracker.position.y, newVector.z);
68 creature.transform.position = mirroredPosition;
71 Vector3 mirrorNormal = (creature.transform.position - center).normalized;
72 Vector3 reflectedForward = Vector3.Reflect(playerTracker.forward, mirrorNormal);
73 creature.transform.rotation = Quaternion.LookRotation(reflectedForward, Vector3.up);
Spelunx.CavernRenderer GetCavernSetup()
GameObject GetViveTrackerObject()
void ChangeState(string nextState)
override void OnEnter(FiniteStateMachine fsm, GameObject target)
override string GetName()
override void OnUpdate(FiniteStateMachine fsm, GameObject target)