Merge remote-tracking branch 'origin/main' into FontIntegration
This commit is contained in:
commit
b6bae850bf
|
@ -345,10 +345,18 @@ namespace SHADE
|
||||||
void SHHierarchyPanel::ParentSelectedEntities(EntityID parentEID, std::vector<EntityID> const& entities) const noexcept
|
void SHHierarchyPanel::ParentSelectedEntities(EntityID parentEID, std::vector<EntityID> const& entities) const noexcept
|
||||||
{
|
{
|
||||||
auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph();
|
auto const& sceneGraph = SHSceneManager::GetCurrentSceneGraph();
|
||||||
|
|
||||||
|
std::vector<EntityID> entitiesToParent{};
|
||||||
|
std::ranges::copy_if(entities, std::back_inserter(entitiesToParent), [&sceneGraph](EntityID const& eid)
|
||||||
|
{
|
||||||
|
if (sceneGraph.GetParent(eid)->GetEntityID() == MAX_EID)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
});
|
||||||
//auto const editor = SHSystemManager::GetSystem<SHEditor>();
|
//auto const editor = SHSystemManager::GetSystem<SHEditor>();
|
||||||
SHEntityParentCommand::EntityParentData entityParentData;
|
SHEntityParentCommand::EntityParentData entityParentData;
|
||||||
std::vector<EntityID> parentedEIDS;
|
std::vector<EntityID> parentedEIDS;
|
||||||
for (auto const& eid : entities)
|
for (auto const& eid : entitiesToParent)
|
||||||
{
|
{
|
||||||
if(eid == parentEID)
|
if(eid == parentEID)
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -68,10 +68,10 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (!component)
|
if (!component)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const auto componentType = rttr::type::get<T>();
|
const auto componentType = rttr::type::get<T>();
|
||||||
ImGui::PushID(SHFamilyID<SHComponent>::GetID<T>());
|
ImGui::PushID(SHFamilyID<SHComponent>::GetID<T>());
|
||||||
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
||||||
ImGui::PopID();
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (ImGui::CollapsingHeader(componentType.get_name().data()))
|
if (ImGui::CollapsingHeader(componentType.get_name().data()))
|
||||||
{
|
{
|
||||||
|
@ -216,6 +216,8 @@ namespace SHADE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else DrawContextMenu(component);
|
else DrawContextMenu(component);
|
||||||
|
ImGui::PopID();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -223,7 +225,8 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (!component)
|
if (!component)
|
||||||
return;
|
return;
|
||||||
ImGui::PushID(component);
|
ImGui::PushID(SHFamilyID<SHComponent>::GetID<SHColliderComponent>());
|
||||||
|
|
||||||
const auto componentType = rttr::type::get(*component);
|
const auto componentType = rttr::type::get(*component);
|
||||||
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -330,6 +333,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (!component)
|
if (!component)
|
||||||
return;
|
return;
|
||||||
|
ImGui::PushID(SHFamilyID<SHComponent>::GetID<SHLightComponent>());
|
||||||
const auto componentType = rttr::type::get(*component);
|
const auto componentType = rttr::type::get(*component);
|
||||||
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -353,6 +357,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
DrawContextMenu(component);
|
DrawContextMenu(component);
|
||||||
}
|
}
|
||||||
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -360,6 +365,7 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (!component)
|
if (!component)
|
||||||
return;
|
return;
|
||||||
|
ImGui::PushID(SHFamilyID<SHComponent>::GetID<SHRenderable>());
|
||||||
const auto componentType = rttr::type::get(*component);
|
const auto componentType = rttr::type::get(*component);
|
||||||
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
SHEditorWidgets::CheckBox("##IsActive", [component]() {return component->isActive; }, [component](bool const& active) {component->isActive = active; }, "Is Component Active");
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
|
@ -397,5 +403,6 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
DrawContextMenu(component);
|
DrawContextMenu(component);
|
||||||
}
|
}
|
||||||
|
ImGui::PopID();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,14 +220,21 @@ namespace SHADE
|
||||||
const auto editor = SHSystemManager::GetSystem<SHEditor>();
|
const auto editor = SHSystemManager::GetSystem<SHEditor>();
|
||||||
ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY);
|
ImGui::BeginDisabled(editor->editorState == SHEditor::State::PLAY);
|
||||||
if(ImGui::SmallButton(ICON_MD_PLAY_ARROW))
|
if(ImGui::SmallButton(ICON_MD_PLAY_ARROW))
|
||||||
|
{
|
||||||
|
if(editor->editorState == SHEditor::State::STOP)
|
||||||
{
|
{
|
||||||
if (editor->SaveScene())
|
if (editor->SaveScene())
|
||||||
{
|
{
|
||||||
editor->Play();
|
editor->Play();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
editor->Play();
|
||||||
|
}
|
||||||
|
}
|
||||||
ImGui::EndDisabled();
|
ImGui::EndDisabled();
|
||||||
ImGui::BeginDisabled(editor->editorState == SHEditor::State::PAUSE);
|
ImGui::BeginDisabled(editor->editorState == SHEditor::State::STOP || editor->editorState == SHEditor::State::PAUSE);
|
||||||
if(ImGui::SmallButton(ICON_MD_PAUSE))
|
if(ImGui::SmallButton(ICON_MD_PAUSE))
|
||||||
{
|
{
|
||||||
editor->Pause();
|
editor->Pause();
|
||||||
|
|
|
@ -85,7 +85,7 @@ namespace SHADE
|
||||||
|
|
||||||
shouldUpdateCamArm = ImGui::IsWindowHovered() && ImGui::IsKeyDown(ImGuiKey_LeftAlt) && ImGui::IsMouseDown(ImGuiMouseButton_Left);
|
shouldUpdateCamArm = ImGui::IsWindowHovered() && ImGui::IsKeyDown(ImGuiKey_LeftAlt) && ImGui::IsMouseDown(ImGuiMouseButton_Left);
|
||||||
|
|
||||||
if (editor->editorState != SHEditor::State::PLAY && ImGui::IsWindowFocused() && !ImGui::IsMouseDown(ImGuiMouseButton_Right))
|
if (editor->editorState != SHEditor::State::PLAY && !ImGui::IsAnyItemActive() && !ImGui::IsMouseDown(ImGuiMouseButton_Right))
|
||||||
{
|
{
|
||||||
if (ImGui::IsKeyReleased(ImGuiKey_W))
|
if (ImGui::IsKeyReleased(ImGuiKey_W))
|
||||||
{
|
{
|
||||||
|
@ -151,7 +151,7 @@ namespace SHADE
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
ImGui::BeginTooltip();
|
||||||
ImGui::Text("Translate [Q]");
|
ImGui::Text("Translate [W]");
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
if (isTranslate)
|
if (isTranslate)
|
||||||
|
@ -169,7 +169,7 @@ namespace SHADE
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
ImGui::BeginTooltip();
|
||||||
ImGui::Text("Rotate [W]");
|
ImGui::Text("Rotate [E]");
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
if (isRotate)
|
if (isRotate)
|
||||||
|
@ -187,7 +187,7 @@ namespace SHADE
|
||||||
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
if (ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled))
|
||||||
{
|
{
|
||||||
ImGui::BeginTooltip();
|
ImGui::BeginTooltip();
|
||||||
ImGui::Text("Scale [E]");
|
ImGui::Text("Scale [R]");
|
||||||
ImGui::EndTooltip();
|
ImGui::EndTooltip();
|
||||||
}
|
}
|
||||||
if (isScale)
|
if (isScale)
|
||||||
|
|
|
@ -179,7 +179,9 @@ namespace SHADE
|
||||||
{
|
{
|
||||||
if (ComponentType* component = SHComponentManager::GetComponent_s<ComponentType>(eid))
|
if (ComponentType* component = SHComponentManager::GetComponent_s<ComponentType>(eid))
|
||||||
{
|
{
|
||||||
componentsNode[rttr::type::get<ComponentType>().get_name().data()] = YAML::convert<ComponentType>::encode(*component);
|
auto componentNode = YAML::convert<ComponentType>::encode(*component);
|
||||||
|
componentNode[IsActive.data()] = component->isActive;
|
||||||
|
componentsNode[rttr::type::get<ComponentType>().get_name().data()] = componentNode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
|
|
||||||
namespace SHADE
|
namespace SHADE
|
||||||
{
|
{
|
||||||
|
static constexpr std::string_view IsActive = "IsActive";
|
||||||
|
|
||||||
using AssetQueue = std::unordered_map<AssetID, AssetType>;
|
using AssetQueue = std::unordered_map<AssetID, AssetType>;
|
||||||
struct SHSerializationHelper
|
struct SHSerializationHelper
|
||||||
{
|
{
|
||||||
|
@ -118,9 +120,9 @@ namespace SHADE
|
||||||
YAML::Node node{};
|
YAML::Node node{};
|
||||||
if (!component)
|
if (!component)
|
||||||
return node;
|
return node;
|
||||||
|
|
||||||
auto componentType = rttr::type::get<ComponentType>();
|
auto componentType = rttr::type::get<ComponentType>();
|
||||||
node = RTTRToNode(*component);
|
node = RTTRToNode(*component);
|
||||||
|
node[IsActive.data()] = component->isActive;
|
||||||
|
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
@ -198,6 +200,9 @@ namespace SHADE
|
||||||
auto componentNode = componentsNode[rttrType.get_name().data()];
|
auto componentNode = componentsNode[rttrType.get_name().data()];
|
||||||
if (!componentNode.IsDefined())
|
if (!componentNode.IsDefined())
|
||||||
return;
|
return;
|
||||||
|
if(componentNode[IsActive.data()].IsDefined())
|
||||||
|
component->isActive = componentNode[IsActive.data()].as<bool>();
|
||||||
|
|
||||||
auto properties = rttrType.get_properties();
|
auto properties = rttrType.get_properties();
|
||||||
for (auto const& prop : properties)
|
for (auto const& prop : properties)
|
||||||
{
|
{
|
||||||
|
@ -227,8 +232,10 @@ namespace SHADE
|
||||||
auto component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
auto component = SHComponentManager::GetComponent_s<ComponentType>(eid);
|
||||||
if (componentsNode.IsNull() && !component)
|
if (componentsNode.IsNull() && !component)
|
||||||
return;
|
return;
|
||||||
|
auto componentNode = GetComponentNode<ComponentType>(componentsNode, eid);
|
||||||
YAML::convert<ComponentType>::decode(GetComponentNode<ComponentType>(componentsNode, eid), *component);
|
if (componentNode[IsActive.data()].IsDefined())
|
||||||
|
component->isActive = componentNode[IsActive.data()].as<bool>();
|
||||||
|
YAML::convert<ComponentType>::decode(componentNode, *component);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ComponentType, std::enable_if_t<std::is_base_of_v<SHComponent, ComponentType>, bool> = true>
|
template <typename ComponentType, std::enable_if_t<std::is_base_of_v<SHComponent, ComponentType>, bool> = true>
|
||||||
|
|
|
@ -44,13 +44,6 @@ namespace SHADE
|
||||||
SHLOG_FLOOR()
|
SHLOG_FLOOR()
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
void SHLog::Trace(const std::string& msg) noexcept
|
|
||||||
{
|
|
||||||
SHLOG_TRACE(msg)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void SHLog_Info(const char* msg) noexcept
|
void SHLog_Info(const char* msg) noexcept
|
||||||
{
|
{
|
||||||
SHLOG_INFO(msg)
|
SHLOG_INFO(msg)
|
||||||
|
|
|
@ -323,34 +323,6 @@ namespace SHADE
|
||||||
SHLOG_FLOOR()
|
SHLOG_FLOOR()
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _DEBUG
|
|
||||||
void SHLogger::LogTrace(const std::string& msg) noexcept
|
|
||||||
{
|
|
||||||
SHLOG_TRACE(msg)
|
|
||||||
}
|
|
||||||
|
|
||||||
void SHLogger::LogVerboseTrace(const std::string& msg, const std::source_location& src) noexcept
|
|
||||||
{
|
|
||||||
const bool SHOW_SRC_FILE = configFlags & (1U << 3);
|
|
||||||
const bool SHOW_SRC_LINE = configFlags & (1U << 4);
|
|
||||||
|
|
||||||
std::stringstream ss;
|
|
||||||
ss << "[";
|
|
||||||
if (SHOW_SRC_FILE)
|
|
||||||
{
|
|
||||||
ss << std::filesystem::path(src.file_name()).filename().string() << ", ";
|
|
||||||
if (SHOW_SRC_LINE)
|
|
||||||
{
|
|
||||||
ss << src.line() << ", ";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ss << src.function_name() << "] " << msg;
|
|
||||||
|
|
||||||
SHLOG_TRACE(ss.str())
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
/* Private Function Member Definitions */
|
/* Private Function Member Definitions */
|
||||||
/*-----------------------------------------------------------------------------------*/
|
/*-----------------------------------------------------------------------------------*/
|
||||||
|
|
Loading…
Reference in New Issue