// Override: FSMTransition::OnEnable void OnEnable() { // Local variables FSMEventHighjack hj = null; // Check parameter if (m_triggerObjects.Count == 0 || m_collider == null) { return; } // Highjack trigger objects foreach (Trigger t in m_triggerObjects) { // Check if (t == null || t.m_triggerCollider == null) { continue; } // Adjust t.m_currentHitCount = 0; if (t.m_hitsToTrigger < 1) { t.m_hitsToTrigger = 1; } // Inject script hj = t.m_triggerCollider.gameObject.AddComponent <FSMEventHighjack>(); hj.FSMOnTriggerEnter += (Collider _other) => { // Collider hits one of the triggers? if (_other.name.Equals(m_collider.name) == true) { // Update hit count ++t.m_currentHitCount; // Change state if (t.m_currentHitCount >= t.m_hitsToTrigger) { // Delete trigger object? if (t.m_deleteObject == true) { // Delete from list m_triggerObjects.Remove(t); // Delete object GameObject.Destroy(t.m_triggerCollider); } // Set state setTargetFSMState(); } } }; } }
// Override: MonoBehaviour::OnDestroy() void OnDestroy() { // Delete high-jacks if (m_highJackStart != null) { GameObject.Destroy(m_highJackStart); m_highJackStart = null; } if (m_highJackEnd != null) { GameObject.Destroy(m_highJackEnd); m_highJackEnd = null; } }
// Override: MonoBehaviour::start() void Start() { // Find player m_player = GameObject.FindGameObjectWithTag(Tags.TAG_PLAYER); if (m_player == null) { Debug.LogError("No player found!"); return; } // High-jack start and end trigger m_highJackStart = m_startTrigger.gameObject.AddComponent <FSMEventHighjack>(); m_highJackEnd = m_endTrigger.gameObject.AddComponent <FSMEventHighjack>(); // Add event-handler m_highJackStart.FSMOnTriggerEnter += (Collider _other) => { // Player? if (_other.tag.Equals(m_player.tag) == true) { // Deactivate start, activate ways and end m_startTrigger.gameObject.SetActive(false); m_endTrigger.gameObject.SetActive(true); m_containerWays.gameObject.SetActive(true); // Destroy high-jack GameObject.Destroy(m_highJackStart); m_highJackStart = null; } }; m_highJackEnd.FSMOnTriggerEnter += (Collider _other) => { // Player? if (_other.tag.Equals(m_player.tag) == true) { // Deactivate everything gameObject.SetActive(false); // Destroy high-jack GameObject.Destroy(m_highJackEnd); m_highJackEnd = null; } }; // Activate start, the rest will be deactived m_startTrigger.gameObject.SetActive(true); m_endTrigger.gameObject.SetActive(false); m_containerWays.gameObject.SetActive(false); }
// Override: MonoBehaviour::OnDestroy() void OnDestroy() { // Local variables FSMEventHighjack hj = null; // Remove high-jack foreach (GameObject obj in m_objectList) { if (obj == null) { continue; } hj = obj.GetComponent <FSMEventHighjack>(); if (hj != null) { GameObject.Destroy(hj); } } }
// Override: MonoBehaviour::OnDestroy void OnDestroy() { // Local variables FSMEventHighjack hj = null; // Remove highjack foreach (GameObjectHolder h in m_holders) { // Get script if (h != null && h.m_targetObject != null) { hj = h.m_targetObject.GetComponent <FSMEventHighjack>(); if (hj != null) { GameObject.Destroy(hj); } } } }
// Override: MonoBehaviour::Start void Start() { // Local variables FSMEventHighjack hj = null; // Validate parameter if (m_reference == null) { Debug.LogError("No reference set!"); return; } if (m_musicManager == null) { Debug.LogError("Music manager instance not set!"); return; } // Validate collider foreach (Collider c in m_collider) { // Validate if (c == null || c.isTrigger == false) { Debug.LogError("Invalid collider registered (trigger colliders are needed)!"); return; } } // Highjack collider foreach (Collider c in m_collider) { // Inject script hj = c.gameObject.AddComponent <FSMEventHighjack>(); hj.FSMOnTriggerEnter += (Collider _other) => { onTriggerAction(_other, true); }; hj.FSMOnTriggerLeave += (Collider _other) => { onTriggerAction(_other, false); }; } }
// Override: FSMTransition::OnDisable void OnDisable() { // Local variables FSMEventHighjack hj = null; // Delete highjack from trigger objects foreach (Trigger t in m_triggerObjects) { // Check if (t == null || t.m_triggerCollider == null) { continue; } // Remove hj = t.m_triggerCollider.gameObject.GetComponent <FSMEventHighjack>(); if (hj != null) { Component.Destroy(hj); } } }
// Override: MonoBehaviour::OnDestroy void OnDestroy() { // Local variables FSMEventHighjack hj = null; // Delete highjack from trigger objects foreach (Collider c in m_collider) { // Check if (c == null) { continue; } // Remove hj = c.gameObject.GetComponent <FSMEventHighjack>(); if (hj != null) { Component.Destroy(hj); } } }
// Override: MonoBehaviour::Start() void Start() { // Local variables FSMEventHighjack hj = null; // High-jack all objects foreach (GameObject obj in m_objectList) { hj = obj.gameObject.AddComponent <FSMEventHighjack>(); hj.FSMOnDestroy += () => { // Remove from list m_objectList.Remove(obj); if (m_objectList.Count <= 0) { onApplyCharacteristics(); if (gameObject != null) { gameObject.SetActive(false); } } }; } }
// Override: MonoBehaviour::Start void Start() { // Local variables GameObject obj = null; GameObjectHolder holder = null; FSMEventHighjack hj = null; bool triggerAvailable = false; // Trigger collders defined? if (m_triggerColliders == null || m_triggerColliders.Length <= 0) { Debug.LogWarning("No colliders has been defined!"); return; } foreach (Collider c in m_triggerColliders) { if (c.isTrigger == true) { triggerAvailable = true; break; } } if (triggerAvailable == false) { Debug.LogWarning("At least one trigger collider is required!"); return; } // Auto detect player? if (m_autoDetectBilly == true) { obj = GameObject.FindGameObjectWithTag(Tags.TAG_PLAYER); if (obj != null) { // Create holder holder = new GameObjectHolder(); holder.m_targetObject = obj; holder.m_parent = obj.transform.parent.gameObject; m_holders.Add(holder); } } // Add defined target objects to list if (m_targetObjects != null && m_targetObjects.Length > 0) { // Loop through all entries foreach (GameObject g in m_targetObjects) { // Create holder holder = new GameObjectHolder(); holder.m_targetObject = g; holder.m_parent = g.transform.parent.gameObject; m_holders.Add(holder); } // Clear m_targetObjects = null; } if (m_holders.Count <= 0) { Debug.LogWarning("At least one target object is required!"); return; } // Highjack all target objects foreach (GameObjectHolder h in m_holders) { // Inject script hj = h.m_targetObject.AddComponent <FSMEventHighjack>(); hj.FSMOnTriggerEnter += (Collider _other) => { // Detect hit collider foreach (Collider c in m_triggerColliders) { if (_other.gameObject.Equals(c.gameObject) == true) { // Found! Change parent h.m_targetObject.transform.parent = _other.transform; } } }; hj.FSMOnTriggerLeave += (Collider _other) => { // Detect hit collider foreach (Collider c in m_triggerColliders) { if (_other.gameObject.Equals(c.gameObject) == true) { // Found! Change parent to the original one h.m_targetObject.transform.parent = h.m_parent.transform; } } }; } }
// Override: MonoBehaviour::Awake() void Awake() { // Local variables GameObject obj = null; FSMEventHighjack hj = null; // Check parameter if (m_triggers == null || m_triggers.Length == 0) { return; } // Validate triggers foreach (Trigger t in m_triggers) { // Check if (t == null) { continue; } else if (t.m_collider == null) { Debug.LogError("No collider object has been set!"); return; } else if (t.m_collider.isTrigger == false) { Debug.LogError("Collider object must be declared as trigger!"); return; } } // Check camera if (m_autoDetectCamera == true) { obj = GameObject.FindGameObjectWithTag(Tags.TAG_MAIN_CAMERA); if (obj != null) { m_playerCamera = obj.GetComponent <PlayerCamera>(); } } if (m_playerCamera == null) { Debug.LogError("Camera is null or invalid!"); return; } // Check player if (m_autoDetectPlayer == true) { obj = GameObject.FindGameObjectWithTag(Tags.TAG_PLAYER); if (obj != null) { m_targetCollider = obj.GetComponent <Collider>(); } } if (m_targetCollider == null) { Debug.LogError("Target collider has not been set!"); return; } // Highjack registered triggers foreach (Trigger t in m_triggers) { // Check if (t == null) { continue; } // Inject script hj = t.m_collider.gameObject.AddComponent <FSMEventHighjack>(); hj.FSMOnTriggerEnter += (Collider _other) => { // Collider hits one of the triggers? if (_other.tag.Equals(m_targetCollider.tag) == true) { // Save current distance if (t.m_onEnter.m_saveRestore == true) { t.m_onEnter.m_oldDistance = m_playerCamera.m_distance_Z; } // Set new distance m_playerCamera.m_distance_Z = t.m_onEnter.m_newDistance; } }; hj.FSMOnTriggerLeave += (Collider _other) => { // Collider hits one of the triggers? if (_other.tag.Equals(m_targetCollider.tag) == true) { // Restore distance? if (t.m_onEnter.m_saveRestore == true && t.m_onLeave.m_saveRestore == true) { m_playerCamera.m_distance_Z = t.m_onEnter.m_oldDistance; } else { m_playerCamera.m_distance_Z = t.m_onLeave.m_newDistance; } } }; } }