diff options
| author | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-11-11 16:12:09 +0100 | 
|---|---|---|
| committer | WBoerenkamps <wrj.boerenkamps@student.avans.nl> | 2024-11-11 16:12:09 +0100 | 
| commit | 80c74b90a3e44e25a4fa9fdd25bf0aa9efbaf6fd (patch) | |
| tree | 1ac04e3434c8e775318b6f8519c6674bb2a3298d /src/example | |
| parent | 880a7b1fb233a67303ad5a4155dc459f79734762 (diff) | |
interfaces working but unsubscribe broken
Diffstat (limited to 'src/example')
| -rw-r--r-- | src/example/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/example/events.cpp | 105 | 
2 files changed, 106 insertions, 1 deletions
diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt index 36f9d4d..da6ceba 100644 --- a/src/example/CMakeLists.txt +++ b/src/example/CMakeLists.txt @@ -28,4 +28,4 @@ add_example(proxy)  add_example(db)  add_example(ecs)  add_example(scene_manager) - +add_example(events) diff --git a/src/example/events.cpp b/src/example/events.cpp new file mode 100644 index 0000000..53eb97f --- /dev/null +++ b/src/example/events.cpp @@ -0,0 +1,105 @@ +#include <iostream> + +#include <crepe/ComponentManager.h> +#include <crepe/system/ScriptSystem.h> +#include <crepe/util/log.h> + +#include <crepe/api/BehaviorScript.h> +#include <crepe/api/Config.h> +#include <crepe/api/GameObject.h> +#include <crepe/api/Script.h> +#include <crepe/api/Transform.h> + +#include "crepe/api/Event.h" +#include "crepe/api/EventManager.h" +#include "crepe/api/IKeyListener.h" +#include "crepe/api/IMouseListener.h" +using namespace crepe; +using namespace std; +class MyScript : public Script, public IKeyListener,public IMouseListener{ +	void update() { +		// Retrieve component from the same GameObject this script is on +		Transform & test = get_component<Transform>(); +		dbg_logf("Transform(%.2f, %.2f)", test.position.x, test.position.y); +	} + +	bool on_key_pressed(const KeyPressEvent & event) override{ +		std::cout << "KeyPressed function" << std::endl; +		return false; +	} +	bool on_key_released(const KeyReleaseEvent & event) override{ +		std::cout << "KeyRelease function" << std::endl; +		return false; +	} +	bool on_mouse_clicked(const MouseClickEvent & event){ +		std::cout << "MouseClick function" << std::endl; +		return false; +	} +    bool on_mouse_pressed(const MousePressEvent & event){ +		std::cout << "MousePress function" << std::endl; +		return false; +	} +    bool on_mouse_released(const MouseReleaseEvent & event){ +		std::cout << "MouseRelease function" << std::endl; +		return false; +	} +    bool on_mouse_moved(const MouseMoveEvent & event){ +		std::cout << "MouseMove function" << std::endl; +		return false; +	} + +}; +class TestKeyListener : public IKeyListener { +public: +    bool on_key_pressed(const KeyPressEvent &event) override { +        std::cout << "TestKeyListener: Key Pressed - Code: " << event.key << std::endl; +        return true;  // Return true if the listener should remain active +    } +    bool on_key_released(const KeyReleaseEvent &event) override { +        std::cout << "TestKeyListener: Key Released - Code: " << event.key << std::endl; +        return true; +    } +}; +int main() { +    { +        // Instantiate TestKeyListener, which subscribes to key events +        TestKeyListener testListener; + +        // Create game object with Transform and BehaviorScript components +        auto obj = GameObject(0, "name", "tag", Vector2{1.2, 3.4}, 0, 1); +        obj.add_component<BehaviorScript>().set_script<MyScript>(); + +        // Get ScriptSystem singleton instance (this would normally be done from the game loop) +        ScriptSystem sys; +        sys.update(); + +        // Trigger some events +        KeyPressEvent key_press; +        key_press.key = 1; +        key_press.repeat = 0; + +        MouseClickEvent click_event; +        click_event.button = MouseButton::LEFT_MOUSE; +        click_event.mouse_x = 100; +        click_event.mouse_y = 200; +		std::cout << "testing custom listener:" << std::endl; +        // Trigger the events while `testListener` is in scope +        EventManager::get_instance().trigger_event<KeyPressEvent>(key_press, 0); +        EventManager::get_instance().trigger_event<MouseClickEvent>(click_event, 0); +    } // End of scope - triggers destruction of obj, MyScript, and `testListener`, unsubscribing from events +    // After `testListener` is destroyed, triggering events again should have no output if unsubscription worked +    KeyPressEvent key_press; +    key_press.key = 1; +    key_press.repeat = 0; +    EventManager::get_instance().trigger_event<KeyPressEvent>(key_press, 0); + +    MouseClickEvent click_event; +    click_event.button = MouseButton::LEFT_MOUSE; +    click_event.mouse_x = 100; +    click_event.mouse_y = 200; +    EventManager::get_instance().trigger_event<MouseClickEvent>(click_event, 0); + +    return EXIT_SUCCESS; +} + +  |