#pragma once #include "../Engine_Profiler/Profiler.h" #include <SFML/Window/Keyboard.hpp> #include <SFML/Window/Mouse.hpp> #include <string> #include <unordered_map> #include <forward_list> #include <sstream> #include <fstream> #include <iostream> enum class MessageState; struct MessageEvent; class MessageObserver; // Message Handlers class MessageHandler { public: MessageHandler(); ~MessageHandler(); void loadMessagesFromFile(std::string filePath); void addMessageObserver(MessageObserver* message); void removeMessageObserver(MessageObserver* message); void processMessages(); void printKeyMap(); Profiler loadingKeys; protected: std::unordered_map<sf::Keyboard::Key, std::string> keyboardMessageMap; std::unordered_map<sf::Keyboard::Key, std::string> keyboardControllMap; std::unordered_map<sf::Keyboard::Key, MessageState> keyboardState; std::unordered_map<sf::Mouse::Button, std::string> mouseMessageMap; std::unordered_map<sf::Mouse::Button, std::string> mouseControllMap; std::unordered_map<sf::Mouse::Button, MessageState> mouseState; std::forward_list<MessageObserver*> messageList; static MessageState advanceMessageState(MessageState current, bool isPressed); void sendMessage(MessageEvent message); };