// Override: MonoBehaviour::Awake void Awake() { // Local variables OnAreaKeyEvent[] entries = null; // Get player m_player = GameObject.FindWithTag(Tags.TAG_PLAYER); if (m_player == null) { Debug.LogError("Player not found!"); return; } // Get entries entries = gameObject.GetComponentsInChildren <OnAreaKeyEvent>(); if (entries == null || entries.Length != 2) { Debug.LogError("Portals must contain 2 entries!"); return; } // Copy objects m_entry0 = entries[0]; m_entry1 = entries[1]; // Add event: first entry m_entry0.OnKeyEventPressed += () => { // Clear flag and trigger if (m_canBeTriggered == false) { return; } m_canBeTriggered = false; onEnter(m_entry0, m_entry1); }; m_entry0.OnKeyEventReleased += () => { // Set flag m_canBeTriggered = true; }; // Add event: second entry m_entry1.OnKeyEventPressed += () => { // Clear flag and trigger if (m_canBeTriggered == false) { return; } m_canBeTriggered = false; onEnter(m_entry1, m_entry0); }; m_entry1.OnKeyEventReleased += () => { // Set flag m_canBeTriggered = true; }; }
// Will be called as soon as one key-event is being triggered private void onEnter(OnAreaKeyEvent _src, OnAreaKeyEvent _dst) { // Check parameter if (_dst == null) { return; } // Move player to destination m_player.gameObject.transform.position = _dst.gameObject.transform.position; }
// Override: MonoBehaviour::Awake void Awake() { // Check area object if (m_areaKeyEvent == null) { Debug.LogWarning("The area-key-event must not be null!"); return; } // Add event m_areaKeyEvent.OnKeyEventPressed += () => { // Spawn object spawnObject(); // Kill area key-event if (m_areaKeyEvent != null) { GameObject.Destroy(m_areaKeyEvent); m_areaKeyEvent = null; } }; }
// Override: MonoBehaviour::OnDestroy void OnDestroy() { // Remove key-event m_areaKeyEvent = null; }