From 7911e7bddf277d79fdd15cba494fb6d37d9a403c Mon Sep 17 00:00:00 2001 From: Lendemor Date: Fri, 11 Mar 2016 21:49:10 +0100 Subject: [PATCH 1/2] added message system --- src/engine.cpp | 4 ++-- src/message.cpp | 7 +++++++ src/message.h | 18 ++++++++++++++++++ src/messagebus.cpp | 11 +++++++++++ src/messagebus.h | 18 ++++++++++++++++++ src/system.cpp | 7 +++++++ src/system.h | 20 ++++++++++++++++++++ src/tools/graph.h | 2 +- src/tools/loader.cpp | 1 + 9 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 src/message.cpp create mode 100644 src/message.h create mode 100644 src/messagebus.cpp create mode 100644 src/messagebus.h create mode 100644 src/system.cpp create mode 100644 src/system.h diff --git a/src/engine.cpp b/src/engine.cpp index cdcf083..ecb203b 100644 --- a/src/engine.cpp +++ b/src/engine.cpp @@ -19,14 +19,14 @@ Engine::Engine() : m_clock = new sf::Clock(); m_clock->restart(); m_renderer = new SparrowRenderer(); - m_renderer->setCamera(NULL); + // m_renderer->setCamera(NULL); } Engine::~Engine() { delete m_clock; if(m_window != NULL) - m_renderer->destroyGL(); + // m_renderer->destroyGL(); delete m_renderer; if(m_window != NULL) { diff --git a/src/message.cpp b/src/message.cpp new file mode 100644 index 0000000..3a27417 --- /dev/null +++ b/src/message.cpp @@ -0,0 +1,7 @@ +#include "message.h" + + +Message::Message(std::string id, SystemType sender):m_id(id),m_sender(sender) +{ + +} diff --git a/src/message.h b/src/message.h new file mode 100644 index 0000000..61f9192 --- /dev/null +++ b/src/message.h @@ -0,0 +1,18 @@ +#ifndef MESSAGE_H +#define MESSAGE_H + +#include +#include +#include "system.h" + +class Message +{ + std::string m_id; + SystemType m_sender; +public: + Message(std::string,SystemType); +}; + + + +#endif // MESSAGE_H diff --git a/src/messagebus.cpp b/src/messagebus.cpp new file mode 100644 index 0000000..2cccec1 --- /dev/null +++ b/src/messagebus.cpp @@ -0,0 +1,11 @@ +#include "messagebus.h" + +MessageBus::MessageBus() +{ + +} + +void MessageBus::postMessage(Message *msg) +{ + message_list.push_back(msg); +} diff --git a/src/messagebus.h b/src/messagebus.h new file mode 100644 index 0000000..626c971 --- /dev/null +++ b/src/messagebus.h @@ -0,0 +1,18 @@ +#ifndef MESSAGEBUS_H +#define MESSAGEBUS_H + +#include + +class Message; + +class MessageBus +{ + std::vector message_list; //message file + +public: + MessageBus(); + void postMessage(Message* msg); + void handleMessage(); +}; + +#endif // MESSAGEBUS_H diff --git a/src/system.cpp b/src/system.cpp new file mode 100644 index 0000000..636b73c --- /dev/null +++ b/src/system.cpp @@ -0,0 +1,7 @@ +#include "system.h" + + +System::System() +{ + +} diff --git a/src/system.h b/src/system.h new file mode 100644 index 0000000..3cfb905 --- /dev/null +++ b/src/system.h @@ -0,0 +1,20 @@ +#ifndef SYSTEM_H +#define SYSTEM_H + +class MessageBus; +class Message; + +//TODO:complete this part with other existing system, +enum SystemType {INPUT_SYSTEM, RENDERER_SYSTEM, IA_SYSTEM}; + +class System +{ + SystemType m_type; + MessageBus* m_msgBus; + +public: + System(); + virtual void handleMessage(Message* message) = 0; +}; + +#endif // SYSTEM_H diff --git a/src/tools/graph.h b/src/tools/graph.h index 42f670d..aea86fe 100644 --- a/src/tools/graph.h +++ b/src/tools/graph.h @@ -18,7 +18,7 @@ public: void addNeighbours(GraphNode*,float); void addNeighbours(GraphEdge); int getNbNeighbours(); - virtual float heuristic(GraphNode*){return 1;}; + virtual float heuristic(GraphNode*){return 1;} void setValue(int); int getValue(); diff --git a/src/tools/loader.cpp b/src/tools/loader.cpp index 102bf4e..6f962fb 100644 --- a/src/tools/loader.cpp +++ b/src/tools/loader.cpp @@ -1,6 +1,7 @@ #include "loader.h" #include #include +#include #include #include From 90a03b6f51bf14fc7ab2d5e6a897869a15689f41 Mon Sep 17 00:00:00 2001 From: Lendemor Date: Mon, 28 Mar 2016 21:43:12 +0200 Subject: [PATCH 2/2] started adding sparrowshell --- .gitignore | 3 ++- src/main.cpp | 14 +++++----- src/messagebus.cpp | 20 ++++++++++++++- src/messagebus.h | 12 +++++++-- src/sparrowshell.cpp | 51 +++++++++++++++++++++++++++++++++++++ src/sparrowshell.h | 55 ++++++++++++++++++++++++++++++++++++++++ src/system.cpp | 21 +++++++++++++++ src/system.h | 18 ++++++++++++- src/tools/pathfinder.cpp | 2 -- 9 files changed, 183 insertions(+), 13 deletions(-) create mode 100644 src/sparrowshell.cpp create mode 100644 src/sparrowshell.h diff --git a/.gitignore b/.gitignore index 2ce6cc3..fbb64cc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build* -*.user \ No newline at end of file +*.user +data* diff --git a/src/main.cpp b/src/main.cpp index 2f4f09f..0790fc5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -9,7 +9,7 @@ #include "tools/pathfinder.h" int main(){ - CameraNode camera; + /* CameraNode camera; RESOURCE_ADD(&camera, SceneNode, "camera"); Scene scene("testScene"); @@ -30,14 +30,16 @@ int main(){ GraphNode n4 = GraphNode(); n4.setValue(4); - n1.addNeighbours(&n2,2); - n1.addNeighbours(&n3,3); - n2.addNeighbours(&n3,5); - n3.addNeighbours(&n4,2); + n1.addNeighbours(&n2); + n1.addNeighbours(&n3); + n2.addNeighbours(&n3); + n3.addNeighbours(&n4); std::vector path = PathFinder::a_star(&n1,&n4); std::cout << "Path Size: " << path.size() << std::endl; for(GraphNode* gn: path){ std::cout << gn->getValue() << std::endl; - } + }*/ + + } diff --git a/src/messagebus.cpp b/src/messagebus.cpp index 2cccec1..057003b 100644 --- a/src/messagebus.cpp +++ b/src/messagebus.cpp @@ -1,11 +1,29 @@ #include "messagebus.h" +#include "system.h" MessageBus::MessageBus() { } +void MessageBus::registerSystem(SystemType type, System* system){ + systems[type] = system; +} + +void MessageBus::update() +{ + while (!message_list.empty()){ + Message* msg = message_list.front(); + message_list.pop(); + for(auto const &entity : systems){ + entity.second->handleMessage(msg); + } + } +} + void MessageBus::postMessage(Message *msg) { - message_list.push_back(msg); + message_list.push(msg); } + + diff --git a/src/messagebus.h b/src/messagebus.h index 626c971..46e1d60 100644 --- a/src/messagebus.h +++ b/src/messagebus.h @@ -1,17 +1,25 @@ #ifndef MESSAGEBUS_H #define MESSAGEBUS_H -#include +#include +#include +#include + +#include "system.h" class Message; +class System; class MessageBus { - std::vector message_list; //message file + std::map systems; + std::queue message_list; //message file public: MessageBus(); + void registerSystem(SystemType,System*); void postMessage(Message* msg); + void update(); void handleMessage(); }; diff --git a/src/sparrowshell.cpp b/src/sparrowshell.cpp new file mode 100644 index 0000000..42d7602 --- /dev/null +++ b/src/sparrowshell.cpp @@ -0,0 +1,51 @@ +#include "sparrowshell.h" + +#include "message.h" +#include "input.h" + +const int SparrowShell::BUFFER_MAX_LENGTH = 50; +const int SparrowShell::BUFFER_DISPLAYED_NUMBER = 10; +const int SparrowShell::SCROLLBAR_PIXEL_WIDTH = 2; + +SparrowShell::SparrowShell(sf::Window* window, Input* input): m_position(glm::ivec2(0,0)),m_window(window),m_input(input),m_scrollbar(this) +{ + //m_dimension = glm::ivec2();// +} + +void SparrowShell::out(std::string s) +{ + if (m_buffer.size() == BUFFER_MAX_LENGTH) + m_buffer.pop_back(); + m_buffer.push_front(s); +} + +void SparrowShell::scrollUp(){ + if (m_index + BUFFER_DISPLAYED_NUMBER < m_buffer.size()) m_index++; +} + +void SparrowShell::scrollDown(){ + if (m_index > 0) m_index--; +} + +void SparrowShell::update() +{ + //TODO : update TextMesh + m_scrollbar.update(); +} + +SparrowShell::ScrollBar::ScrollBar(SparrowShell* shell):m_shell(shell){ + m_position = glm::ivec2(m_shell->m_dimension.x - SCROLLBAR_PIXEL_WIDTH,0); + m_dimension = glm::ivec2(SCROLLBAR_PIXEL_WIDTH,m_shell->m_dimension.y); +} + +void SparrowShell::ScrollBar::update(){ + m_position.y = m_shell->m_position.y; + m_dimension.y = m_shell->m_dimension.y; + + if (m_shell->m_buffer.size() > BUFFER_DISPLAYED_NUMBER){ + float cran = ((float)m_shell->m_dimension.y/(float)m_shell->m_buffer.size()); + int indexCursor = m_shell->m_buffer.size()-(m_shell->m_index+SCROLLBAR_PIXEL_WIDTH); + m_position.y += (int)(cran * indexCursor); + m_dimension.y = (int)(cran * BUFFER_DISPLAYED_NUMBER); + } +} diff --git a/src/sparrowshell.h b/src/sparrowshell.h new file mode 100644 index 0000000..baa89e2 --- /dev/null +++ b/src/sparrowshell.h @@ -0,0 +1,55 @@ +#ifndef SPARROWSHELL_H +#define SPARROWSHELL_H + +#include + +#include "system.h" +#include "scene.h" +#include "glm/glm.hpp" + +class Input; + +namespace sf { +class Window; +} + +class SparrowShell : public SceneNode +{ +private: + class ScrollBar{ + SparrowShell* m_shell; + glm::ivec2 m_position; + glm::ivec2 m_dimension; + //TODO : Add rectangle mesh + + public: + ScrollBar(); + ScrollBar(SparrowShell* shell); + void update(); + }; + + static const int BUFFER_MAX_LENGTH; + static const int BUFFER_DISPLAYED_NUMBER; + static const int SCROLLBAR_PIXEL_WIDTH; + + std::list m_buffer; + sf::Window* m_window; + Input* m_input; + int m_index = 0; + + glm::ivec2 m_position; + glm::ivec2 m_dimension; + + //textMesh + ScrollBar m_scrollbar; + +public: + SparrowShell(sf::Window*, Input*); + + void update(); + void scrollUp(); + void scrollDown(); + void out(std::string); +}; + +#endif // SPARROWSHELL_H diff --git a/src/system.cpp b/src/system.cpp index 636b73c..feee297 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -1,7 +1,28 @@ #include "system.h" +#include "messagebus.h" +#include "message.h" +#include "input.h" +#include System::System() { } + +InputSystem::InputSystem(){ + +} + +void InputSystem::initInput(sf::Window *window){ + m_input = new Input(window); +} + +void InputSystem::update(){ + int action; + Message* message; + while (action = m_input->getAction() != NO_ACTION){ + message = new Message(std::to_string(action),SystemType::INPUT_SYSTEM); + m_msgBus->postMessage(message); + } +} diff --git a/src/system.h b/src/system.h index 3cfb905..915a4dc 100644 --- a/src/system.h +++ b/src/system.h @@ -3,13 +3,19 @@ class MessageBus; class Message; +class Input; + +namespace sf{ +class Window; +} //TODO:complete this part with other existing system, -enum SystemType {INPUT_SYSTEM, RENDERER_SYSTEM, IA_SYSTEM}; +enum SystemType {INPUT_SYSTEM, RENDERER_SYSTEM, IA_SYSTEM,GAME_SYSTEM,LENGTH}; class System { SystemType m_type; +protected: MessageBus* m_msgBus; public: @@ -17,4 +23,14 @@ public: virtual void handleMessage(Message* message) = 0; }; +class InputSystem : public System{ +private: + Input* m_input; +public: + InputSystem(); + ~InputSystem(); + void initInput(sf::Window* window); + void update(); +}; + #endif // SYSTEM_H diff --git a/src/tools/pathfinder.cpp b/src/tools/pathfinder.cpp index e692459..00cfc93 100644 --- a/src/tools/pathfinder.cpp +++ b/src/tools/pathfinder.cpp @@ -64,5 +64,3 @@ std::vector PathFinder::a_star(GraphNode* start,GraphNode* goal) std::reverse(path.begin(),path.end()); return path; } - -