This commit is contained in:
Martin Felis 2025-04-11 13:08:19 +02:00
parent f6f7e92cea
commit 89fedce539
4 changed files with 23 additions and 54 deletions

View File

@ -45,8 +45,6 @@ set(ThirdPartyIncludeDeps
# Shared code by main executable and tests # Shared code by main executable and tests
add_library(AnimTestbedCode OBJECT add_library(AnimTestbedCode OBJECT
src/SyncTrack.cc
src/SyncTrack.h
src/ozzutils.cc src/ozzutils.cc
src/AnimGraph/AnimGraphNodes.cc src/AnimGraph/AnimGraphNodes.cc
src/AnimGraph/AnimGraphNodes.h src/AnimGraph/AnimGraphNodes.h
@ -59,7 +57,9 @@ add_library(AnimTestbedCode OBJECT
src/AnimGraph/AnimNode.cc src/AnimGraph/AnimNode.cc
src/AnimGraph/AnimNode.h src/AnimGraph/AnimNode.h
src/AnimGraph/AnimGraphResource.cc src/AnimGraph/AnimGraphResource.cc
src/AnimGraph/AnimGraphResource.h) src/AnimGraph/AnimGraphResource.h
src/AnimGraph/SyncTrack.cc
src/AnimGraph/SyncTrack.h)
target_include_directories( target_include_directories(
AnimTestbedCode AnimTestbedCode

View File

@ -155,21 +155,7 @@ void SyncTrackEditor(SyncTrack* sync_track) {
} }
ImGui::Text("Marker:"); ImGui::Text("Marker:");
for (int i = 0; i < sync_track->m_num_intervals; i++) { ImGui::Text("TODO");
ImGui::Text("%2d:", i);
ImGui::SameLine();
std::ostringstream marker_stream;
marker_stream << i;
ImGui::SliderFloat(
marker_stream.str().c_str(),
&sync_track->m_sync_markers[i],
0.f,
1.f);
}
if (ImGui::Button("Update Intervals")) {
sync_track->CalcIntervals();
}
} }
void SkinnedMeshWidget(SkinnedMesh* skinned_mesh) { void SkinnedMeshWidget(SkinnedMesh* skinned_mesh) {

View File

@ -9,34 +9,9 @@
#include "3rdparty/json/json.hpp" #include "3rdparty/json/json.hpp"
inline void to_json(nlohmann::json& j, const SyncTrack& syncTrack) { inline void to_json(
j["type"] = "SyncTrack"; nlohmann::json& j,
j["duration"] = syncTrack.m_duration; const SkinnedMeshResource& skinnedMeshResource) {
for (int i = 0; i < syncTrack.m_num_intervals; i++) {
j["markers"][i] = syncTrack.m_sync_markers[i];
}
}
inline void from_json(const nlohmann::json& j, SyncTrack& syncTrack) {
if (!j.contains("type") || j["type"] != "SyncTrack") {
std::cerr << "Unable to parse SyncTrack: wrong json type!" << std::endl;
return;
}
syncTrack.m_duration = j["duration"];
syncTrack.m_num_intervals = j["markers"].size();
if (syncTrack.m_num_intervals > cSyncTrackMaxIntervals) {
std::cerr << "Invalid number of sync intervals: found " << syncTrack.m_num_intervals << " maximum is " << cSyncTrackMaxIntervals << "." << std::endl;
syncTrack = SyncTrack();
}
for (int i = 0; i < syncTrack.m_num_intervals; i++) {
syncTrack.m_sync_markers[i] = j["markers"].at(i);
}
}
inline void to_json(nlohmann::json& j, const SkinnedMeshResource& skinnedMeshResource) {
j["type"] = "SkinnedMeshResource"; j["type"] = "SkinnedMeshResource";
j["skeleton"]["file"] = skinnedMeshResource.m_skeleton_file; j["skeleton"]["file"] = skinnedMeshResource.m_skeleton_file;
for (int i = 0; i < skinnedMeshResource.m_animation_files.size(); i++) { for (int i = 0; i < skinnedMeshResource.m_animation_files.size(); i++) {
@ -45,15 +20,18 @@ inline void to_json(nlohmann::json& j, const SkinnedMeshResource& skinnedMeshRes
} }
} }
inline void from_json(const nlohmann::json& j, SkinnedMeshResource& skinnedMeshResource) { inline void from_json(
const nlohmann::json& j,
SkinnedMeshResource& skinnedMeshResource) {
if (!j.contains("type") || j["type"] != "SkinnedMeshResource") { if (!j.contains("type") || j["type"] != "SkinnedMeshResource") {
std::cerr << "Unable to parse SkinnedMeshResource: wrong json type!" << std::endl; std::cerr << "Unable to parse SkinnedMeshResource: wrong json type!"
<< std::endl;
return; return;
} }
if (!j.contains("skeleton") || !j["skeleton"].contains("file")) { if (!j.contains("skeleton") || !j["skeleton"].contains("file")) {
std::cerr << "Unable to parse SkinnedMeshResource: no skeleton file found!" << std::endl; std::cerr << "Unable to parse SkinnedMeshResource: no skeleton file found!"
<< std::endl;
} }
skinnedMeshResource.m_skeleton_file = j["skeleton"]["file"]; skinnedMeshResource.m_skeleton_file = j["skeleton"]["file"];
@ -62,13 +40,18 @@ inline void from_json(const nlohmann::json& j, SkinnedMeshResource& skinnedMeshR
int num_animations = j["animations"].size(); int num_animations = j["animations"].size();
for (int i = 0; i < num_animations; i++) { for (int i = 0; i < num_animations; i++) {
if (!j["animations"][i].contains("file") || !j["animations"][i].contains("sync_track")) { if (!j["animations"][i].contains("file")
std::cerr << "Unable to parse SkinnedMeshResource: invalid animation definition" << std::endl; || !j["animations"][i].contains("sync_track")) {
std::cerr << "Unable to parse SkinnedMeshResource: invalid animation "
"definition"
<< std::endl;
return; return;
} }
skinnedMeshResource.m_animation_files.push_back(j["animations"][i]["file"]); skinnedMeshResource.m_animation_files.push_back(
skinnedMeshResource.m_sync_tracks.push_back(j["animations"][i]["sync_track"].get<SyncTrack>()); j["animations"][i]["file"]);
skinnedMeshResource.m_sync_tracks.push_back(
j["animations"][i]["sync_track"].get<SyncTrack>());
} }
} }
} }