Elaztek Developer Hub
Blamite Game Engine - blam!  00367.02.08.23.1815.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 
9 
10 namespace Blam::DebugUI::Windows
11 {
16  {
17  private:
18  int index_to_remove = -1;
19 
20  bool show_add_primitive_dialog = false;
21  Blam3DPrimitiveType selected_primitive_type = Blam3DPrimitiveType::Cuboid;
22  std::string primitive_type_name = "cuboid";
23 
24  public:
26  {
27  ImGui::OpenPopup("Add Primitive");
28  if (ImGui::BeginPopupModal("Add Primitive", &show_add_primitive_dialog))
29  {
30  if (ImGui::BeginCombo("primitive type", primitive_type_name.c_str()))
31  {
32  if (ImGui::Selectable("cuboid"))
33  {
34  selected_primitive_type = Blam3DPrimitiveType::Cuboid;
35  primitive_type_name = "cuboid";
36  }
37 
38  if (ImGui::Selectable("cylinder"))
39  {
40  selected_primitive_type = Blam3DPrimitiveType::Cylinder;
41  primitive_type_name = "cylinder";
42  }
43 
45  }
46 
47  if (ImGui::Button("OK"))
48  {
50  {
51  BlamWorldObject* new_primitive = new BlamWorldObject_Primitive(selected_primitive_type, Blam::World::GetWorldState());
52 
53  if (new_primitive)
54  {
55  Blam::World::GetWorldState()->AddObject(new_primitive);
56  }
57  }
58 
59  show_add_primitive_dialog = false;
60  }
61 
63 
64  if (ImGui::Button("Cancel"))
65  {
66  show_add_primitive_dialog = false;
67  }
68 
70  }
71  }
72 
73  void Draw()
74  {
75  if (show)
76  {
77  if (ImGui::Begin("World State Editor", &show))
78  {
80 
81  if (ImGui::Button("initialize world state"))
82  {
84  }
85 
87 
88  if (ImGui::Button("destroy world state"))
89  {
91  world_state = nullptr;
92  }
93 
94  if (world_state)
95  {
96  if (ImGui::Button("add primitive"))
97  {
98  show_add_primitive_dialog = true;
99  }
100 
101  ImGui::SameLine();
102 
103  if (ImGui::Button("delete @ "))
104  {
105  if (index_to_remove > -1 && index_to_remove < world_state->GetObjectCount())
106  {
107  BlamWorldObject* object = world_state->GetObjectAtIndex(index_to_remove);
108  world_state->RemoveObject(object->id);
109  delete object;
110  object = nullptr;
111  }
112  }
113 
114  ImGui::SameLine();
115 
116  ImGui::InputInt("", &index_to_remove);
117 
118  for (int i = 0; i < world_state->GetObjectCount(); i++)
119  {
120  BlamWorldObject* object = world_state->GetObjectAtIndex(i);
121 
122  if (!object)
123  {
124  continue;
125  }
126 
127  std::string entry_name = object->name + " (object " + std::to_string(i) + ")";
128 
129  if (ImGui::CollapsingHeader(entry_name.c_str()))
130  {
131  ImGui::InputText(ENGINE_TEXT("world_editor_name_name").c_str(), &object->name);
132  ImGui::InputTextMultiline(ENGINE_TEXT("world_editor_description_name").c_str(), &object->description);
133  ImGui::DragFloat3(ENGINE_TEXT("position").c_str(), (float*)&object->position);
134  ImGui::DragFloat3(ENGINE_TEXT("rotation").c_str(), (float*)&object->rotation);
135  ImGui::DragFloat3(ENGINE_TEXT("scale").c_str(), (float*)&object->scale);
136 
137  if (object->type == BlamWorldObjectType::Primitive)
138  {
140 
141  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_0_name").c_str(), &primitive->radius_0);
142  ImGui::SameLine();
143  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_0_tooltip").c_str());
144 
145  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_1_name").c_str(), &primitive->radius_1);
146  ImGui::SameLine();
147  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_1_tooltip").c_str());
148 
149  ImGui::DragInt(ENGINE_TEXT("world_editor_resolution_name").c_str(), &primitive->resolution, 1.0f, 2, INT32_MAX);
150  ImGui::SameLine();
151  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_resolution_tooltip").c_str());
152  }
153  }
154  }
155  }
156  else
157  {
158  ImGui::Text("world state not loaded");
159  }
160  }
161  ImGui::End();
162 
163  if (show_add_primitive_dialog)
164  {
166  }
167  }
168  }
169  };
170 }
Blam::World::GetWorldState
BLAM_EXT_API BlamWorldState * GetWorldState()
Retrieves the current world state.
Definition: world.cpp:44
Blam::DebugUI::Widgets::ShowHelpMarker
BLAM void ShowHelpMarker(const char *desc)
Shows a help indicator.
Definition: widgets.cpp:7
BlamWorldState::AddObject
void AddObject(BlamWorldObject *object)
Definition: BlamWorldState.cpp:70
BlamWorldObject::name
std::string name
The unique name of this object.
Definition: world.h:45
BlamWorldObject::position
BlamVector3 position
The position of this object in world space.
Definition: world.h:51
primitive
Definition: primitive.h:11
ImGui::EndPopup
IMGUI_API void EndPopup()
Definition: imgui.cpp:7675
Blam::DebugUI::Windows::WorldEditor
Class for the World Editor utility.
Definition: world_editor.hpp:15
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:9
ImGui::InputText
IMGUI_API bool InputText(const char *label, char *buf, size_t buf_size, ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
Definition: imgui_widgets.cpp:3068
BlamWorldObject::rotation
BlamVector3 rotation
The rotation of this object in world space.
Definition: world.h:52
world.h
Blam3DPrimitiveType::Cuboid
@ Cuboid
ImGui::End
IMGUI_API void End()
Definition: imgui.cpp:6016
BlamWorldState::GetObjectCount
int GetObjectCount()
Definition: BlamWorldState.cpp:101
imgui_stdlib.h
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
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:73
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:33
BlamWorldState::GetObjectAtIndex
BlamWorldObject * GetObjectAtIndex(int index)
Definition: BlamWorldState.cpp:122
BlamWorldObject::id
uint64_t id
A unique identifier for this object. Used to identify objects during runtime.
Definition: world.h:48
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:53
BlamWorldObject::type
BlamWorldObjectType type
The type of this world object.
Definition: world.h:55
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:25
BlamWorldObject_Primitive
Class representing a primitive-based world object.
Definition: world.h:102
ImGui::InputTextMultiline
IMGUI_API bool InputTextMultiline(const char *label, char *buf, size_t buf_size, const ImVec2 &size=ImVec2(0, 0), ImGuiInputTextFlags flags=0, ImGuiInputTextCallback callback=NULL, void *user_data=NULL)
Definition: imgui_widgets.cpp:3074
ImGui::EndCombo
IMGUI_API void EndCombo()
Definition: imgui_widgets.cpp:1522
BlamWorldObject
Class representing a world object.
Definition: world.h:42
ENGINE_TEXT
#define ENGINE_TEXT(string_id)
Definition: engine_text.h:7
Blam::DebugUI::Windows
Legacy namespace to contain data for the legacy ImGUI console.
Definition: ui.h:19
BlamWorldState::RemoveObject
void RemoveObject(uint64_t object_id)
Definition: BlamWorldState.cpp:85
Blam3DPrimitiveType::Cylinder
@ Cylinder
BlamWorldState
Class representing a world state.
Definition: world.h:128
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
BlamWorldObject::description
std::string description
An optional description of this object.
Definition: world.h:46
Blam3DPrimitiveType
Blam3DPrimitiveType
Definition: world.h:30
INT32_MAX
#define INT32_MAX
Definition: stdint.h:183