CSC3224_Computer_Games_Development / GameEngine / Engine_Messages / MessageHandler.h
MessageHandler.h
Raw
#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);
};