Implemented Animation Clip asset and animation controller #410
|
@ -52,6 +52,13 @@ namespace SHADE
|
|||
">",
|
||||
">="
|
||||
};
|
||||
typesList =
|
||||
{
|
||||
"Boolean",
|
||||
"Trigger",
|
||||
"Float",
|
||||
"Integer"
|
||||
};
|
||||
|
||||
// Set up sample animation controller for testing
|
||||
SHAnimationController controller;
|
||||
|
@ -101,7 +108,7 @@ namespace SHADE
|
|||
ImGui::TableNextRow();
|
||||
{
|
||||
ImGui::TableSetColumnIndex(0);
|
||||
ImGui::Text("Parameters");
|
||||
drawParamsPanel();
|
||||
ImGui::TableSetColumnIndex(1);
|
||||
drawNodeEditor();
|
||||
ImGui::TableSetColumnIndex(2);
|
||||
|
@ -147,6 +154,79 @@ namespace SHADE
|
|||
}
|
||||
}
|
||||
|
||||
void SHAnimationControllerEditor::drawParamsPanel()
|
||||
{
|
||||
// Add Parameter Button
|
||||
if (ImGui::BeginCombo("##Type", "Add Parameter", ImGuiComboFlags_None))
|
||||
{
|
||||
// All other options
|
||||
for (int i = 0; i < static_cast<int>(typesList.size()); ++i)
|
||||
{
|
||||
if (ImGui::Selectable(typesList[i].c_str()))
|
||||
{
|
||||
controllerData->Params.emplace("New", static_cast<SHAnimationController::AnimParam::Type>(i));
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
int paramId = 0;
|
||||
for (auto param : controllerData->Params)
|
||||
{
|
||||
ImGui::PushID(paramId++);
|
||||
if (SHEditorWidgets::InputText
|
||||
(
|
||||
"",
|
||||
[&]() { return param.first; },
|
||||
[&](const std::string& val)
|
||||
{
|
||||
// Remove from previous
|
||||
const SHAnimationController::AnimParam::Type TYPE = param.second;
|
||||
controllerData->Params.erase(param.first);
|
||||
// Put into the new
|
||||
controllerData->Params[val] = TYPE;
|
||||
}
|
||||
))
|
||||
{
|
||||
ImGui::PopID();
|
||||
break; // Map was modified
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginCombo("##Type", typesList[static_cast<int>(param.second)].c_str(), ImGuiComboFlags_None))
|
||||
{
|
||||
// All other options
|
||||
for (int i = 0; i < static_cast<int>(typesList.size()); ++i)
|
||||
{
|
||||
const bool IS_SELECTED = static_cast<int>(param.second) == i;
|
||||
|
||||
if (ImGui::Selectable(typesList[i].c_str(), IS_SELECTED))
|
||||
{
|
||||
SHCommandManager::PerformCommand
|
||||
(
|
||||
std::reinterpret_pointer_cast<SHBaseCommand>
|
||||
(
|
||||
std::make_shared<SHCommand<SHAnimationController::AnimParam::Type>>
|
||||
(
|
||||
param.second,
|
||||
static_cast<SHAnimationController::AnimParam::Type>(i),
|
||||
[&](SHAnimationController::AnimParam::Type val) { controllerData->Params[param.first] = val; }
|
||||
)
|
||||
),
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
if (IS_SELECTED)
|
||||
{
|
||||
ImGui::SetItemDefaultFocus();
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::PopID();
|
||||
}
|
||||
}
|
||||
|
||||
void SHAnimationControllerEditor::drawNodeEditor()
|
||||
{
|
||||
static constexpr float NODE_WIDTH = 80.0f;
|
||||
|
@ -324,7 +404,6 @@ namespace SHADE
|
|||
const bool IS_SELECTED = param.first == linkData.ParamName;
|
||||
if (ImGui::Selectable(param.first.c_str(), IS_SELECTED))
|
||||
{
|
||||
linkData.ParamName = param.first;
|
||||
SHCommandManager::PerformCommand
|
||||
(
|
||||
std::reinterpret_pointer_cast<SHBaseCommand>
|
||||
|
|
|
@ -114,11 +114,13 @@ namespace SHADE
|
|||
std::optional<AnimControllerData> controllerData;
|
||||
// Persistent Cached Data
|
||||
std::vector<std::string> conditionsList;
|
||||
std::vector<std::string> typesList;
|
||||
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
/* Helper Functions */
|
||||
/*---------------------------------------------------------------------------------*/
|
||||
void drawActiveMenuBar();
|
||||
void drawParamsPanel();
|
||||
void drawNodeEditor();
|
||||
void drawPropertiesPanel();
|
||||
NodeAttributeIndex getExtraInputAttrib(uint32_t nodeIndex);
|
||||
|
|
Loading…
Reference in New Issue