Elaztek Developer Hub
Blamite Game Engine - blam!  00398.09.22.23.2015.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  object = nullptr;
110  }
111  }
112 
113  ImGui::SameLine();
114 
115  ImGui::InputInt("", &index_to_remove);
116 
117  for (int i = 0; i < world_state->GetObjectCount(); i++)
118  {
119  BlamWorldObject* object = world_state->GetObjectAtIndex(i);
120 
121  if (!object)
122  {
123  continue;
124  }
125 
126  std::string entry_name = object->name + " (object " + std::to_string(i) + ")";
127 
128  if (ImGui::CollapsingHeader(entry_name.c_str()))
129  {
130  ImGui::InputText(ENGINE_TEXT("world_editor_name_name").c_str(), &object->name);
131  ImGui::InputTextMultiline(ENGINE_TEXT("world_editor_description_name").c_str(), &object->description);
132  ImGui::DragFloat3(ENGINE_TEXT("position").c_str(), (float*)&object->position);
133  ImGui::DragFloat3(ENGINE_TEXT("rotation").c_str(), (float*)&object->rotation);
134  ImGui::DragFloat3(ENGINE_TEXT("scale").c_str(), (float*)&object->scale);
135 
136  if (object->type == BlamWorldObjectType::Primitive)
137  {
139 
140  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_0_name").c_str(), &primitive->radius_0);
141  ImGui::SameLine();
142  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_0_tooltip").c_str());
143 
144  ImGui::DragFloat(ENGINE_TEXT("world_editor_radius_1_name").c_str(), &primitive->radius_1);
145  ImGui::SameLine();
146  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_radius_1_tooltip").c_str());
147 
148  ImGui::DragInt(ENGINE_TEXT("world_editor_resolution_name").c_str(), &primitive->resolution, 1.0f, 2, INT32_MAX);
149  ImGui::SameLine();
150  Blam::DebugUI::Widgets::ShowHelpMarker(ENGINE_TEXT("world_editor_resolution_tooltip").c_str());
151 
152  BlamVector4 imgui_color = primitive->color.ToVector4();
153  ImGui::ColorEdit4("color", (float*)&imgui_color.x);
154  primitive->color.FromVector4(imgui_color);
155 
156  ImGui::Checkbox("solid", &primitive->solid);
157  }
158  }
159  }
160  }
161  else
162  {
163  ImGui::Text("world state not loaded");
164  }
165  }
166  ImGui::End();
167 
168  if (show_add_primitive_dialog)
169  {
171  }
172  }
173  }
174  };
175 }
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_objects.h:45
BlamWorldObject::position
BlamVector3 position
The position of this object in world space.
Definition: world_objects.h:51
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::Checkbox
IMGUI_API bool Checkbox(const char *label, bool *v)
Definition: imgui_widgets.cpp:974
BlamWorldObject_Primitive::color
BlamColor color
Definition: world_objects.h:127
BlamWorldObject_Primitive::solid
bool solid
Definition: world_objects.h:128
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_objects.h:52
world.h
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
Blam3DPrimitiveType::Cuboid
@ Cuboid
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_objects.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_objects.h:53
BlamWorldObject::type
BlamWorldObjectType type
The type of this world object.
Definition: world_objects.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
Blam::DebugUI::Windows::WorldEditor::ShowAddPrimitivePopup
void ShowAddPrimitivePopup()
Definition: world_editor.hpp:25
BlamWorldObject_Primitive
Class representing a primitive-based world object.
Definition: world_objects.h:103
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_objects.h:42
Blam3DPrimitiveType::Cylinder
@ Cylinder
ImGui::ColorEdit4
IMGUI_API bool ColorEdit4(const char *label, float col[4], ImGuiColorEditFlags flags=0)
Definition: imgui_widgets.cpp:4154
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_objects.h:125
BlamWorldObjectType::Primitive
@ Primitive
BlamWorldObject_Primitive::radius_0
float radius_0
The radius of the primitive. Only used in cylinders.
Definition: world_objects.h:124
BlamWorldObject_Primitive::resolution
int resolution
The level of detail to use for the primitive. Only used in cylinders.
Definition: world_objects.h:126
Blam::DebugUI::Windows
Legacy namespace to contain data for the legacy ImGUI console.
Definition: ui.h:26
BlamWorldState::RemoveObject
void RemoveObject(uint64_t object_id)
Definition: BlamWorldState.cpp:85
Blam3DPrimitiveType
Blam3DPrimitiveType
Definition: world_objects.h:28
INT32_MAX
#define INT32_MAX
Definition: stdint.h:66
BlamWorldState
Class representing a world state.
Definition: world_objects.h:149
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_objects.h:46