Elaztek Developer Hub
Blamite Game Engine - blam!  00346.12.11.21.0529.blamite
The core library for the Blamite Game Engine.
world_editor.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../../debug_ui.h"
4 
5 #include <limits.h>
6 
8 
10 {
15  {
16  private:
17  int index_to_remove = -1;
18 
19  bool show_add_primitive_dialog = false;
20  Blam3DPrimitiveType selected_primitive_type = Blam3DPrimitiveType::Cuboid;
21  std::string primitive_type_name = "cuboid";
22 
23  public:
25  {
26  ImGui::OpenPopup("Add Primitive");
27  if (ImGui::BeginPopupModal("Add Primitive", &show_add_primitive_dialog))
28  {
29  if (ImGui::BeginCombo("primitive type", primitive_type_name.c_str()))
30  {
31  if (ImGui::Selectable("cuboid"))
32  {
33  selected_primitive_type = Blam3DPrimitiveType::Cuboid;
34  primitive_type_name = "cuboid";
35  }
36 
37  if (ImGui::Selectable("cylinder"))
38  {
39  selected_primitive_type = Blam3DPrimitiveType::Cylinder;
40  primitive_type_name = "cylinder";
41  }
42 
44  }
45 
46  if (ImGui::Button("OK"))
47  {
49  {
50  BlamWorldObject* new_primitive = new BlamWorldObject_Primitive(selected_primitive_type, Blam::World::GetWorldState());
51 
52  if (new_primitive)
53  {
54  Blam::World::GetWorldState()->objects.push_back(new_primitive);
55  }
56  }
57 
58  show_add_primitive_dialog = false;
59  }
60 
62 
63  if (ImGui::Button("Cancel"))
64  {
65  show_add_primitive_dialog = false;
66  }
67 
69  }
70  }
71 
72  void Draw()
73  {
74  if (show)
75  {
76  if (ImGui::Begin("World State Editor", &show))
77  {
79 
80  if (ImGui::Button("initialize world state"))
81  {
83  }
84 
86 
87  if (ImGui::Button("destroy world state"))
88  {
90  world_state = nullptr;
91  }
92 
93  if (world_state)
94  {
95  if (ImGui::Button("add primitive"))
96  {
97  show_add_primitive_dialog = true;
98  }
99 
100  ImGui::SameLine();
101 
102  if (ImGui::Button("delete @ "))
103  {
104  if (index_to_remove > -1 && index_to_remove < world_state->objects.size())
105  {
106  BlamWorldObject* object = world_state->objects.at(index_to_remove);
107  world_state->objects.erase(world_state->objects.begin() + index_to_remove);
108  delete object;
109  object = nullptr;
110  }
111  }
112 
113  ImGui::SameLine();
114 
115  ImGui::InputInt("", &index_to_remove);
116 
117  for (int i = 0; i < world_state->objects.size(); i++)
118  {
119  BlamWorldObject* object = world_state->objects.at(i);
120 
121  std::string entry_name = "object " + std::to_string(i);
122 
123  if (ImGui::CollapsingHeader(entry_name.c_str()))
124  {
125  ImGui::DragFloat3(ENGINE_TEXT("position").c_str(), (float*)&object->position);
126  ImGui::DragFloat3(ENGINE_TEXT("rotation").c_str(), (float*)&object->rotation);
127  ImGui::DragFloat3(ENGINE_TEXT("scale").c_str(), (float*)&object->scale);
128 
129  if (object->type == BlamWorldObjectType::Primitive)
130  {
132 
133  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_0_name").c_str(), &primitive->radius_0);
134  ImGui::SameLine();
135  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_0_tooltip").c_str());
136 
137  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_1_name").c_str(), &primitive->radius_1);
138  ImGui::SameLine();
139  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_1_tooltip").c_str());
140 
141  ImGui::DragInt(ENGINE_TEXT("world_editor_resolution_name").c_str(), &primitive->resolution, 1.0f, 2, INT32_MAX);
142  ImGui::SameLine();
143  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_resolution_tooltip").c_str());
144  }
145  }
146  }
147  }
148  else
149  {
150  ImGui::Text("world state not loaded");
151  }
152  }
153  ImGui::End();
154 
155  if (show_add_primitive_dialog)
156  {
158  }
159  }
160  }
161  };
162 }
Blam::World::GetWorldState
BLAM BlamWorldState * GetWorldState()
Definition: world.cpp:23
Blam::DebugUI::Widgets::ShowHelpMarker
BLAM void ShowHelpMarker(const char *desc)
Shows a help indicator.
Definition: widgets.cpp:7
BlamWorldObject::position
BlamVector3 position
The position of this object in world space.
Definition: world.h:41
ImGui::EndPopup
IMGUI_API void EndPopup()
Definition: imgui.cpp:7675
Blam::DebugUI::Windows::WorldEditor
Class for the World Editor utility.
Definition: world_editor.hpp:14
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()
Definition: world.cpp:5
BlamWorldObject::rotation
BlamVector3 rotation
The rotation of this object in world space.
Definition: world.h:42
world.h
Blam3DPrimitiveType::Cuboid
@ Cuboid
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
ImGui::DragInt
IMGUI_API bool DragInt(const char *label, int *v, float v_speed=1.0f, int v_min=0, int v_max=0, const char *format="%d")
Definition: imgui_widgets.cpp:2209
BlamWorldState::objects
std::vector< BlamWorldObject * > objects
Definition: world.h:121
ImGui::SameLine
IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f)
Definition: imgui.cpp:7147
ImGui::DragFloat
IMGUI_API bool DragFloat(const char *label, float *v, float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui_widgets.cpp:2164
Blam::DebugUI::Windows::WorldEditor::Draw
void Draw()
Draws the contents of the group.
Definition: world_editor.hpp:72
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()
Definition: world.cpp:14
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
Blam::DebugUI::ImGUIDrawingGroup::show
bool show
Controls whether or not the group should be shown. May not be used in all groups.
Definition: debug_ui.h:362
BlamWorldObject::scale
BlamVector3 scale
The scale/size of the object.
Definition: world.h:43
BlamWorldObject::type
BlamWorldObjectType type
The type of this world object.
Definition: world.h:45
Blam::DebugUI::ImGUIDrawingGroup
Class representing an ImGUI drawing group/draw list item.
Definition: debug_ui.h:359
ImGui::DragFloat3
IMGUI_API bool DragFloat3(const char *label, float v[3], float v_speed=1.0f, float v_min=0.0f, float v_max=0.0f, const char *format="%.3f", float power=1.0f)
Definition: imgui_widgets.cpp:2174
BlamWorldObjectType::Primitive
@ Primitive
Blam::DebugUI::Windows::WorldEditor::ShowAddPrimitivePopup
void ShowAddPrimitivePopup()
Definition: world_editor.hpp:24
BlamWorldObject_Primitive
Class representing a primitive-based world object.
Definition: world.h:92
ImGui::EndCombo
IMGUI_API void EndCombo()
Definition: imgui_widgets.cpp:1522
BlamWorldObject
Class representing a world object.
Definition: world.h:34
ENGINE_TEXT
#define ENGINE_TEXT(string_id)
Definition: engine_text.h:7
BlamWorldObject_Primitive::radius_1
float radius_1
A secondary radius of the primitive. Only used in cylinders.
Definition: world.h:98
BlamWorldObject_Primitive::radius_0
float radius_0
The radius of the primitive. Only used in cylinders.
Definition: world.h:97
BlamWorldObject_Primitive::resolution
int resolution
The level of detail to use for the primitive. Only used in cylinders.
Definition: world.h:99
Blam::DebugUI::Windows
Legacy namespace to contain data for the legacy ImGUI console.
Definition: ui.h:14
Blam3DPrimitiveType::Cylinder
@ Cylinder
BlamWorldState
Class representing a world state.
Definition: world.h:118
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
Blam3DPrimitiveType
Blam3DPrimitiveType
Definition: world.h:22