Пример #1
0
    // 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);
    }
Пример #4
0
    // 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);
            };
        }
    }
Пример #7
0
    // 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);
            }
        }
    }
Пример #9
0
    // 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;
                    }
                }
            };
        }
    }
Пример #11
0
    // 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;
                    }
                }
            };
        }
    }