fixup! Editor widget selection and creation
This commit is contained in:
@@ -131,6 +131,7 @@ private:
|
||||
|
||||
// Custom UI elements
|
||||
bool createDeleteButton(const std::string& componentType);
|
||||
void createWidgetToolButton(WidgetMode mode);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
<Components>
|
||||
<c:Transform/>
|
||||
<c:UniformScale>
|
||||
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||
</c:UniformScale>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
@@ -12,7 +15,6 @@
|
||||
<Type>
|
||||
<Rotate/>
|
||||
</Type>
|
||||
<Axis X="1" Y="0" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/RotationWidgetX.obj</Resource>
|
||||
@@ -27,7 +29,6 @@
|
||||
<Type>
|
||||
<Rotate/>
|
||||
</Type>
|
||||
<Axis X="0" Y="1" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/RotationWidgetY.obj</Resource>
|
||||
@@ -42,7 +43,6 @@
|
||||
<Type>
|
||||
<Rotate/>
|
||||
</Type>
|
||||
<Axis X="0" Y="0" Z="1"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/RotationWidgetZ.obj</Resource>
|
||||
@@ -53,7 +53,10 @@
|
||||
</Entity>
|
||||
<Entity name="Light">
|
||||
<Components>
|
||||
<c:PointLight/>
|
||||
<c:PointLight>
|
||||
<Intensity>-1</Intensity>
|
||||
<Falloff>0</Falloff>
|
||||
</c:PointLight>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
|
||||
@@ -6,6 +6,9 @@
|
||||
<Resource>Models/ScaleWidgetOrigin.obj</Resource>
|
||||
</c:Model>
|
||||
<c:Transform/>
|
||||
<c:UniformScale>
|
||||
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||
</c:UniformScale>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
@@ -15,7 +18,6 @@
|
||||
<Type>
|
||||
<Scale/>
|
||||
</Type>
|
||||
<Axis X="1" Y="0" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/ScaleWidgetX.obj</Resource>
|
||||
@@ -30,7 +32,6 @@
|
||||
<Type>
|
||||
<Scale/>
|
||||
</Type>
|
||||
<Axis X="0" Y="1" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/ScaleWidgetY.obj</Resource>
|
||||
@@ -45,7 +46,6 @@
|
||||
<Type>
|
||||
<Scale/>
|
||||
</Type>
|
||||
<Axis X="0" Y="0" Z="1"/>
|
||||
</c:EditorWidget>
|
||||
<c:Model>
|
||||
<Resource>Models/ScaleWidgetZ.obj</Resource>
|
||||
|
||||
@@ -6,17 +6,15 @@
|
||||
<Resource>Models/TranslationWidgetOrigin.obj</Resource>
|
||||
</c:Model>
|
||||
<c:Transform/>
|
||||
<c:UniformScale>
|
||||
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||
</c:UniformScale>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="X">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="1" Y="0" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/TranslationWidgetX.obj</Resource>
|
||||
</c:Model>
|
||||
@@ -26,12 +24,7 @@
|
||||
</Entity>
|
||||
<Entity name="Y">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="0" Y="1" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/TranslationWidgetY.obj</Resource>
|
||||
</c:Model>
|
||||
@@ -41,12 +34,7 @@
|
||||
</Entity>
|
||||
<Entity name="Z">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="0" Y="0" Z="1"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/TranslationWidgetZ.obj</Resource>
|
||||
</c:Model>
|
||||
@@ -56,12 +44,7 @@
|
||||
</Entity>
|
||||
<Entity name="XPlane">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="0" Y="1" Z="1"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/WidgetPlaneX.obj</Resource>
|
||||
</c:Model>
|
||||
@@ -71,12 +54,7 @@
|
||||
</Entity>
|
||||
<Entity name="YPlane">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="1" Y="0" Z="1"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/WidgetPlaneY.obj</Resource>
|
||||
</c:Model>
|
||||
@@ -86,12 +64,7 @@
|
||||
</Entity>
|
||||
<Entity name="ZPlane">
|
||||
<Components>
|
||||
<c:EditorWidget>
|
||||
<Type>
|
||||
<Translate/>
|
||||
</Type>
|
||||
<Axis X="1" Y="1" Z="0"/>
|
||||
</c:EditorWidget>
|
||||
<c:EditorWidget/>
|
||||
<c:Model>
|
||||
<Resource>Models/WidgetPlaneZ.obj</Resource>
|
||||
</c:Model>
|
||||
|
||||
@@ -35,57 +35,20 @@ void EditorGUI::drawTools()
|
||||
return;
|
||||
}
|
||||
|
||||
// Translate widget button
|
||||
if (ImGui::ImageButton(
|
||||
(void*)tryLoadTexture("Textures/Icons/Translate.png"),
|
||||
ImVec2(24, 24),
|
||||
ImVec2(0, 1),
|
||||
ImVec2(1, 0),
|
||||
-1,
|
||||
ImVec4(0, 0, 0, 0),
|
||||
(m_CurrentWidgetMode == WidgetMode::Translate) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
|
||||
)
|
||||
) {
|
||||
m_CurrentWidgetMode = WidgetMode::Translate;
|
||||
if (m_OnWidgetMode != nullptr) {
|
||||
m_OnWidgetMode(m_CurrentWidgetMode);
|
||||
}
|
||||
createWidgetToolButton(WidgetMode::Translate);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Translate");
|
||||
}
|
||||
// Rotate widget button
|
||||
ImGui::SameLine();
|
||||
if (ImGui::ImageButton(
|
||||
(void*)tryLoadTexture("Textures/Icons/Rotate.png"),
|
||||
ImVec2(24, 24),
|
||||
ImVec2(0, 1),
|
||||
ImVec2(1, 0),
|
||||
-1,
|
||||
ImVec4(0, 0, 0, 0),
|
||||
(m_CurrentWidgetMode == WidgetMode::Rotate) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
|
||||
)
|
||||
) {
|
||||
m_CurrentWidgetMode = WidgetMode::Rotate;
|
||||
if (m_OnWidgetMode != nullptr) {
|
||||
m_OnWidgetMode(m_CurrentWidgetMode);
|
||||
}
|
||||
createWidgetToolButton(WidgetMode::Rotate);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Rotate");
|
||||
}
|
||||
// Scale widget button
|
||||
ImGui::SameLine();
|
||||
if (ImGui::ImageButton(
|
||||
(void*)tryLoadTexture("Textures/Icons/Scale.png"),
|
||||
ImVec2(24, 24),
|
||||
ImVec2(0, 1),
|
||||
ImVec2(1, 0),
|
||||
-1,
|
||||
ImVec4(0, 0, 0, 0),
|
||||
(m_CurrentWidgetMode == WidgetMode::Scale) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
|
||||
)
|
||||
) {
|
||||
m_CurrentWidgetMode = WidgetMode::Scale;
|
||||
if (m_OnWidgetMode != nullptr) {
|
||||
m_OnWidgetMode(m_CurrentWidgetMode);
|
||||
}
|
||||
createWidgetToolButton(WidgetMode::Scale);
|
||||
if (ImGui::IsItemHovered()) {
|
||||
ImGui::SetTooltip("Scale");
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::ItemSize(ImVec2(5, 0));
|
||||
|
||||
@@ -497,6 +460,36 @@ bool EditorGUI::createDeleteButton(const std::string& componentType)
|
||||
return pressed;
|
||||
}
|
||||
|
||||
void EditorGUI::createWidgetToolButton(WidgetMode mode)
|
||||
{
|
||||
GLuint texture = 0;
|
||||
switch (mode) {
|
||||
case WidgetMode::Translate:
|
||||
texture = tryLoadTexture("Textures/Icons/Translate.png");
|
||||
break;
|
||||
case WidgetMode::Rotate:
|
||||
texture = tryLoadTexture("Textures/Icons/Rotate.png");
|
||||
break;
|
||||
case WidgetMode::Scale:
|
||||
texture = tryLoadTexture("Textures/Icons/Scale.png");
|
||||
break;
|
||||
}
|
||||
if (ImGui::ImageButton(
|
||||
(void*)texture,
|
||||
ImVec2(24, 24),
|
||||
ImVec2(0, 1),
|
||||
ImVec2(1, 0),
|
||||
-1,
|
||||
ImVec4(0, 0, 0, 0),
|
||||
(m_CurrentWidgetMode == mode) ? ImVec4(0, 1, 0, 1) : ImVec4(1, 1, 1, 1)
|
||||
)
|
||||
) {
|
||||
if (m_OnWidgetMode != nullptr) {
|
||||
m_OnWidgetMode(mode);
|
||||
}
|
||||
m_CurrentWidgetMode = mode;
|
||||
}
|
||||
}
|
||||
|
||||
boost::filesystem::path EditorGUI::fileOpenDialog()
|
||||
{
|
||||
|
||||
@@ -126,6 +126,8 @@ void EditorSystem::setWidgetMode(EditorGUI::WidgetMode mode)
|
||||
return;
|
||||
}
|
||||
|
||||
m_WidgetMode = mode;
|
||||
|
||||
if (m_Widget.Valid()) {
|
||||
m_Widget.World->DeleteEntity(m_Widget.ID);
|
||||
m_Widget = EntityWrapper::Invalid;
|
||||
@@ -137,17 +139,15 @@ void EditorSystem::setWidgetMode(EditorGUI::WidgetMode mode)
|
||||
|
||||
switch (mode) {
|
||||
case EditorGUI::WidgetMode::Translate:
|
||||
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetTranslate.xml");
|
||||
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetTranslate.xml");
|
||||
break;
|
||||
case EditorGUI::WidgetMode::Rotate:
|
||||
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetRotate.xml");
|
||||
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetRotate.xml");
|
||||
break;
|
||||
case EditorGUI::WidgetMode::Scale:
|
||||
m_Widget = importEntity(EntityWrapper(m_World, EntityID_Invalid), "Schema/Entities/EditorWidgetScale.xml");
|
||||
m_Widget = importEntity(EntityWrapper(m_EditorWorld, EntityID_Invalid), "Schema/Entities/EditorWidgetScale.xml");
|
||||
break;
|
||||
}
|
||||
|
||||
m_Widget["Transform"]["Position"] = Transform::AbsolutePosition(m_CurrentSelection.World, m_CurrentSelection.ID);
|
||||
|
||||
m_WidgetMode = mode;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user