Thor Event System



  • So hier nochmal der ganze Code.

    Main.cpp:

    #include "Engine.h"
    
    int main() {
    
    	CEngine engine;
    
    	sf::RenderWindow window(sf::VideoMode(800, 600), "Tile Engine");
    
    	engine.Init(&window);
    
    	while (window.isOpen()) {
    		engine.Render();
    		engine.Update();
    	}
    
    }
    

    Engine.h:

    #pragma once
    #pragma once
    #include <SFML\Graphics.hpp>
    
    #include "Input.h"
    
    class CEngine
    {
    public:
    	CEngine();
    	~CEngine();
    
    	bool Init(sf::RenderWindow *window);
    	void EnterGame();
    	void Update();
    	void Input();
    	void Render();
    
    private:
    	// Render Target
    	sf::RenderWindow* window;
    
    	CInput inputSystem;
    
    	void onKeyPress(thor::ActionContext<std::string> context)
    	{
    		if (context.event->key.code == sf::Keyboard::X) {
    			window->close();
    		}
    	};
    
    };
    

    Engine.cpp:

    #include "Engine.h"
    
    CEngine::CEngine()
    {
    	CInput temp(window);
    	inputSystem = temp;
    }
    
    CEngine::~CEngine()
    {
    }
    
    bool CEngine::Init(sf::RenderWindow *window) {
    
    	this->window = window;
    
    	inputSystem.AddCallback("keyPressed", &onKeyPress);
    }
    
    void CEngine::Render() {
    	window->clear();
    	window->display();
    }
    

    Input.h:

    #pragma once
    #include <SFML/Graphics.hpp>
    #include <Thor/Input.hpp>
    
    class CInput
    {
    public:
    	CInput();
    	CInput(sf::RenderWindow* w);
    	~CInput();
    
    	void AddCallback(std::string trigger, std::function<thor::ActionContext<thor::Action>> unaryListener) {
    		thorSystem.connect(trigger, unaryListener);
    	};
    
    private:
    	sf::RenderWindow window;
    	thor::ActionMap < std::string >::CallbackSystem thorSystem;
    
    	void InitActions();
    
    };
    

    Input.cpp:

    #include "Input.h"
    
    CInput::CInput(sf::RenderWindow* window) {
    	this->window = *window;
    }
    
    CInput::~CInput()
    {
    }
    
    void CInput::InitActions() {
    
    	thor::Action closeRequest(sf::Event::Closed);
    	thor::Action keyPressed(sf::Event::KeyPressed);
    	thor::Action leftMouseButton(sf::Mouse::Left, thor::Action::PressOnce);
    
    	thor::ActionMap<std::string> actions;
    	actions["close"] = closeRequest;
    	actions["keyPressed"] = keyPressed;
    	actions["leftMouse"] = leftMouseButton;
    
    	actions.invokeCallbacks(thorSystem, &window);
    }
    


  • immer noch nichts?



  • Also es fehlen
    #include <functional>
    und
    #include <string>

    Kannst ja mal probieren ob es was bringt die einzufügen. Wobei ich anhand der Fehler eher auf ein anderes Problem tippen würde. Der Rest sieht aber soweit richtig aus, also...

    Probier' halt selbst ein wenig rum.
    Nimm Stück für Sütck Code weg, so lange bis der Fehler verschwindet. So grenzt man Fehler ein die man nicht auf anderem Weg findet.
    Irgendwann hast du dann eine Version die geht, und eine davor (mit weniger "weggenommenem" Code) die nicht geht. Dann guckst du dir den Code an der unterschiedlich ist, und überlegst dir was das Problem sein könnte.

    ps:
    Gerade erst gesehen:

    private:
        sf::RenderWindow window;
    
    // ....
    
    this->window = *window;
    

    Das kann nicht gehen. Wie du in der Doku sehen kannst
    http://sfml-dev.org/documentation/2.0/classsf_1_1RenderWindow.php
    ist sf::RenderWindow noncopyable.



  • Okay danke.

    Wofür ist denn die functional?
    ich mein ich benutz nur methoden die ich sonst auch immer ohne die functional benutzt hab.



  • darman96 schrieb:

    Wofür ist denn die functional?
    ich mein ich benutz nur methoden die ich sonst auch immer ohne die functional benutzt hab.

    http://en.cppreference.com/w/cpp/utility/functional/function
    (Du nutztt std::function<> in Z.12 von input.h)

    Kann durchaus sein, dass Dein Programm <functional> irgendwo aufschnappt. Z.B. koennte SFML <functional> #includ en.
    Aber der Vollständigkeit halber solltest Du es selber aufführen - kann ja auch sein, dass in der näxten Version das #include in SFML wegfällt und dann kompiliert Dein Programm nicht mehr.



  • Hat nicht viel gebracht es sind immer noch Fehler da...

    Hier die Fehler: https://www.dropbox.com/s/zcxfu0lpmgzigsa/Error.PNG?dl=0



  • Das sind die Fehler, schau mal in die Ausgabe. Da sieht man oft mehr, z.B. wo der Fehler in deinem Code herkommt.



  • es liegt auf jedem fall an dem kram mit der Thor Lib.
    Wenn ich das rausschmeiße dann geht's.



  • Auch doof.



  • darman96 schrieb:

    es liegt auf jedem fall an dem kram mit der Thor Lib.
    Wenn ich das rausschmeiße dann geht's.

    Das sieht trotzdem nach einem fehlenden Include aus. Oder vielleicht ist es auch nicht mit deinem VS kompatibel und du musst den Code etwas anpassen, kommt auch vor.


Anmelden zum Antworten