CSC3224_Computer_Games_Development / GameEngine / Engine_Messages / MessageObserver.h
MessageObserver.h
Raw
#pragma once
#include "MessageHandler.h"
#include <string>
// Message state needed for Key binidng, controlling the character - User Interface 
enum class MessageState
{
	PRESSED_STATE,
	DOWN_STATE,
	RELEASED_STATE,
	UP_STATE
};
// Message Event, stores data about the message being passed
struct MessageEvent
{
	int messageType;
	std::string messageName;
	MessageState messageState;
	sf::Vector2i messagePosition;
};
// Message Observer
class MessageObserver
{
public:
	explicit MessageObserver(MessageHandler& messageHandler) : messageHandler_(&messageHandler) { messageHandler_->addMessageObserver(this); };
	virtual ~MessageObserver() { messageHandler_->removeMessageObserver(this); };
	virtual void onNotify(MessageEvent message) = 0;

protected:
	MessageHandler* messageHandler_;
};
// DJB Hash function - Hash string at compile time //http://www.cplusplus.com/forum/beginner/138012/
constexpr unsigned int returnStringFromInt(const char* str, int h = 0)
{
	return !str[h] ? 5381 : (returnStringFromInt(str, h + 1) * 33) ^ str[h];
}