Tatooine
scene.h
Go to the documentation of this file.
1#ifndef TATOOINE_FLOWEXPLORER_SCENE_H
2#define TATOOINE_FLOWEXPLORER_SCENE_H
3//==============================================================================
10
11#include <memory>
12#include <vector>
13//==============================================================================
14namespace tatooine::flowexplorer {
15//==============================================================================
16struct window;
17struct scene {
18 private:
19 static std::set<std::string_view> items;
20 static bool items_created;
21 std::list<std::unique_ptr<ui::base::node>> m_nodes;
22 std::list<std::unique_ptr<base::renderable>> m_renderables;
23 std::list<std::unique_ptr<ui::link>> m_links;
24 ax::NodeEditor::EditorContext* m_node_editor_context = nullptr;
27 bool m_new_link = false;
30
31 public:
32 //============================================================================
35 filesystem::path const& path);
37 //============================================================================
38 auto links() const -> auto const& { return m_links; }
39 auto links() -> auto& { return m_links; }
40 auto new_link() const -> bool { return m_new_link; }
41 //------------------------------------------------------------------------------
42 auto nodes() const -> auto const& { return m_nodes; }
43 auto nodes() -> auto& { return m_nodes; }
44 //------------------------------------------------------------------------------
45 auto renderables() const -> auto const& { return m_renderables; }
46 auto renderables() -> auto& { return m_renderables; }
47 //----------------------------------------------------------------------------
48 auto camera() const -> auto const& { return *m_cam; }
49 auto camera() -> auto& { return *m_cam; }
50 //----------------------------------------------------------------------------
51 auto window() const -> auto const& { return *m_window; }
52 auto window() -> auto& { return *m_window; }
53 //----------------------------------------------------------------------------
54 auto camera_controller() const -> auto const& { return *m_cam; }
55 auto camera_controller() -> auto& { return *m_cam; }
56 //============================================================================
57 auto remove_link(ui::link const& link_to_remove) -> void;
58 auto render(std::chrono::duration<double> const& dt) -> void;
59 //----------------------------------------------------------------------------
60 auto find_node(ax::NodeEditor::NodeId const& id) -> ui::base::node*;
61 //----------------------------------------------------------------------------
62 auto find_input_pin(ax::NodeEditor::PinId const& id) -> ui::input_pin*;
63 auto find_output_pin(ax::NodeEditor::PinId const& id) -> ui::output_pin*;
64 //----------------------------------------------------------------------------
65 auto node_creators(size_t const width) -> void;
66 //----------------------------------------------------------------------------
67 auto draw_nodes() -> void;
68 //----------------------------------------------------------------------------
69 auto draw_links() -> void;
70 //----------------------------------------------------------------------------
72 //----------------------------------------------------------------------------
74 -> bool;
75 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
77 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
79 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
81 -> bool;
82 //----------------------------------------------------------------------------
84 // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
86 //----------------------------------------------------------------------------
87 auto query_link_creation() -> void;
89 //----------------------------------------------------------------------------
90 auto draw_node_editor(size_t const pos_x, size_t const pos_y,
91 size_t const width, size_t const height,
92 bool& show) -> void;
93 //----------------------------------------------------------------------------
94 auto write(filesystem::path const& filepath) const -> void;
95 auto read(filesystem::path const& filepath) -> void;
96 //----------------------------------------------------------------------------
97 auto open_file(filesystem::path const& filepath) -> void;
98 //----------------------------------------------------------------------------
99 template <typename F>
100 auto do_in_context(F&& f) const -> decltype(auto) {
101 ax::NodeEditor::SetCurrentEditor(m_node_editor_context);
102 if constexpr (!std::is_same_v<std::invoke_result_t<F>, void>) {
103 decltype(auto) ret = f();
104 ax::NodeEditor::SetCurrentEditor(nullptr);
105 return ret;
106 } else {
107 f();
108 ax::NodeEditor::SetCurrentEditor(nullptr);
109 }
110 }
111 //----------------------------------------------------------------------------
112 auto clear() -> void;
113};
114//==============================================================================
115} // namespace tatooine::flowexplorer
116//==============================================================================
118#endif
Definition: directories.h:6
Definition: scene.h:17
auto links() -> auto &
Definition: scene.h:39
ui::input_pin * m_new_link_start_input
Definition: scene.h:28
auto render(std::chrono::duration< double > const &dt) -> void
auto nodes() const -> auto const &
Definition: scene.h:42
auto open_file(filesystem::path const &filepath) -> void
scene(rendering::camera_controller< float > &ctrl, flowexplorer::window *w, filesystem::path const &path)
auto do_in_context(F &&f) const -> decltype(auto)
Definition: scene.h:100
ax::NodeEditor::EditorContext * m_node_editor_context
Definition: scene.h:24
auto new_link() const -> bool
Definition: scene.h:40
auto find_node(ax::NodeEditor::NodeId const &id) -> ui::base::node *
auto can_create_new_link(ui::input_pin const &) -> bool
auto node_creators(size_t const width) -> void
auto window() const -> auto const &
Definition: scene.h:51
auto query_link_and_node_deletions() -> void
std::list< std::unique_ptr< base::renderable > > m_renderables
Definition: scene.h:22
auto can_create_link(ui::input_pin const &, ui::output_pin const &) -> bool
rendering::camera_controller< float > * m_cam
Definition: scene.h:25
auto can_create_new_link(ui::output_pin const &) -> bool
auto can_create_link(ui::output_pin const &, ui::output_pin const &) -> bool
scene(rendering::camera_controller< float > &ctrl, flowexplorer::window *w)
bool m_new_link
Definition: scene.h:27
static std::set< std::string_view > items
Definition: scene.h:19
auto links() const -> auto const &
Definition: scene.h:38
auto remove_link(ui::link const &link_to_remove) -> void
auto camera_controller() -> auto &
Definition: scene.h:55
flowexplorer::window * m_window
Definition: scene.h:26
auto link(ui::input_pin &in, ui::output_pin &out) -> ui::link &
auto renderables() const -> auto const &
Definition: scene.h:45
auto window() -> auto &
Definition: scene.h:52
std::list< std::unique_ptr< ui::link > > m_links
Definition: scene.h:23
auto read(filesystem::path const &filepath) -> void
auto draw_node_editor(size_t const pos_x, size_t const pos_y, size_t const width, size_t const height, bool &show) -> void
auto find_input_pin(ax::NodeEditor::PinId const &id) -> ui::input_pin *
auto query_link_creation() -> void
auto find_output_pin(ax::NodeEditor::PinId const &id) -> ui::output_pin *
auto camera_controller() const -> auto const &
Definition: scene.h:54
std::list< std::unique_ptr< ui::base::node > > m_nodes
Definition: scene.h:21
auto nodes() -> auto &
Definition: scene.h:43
static bool items_created
Definition: scene.h:20
auto write(filesystem::path const &filepath) const -> void
ui::output_pin * m_new_link_start_output
Definition: scene.h:29
auto renderables() -> auto &
Definition: scene.h:46
auto can_create_link(ui::input_pin const &, ui::input_pin const &) -> bool
auto can_create_link(ui::output_pin const &, ui::input_pin const &) -> bool
auto camera() -> auto &
Definition: scene.h:49
auto camera() const -> auto const &
Definition: scene.h:48
Definition: window.h:10
Definition: camera_controller.h:64