From 5e3a2492c7bb73daa4e27398daaf490d09980ff3 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Wed, 22 Jun 2022 17:41:59 -0400 Subject: Base system viewer with data loaded from csv files --- include/system.hpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 include/system.hpp (limited to 'include/system.hpp') diff --git a/include/system.hpp b/include/system.hpp new file mode 100644 index 0000000..9de10bc --- /dev/null +++ b/include/system.hpp @@ -0,0 +1,82 @@ +#ifndef SYSTEM_HPP +#define SYSTEM_HPP 1 + +#include "ecs.hpp" +#include "camera.hpp" +#include "window.hpp" + +#include + +class System { +private: + friend class SystemView; + struct SystemTreeNode { + unsigned entityId; + std::list children; + }; + SystemTreeNode m_systemTree; + ecs::EntityMan m_entityMan; + + ecs::Entity &addOrbital(const std::string &name, const std::string &orbitingName, unsigned long a, double e, unit::Mass m, unsigned r, double M, double w); + void tickOrbitals(unit::Time time); + + SystemTreeNode *traverseSystemTree(SystemTreeNode &node, const std::string &name); + SystemTreeNode *getNode(const std::string &name); +public: + System(); + + void update(); + + ecs::Entity &getBody(std::size_t id); +}; + +class SystemView { +private: + System *m_system; + System::SystemTreeNode *m_focus; + + class Search { + private: + struct SystemTreeDisplayNode { + System::SystemTreeNode *node; + std::list children; + SystemTreeDisplayNode *parent; + + unsigned index; + bool collapsed; + bool hidden; + }; + SystemView *m_systemView; + SystemTreeDisplayNode m_displayTree; + std::vector m_displayTreeFlat; + + unsigned m_selectionIndex; + std::string m_query; + bool m_dirty; + + void addNodeToTree(SystemTreeDisplayNode &root, System::SystemTreeNode *node); + void drawNode(SystemTreeDisplayNode &root, Window &searchWindow, unsigned indent); + void rebuild(); + public: + Search(SystemView *systemView); + + void finish(); + void keypress(int key); + void draw(); + }; + std::unique_ptr m_focusSearch; +public: + SystemView(System *system) : m_system(system), m_focusSearch(nullptr) {} + + void keypress(Camera *camera, int key); + void update(Camera *camera); + void draw(Camera *camera); + void drawOver(Camera *camera); + + void view(System *system); + + ecs::Entity &getBody(int id) const; + int getBodyIdByName(const std::string &name); +}; + +#endif -- cgit v1.2.1