Elaztek Developer Hub
Blamite Game Engine - blam!  00453.06.08.26.0624.blamite
The core library for the Blamite Game Engine.
world_editor.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
5 #include <limits.h>
6 
9 
14 {
15 private:
17  bool show_add_primitive_dialog = false;
18  std::string primitive_type_name = "cuboid";
19  int index_to_remove = -1;
20 
21 public:
22 
27  {
28  ImGui::OpenPopup("Add Object");
29  if (ImGui::BeginPopupModal("Add Object", &show_add_primitive_dialog))
30  {
31  if (ImGui::BeginCombo("object type", primitive_type_name.c_str()))
32  {
33  if (ImGui::Selectable("cuboid"))
34  {
35  selected_primitive_type = BlamWorldObjectType::PrimitiveCuboid;
36  primitive_type_name = "cuboid";
37  }
38 
39  if (ImGui::Selectable("cylinder"))
40  {
41  selected_primitive_type = BlamWorldObjectType::PrimitiveCylinder;
42  primitive_type_name = "cylinder";
43  }
44 
45  if (ImGui::Selectable("sphere"))
46  {
47  selected_primitive_type = BlamWorldObjectType::PrimitiveSphere;
48  primitive_type_name = "sphere";
49  }
50 
51  if (ImGui::Selectable("line"))
52  {
53  selected_primitive_type = BlamWorldObjectType::PrimitiveLine;
54  primitive_type_name = "line";
55  }
56 
57  if (ImGui::Selectable("grid"))
58  {
59  selected_primitive_type = BlamWorldObjectType::GizmoGrid;
60  primitive_type_name = "grid";
61  }
62 
63  if (ImGui::Selectable("text"))
64  {
65  selected_primitive_type = BlamWorldObjectType::Text3D;
66  primitive_type_name = "text";
67  }
68 
70  }
71 
72  if (ImGui::Button("OK"))
73  {
75  {
76  BlamWorldObject* new_primitive = nullptr;
77 
78  if (selected_primitive_type == BlamWorldObjectType::PrimitiveCuboid)
79  {
81  }
82  else if (selected_primitive_type == BlamWorldObjectType::PrimitiveCylinder)
83  {
85  }
86  else if (selected_primitive_type == BlamWorldObjectType::PrimitiveSphere)
87  {
89  }
90  else if (selected_primitive_type == BlamWorldObjectType::PrimitiveLine)
91  {
93  }
94  else if (selected_primitive_type == BlamWorldObjectType::GizmoGrid)
95  {
97  }
98  else if (selected_primitive_type == BlamWorldObjectType::Text3D)
99  {
100  new_primitive = new BlamWorldObject_Text3D(Blam::World::GetWorldState());
101  }
102 
103  if (new_primitive)
104  {
105  Blam::World::GetWorldState()->AddObject(new_primitive);
106  }
107  }
108 
109  show_add_primitive_dialog = false;
110  }
111 
112  ImGui::SameLine();
113 
114  if (ImGui::Button("Cancel"))
115  {
116  show_add_primitive_dialog = false;
117  }
118 
119  ImGui::EndPopup();
120  }
121  }
122 
123  void Draw()
124  {
125  if (!show)
126  {
127  return;
128  }
129 
130  if (ImGui::Begin("World State Editor", &show))
131  {
133 
134  if (ImGui::Button("initialize world state"))
135  {
137  }
138 
139  ImGui::SameLine();
140 
141  if (ImGui::Button("destroy world state"))
142  {
144  world_state = nullptr;
145  }
146 
147  if (world_state)
148  {
149  if (ImGui::Button("add primitive"))
150  {
151  show_add_primitive_dialog = true;
152  }
153 
154  ImGui::SameLine();
155 
156  if (ImGui::Button("delete @ "))
157  {
158  if (index_to_remove > -1 && index_to_remove < world_state->GetObjectCount())
159  {
160  BlamWorldObject* object = world_state->GetObjectAtIndex(index_to_remove);
161  world_state->RemoveObject(object->id);
162  object = nullptr;
163  }
164  }
165 
166  ImGui::SameLine();
167 
168  ImGui::InputInt("", &index_to_remove);
169 
170  for (int i = 0; i < world_state->GetObjectCount(); i++)
171  {
172  BlamWorldObject* object = world_state->GetObjectAtIndex(i);
173 
174  if (!object)
175  {
176  continue;
177  }
178 
179  std::string entry_name = object->GetName() + " (object " + std::to_string(i) + ")";
180 
181  if (ImGui::CollapsingHeader(entry_name.c_str()))
182  {
183  ImGui::PushID(object->id);
184  object->ShowImGuiEditControls();
185  ImGui::PopID();
186  }
187  }
188  }
189  else
190  {
191  ImGui::Text("world state not loaded");
192  }
193  }
194  ImGui::End();
195 
196  if (show_add_primitive_dialog)
197  {
199  }
200  }
201 };
Blam::World::GetWorldState
BLAM BlamWorldState * GetWorldState()
Retrieves the current world state.
Definition: world.cpp:56
object
Definition: object.h:27
BlamWorldState::AddObject
void AddObject(BlamWorldObject *object)
Definition: BlamWorldState.cpp:107
ImGui::EndPopup
IMGUI_API void EndPopup()
Definition: imgui.cpp:7675
BlamImGuiWindow::show
bool show
Controls whether or not the group should be shown. May not be used in all groups.
Definition: imgui.h:34
ImGui::BeginPopupModal
IMGUI_API bool BeginPopupModal(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:7647
Blam::World::InitializeWorldState
BLAM void InitializeWorldState()
Initializes a new world state.
Definition: world.cpp:11
BlamWorldObjectType
BlamWorldObjectType
Definition: world_objects.h:90
world.h
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
BlamImGuiWindow_WorldEditor::Draw
void Draw()
Draws the contents of the group.
Definition: world_editor.hpp:123
BlamWorldState::GetObjectCount
int GetObjectCount()
Definition: BlamWorldState.cpp:157
imgui_stdlib.h
ImGui::SameLine
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
Definition: imgui.cpp:7147
BlamImGuiWindow
Class representing an ImGUI window.
Definition: imgui.h:31
BlamWorldObject::GetName
std::string GetName()
Definition: BlamWorldObject.cpp:300
BlamWorldObject_PrimitiveLine
Definition: world_objects.h:527
BlamImGuiWindow_WorldEditor
Class for the World Editor utility.
Definition: world_editor.hpp:13
BlamWorldObjectType::PrimitiveCylinder
@ PrimitiveCylinder
ImGui::Begin
IMGUI_API bool Begin(const char *name, bool *p_open=NULL, ImGuiWindowFlags flags=0)
Definition: imgui.cpp:5397
ImGui::CollapsingHeader
IMGUI_API bool CollapsingHeader(const char *label, ImGuiTreeNodeFlags flags=0)
Definition: imgui_widgets.cpp:5422
ImGui::OpenPopup
IMGUI_API void OpenPopup(const char *str_id)
Definition: imgui.cpp:7453
Blam::World::DestroyWorldState
BLAM void DestroyWorldState()
Destroys the current world state.
Definition: world.cpp:31
BlamWorldState::GetObjectAtIndex
BlamWorldObject * GetObjectAtIndex(int index)
Definition: BlamWorldState.cpp:178
BlamWorldObject_PrimitiveCylinder
Definition: world_objects.h:503
ImGui::Text
IMGUI_API void Text(const char *fmt,...) IM_FMTARGS(1)
Definition: imgui_widgets.cpp:238
ImGui::BeginCombo
IMGUI_API bool BeginCombo(const char *label, const char *preview_value, ImGuiComboFlags flags=0)
Definition: imgui_widgets.cpp:1416
ImGui::Selectable
IMGUI_API bool Selectable(const char *label, bool selected=false, ImGuiSelectableFlags flags=0, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui_widgets.cpp:5469
ImGui::PopID
IMGUI_API void PopID()
Definition: imgui.cpp:7026
BlamWorldObjectType::GizmoGrid
@ GizmoGrid
BlamWorldObjectType::PrimitiveLine
@ PrimitiveLine
BlamWorldObject_Text3D
Definition: world_objects.h:554
BlamWorldState::RemoveObject
bool RemoveObject(uint64_t object_id, bool delete_data=true)
Definition: BlamWorldState.cpp:133
BlamWorldObjectType::PrimitiveSphere
@ PrimitiveSphere
ImGui::EndCombo
IMGUI_API void EndCombo()
Definition: imgui_widgets.cpp:1522
BlamWorldObject_PrimitiveCuboid
Definition: world_objects.h:463
BlamWorldObject_GizmoGrid
Definition: world_objects.h:606
BlamWorldObject
Class representing a world object.
Definition: world_objects.h:138
BlamWorldObject_PrimitiveSphere
Definition: world_objects.h:473
BlamWorldObjectType::PrimitiveCuboid
@ PrimitiveCuboid
BlamImGuiWindow_WorldEditor::ShowAddPrimitivePopup
void ShowAddPrimitivePopup()
Displays the Add Primitive dialog, if opened.
Definition: world_editor.hpp:26
imgui.h
BlamWorldObjectType::Text3D
@ Text3D
ImGui::PushID
IMGUI_API void PushID(const char *str_id)
Definition: imgui.cpp:6995
BlamWorldState
Class representing a world state.
Definition: world_objects.h:715
ImGui::Button
IMGUI_API bool Button(const char *label, const ImVec2 &size=ImVec2(0, 0))
Definition: imgui_widgets.cpp:644
ImGui::InputInt
IMGUI_API bool InputInt(const char *label, int *v, int step=1, int step_fast=100, ImGuiInputTextFlags flags=0)
Definition: imgui_widgets.cpp:3031