Add support for PrefabObject tracks and automated animation instancing with UsePrefabObjects enabled

This commit is contained in:
Wojtek Figat
2021-12-11 17:27:22 +01:00
parent 77e1ec530b
commit a9aaed6f33
6 changed files with 91 additions and 3 deletions

View File

@@ -1124,6 +1124,7 @@ void SceneAnimationPlayer::Serialize(SerializeStream& stream, const void* otherO
SERIALIZE(RandomStartTime);
SERIALIZE(RestoreStateOnStop);
SERIALIZE(UpdateMode);
SERIALIZE(UsePrefabObjects);
}
void SceneAnimationPlayer::Deserialize(DeserializeStream& stream, ISerializeModifier* modifier)
@@ -1140,6 +1141,30 @@ void SceneAnimationPlayer::Deserialize(DeserializeStream& stream, ISerializeModi
DESERIALIZE(RandomStartTime);
DESERIALIZE(RestoreStateOnStop);
DESERIALIZE(UpdateMode);
DESERIALIZE(UsePrefabObjects);
if (UsePrefabObjects && Animation && !Animation->WaitForLoaded())
{
// When loading from prefab automatically map objects from prefab instance into animation tracks with object references
for (auto& track : Animation->Tracks)
{
if (track.Disabled || !(track.Flag & SceneAnimation::Track::Flags::PrefabObject))
continue;
switch (track.Type)
{
case SceneAnimation::Track::Types::Actor:
case SceneAnimation::Track::Types::Script:
case SceneAnimation::Track::Types::CameraCut:
{
const auto trackData = track.GetData<SceneAnimation::ObjectTrack::Data>();
Guid id;
if (modifier->IdsMapping.TryGet(trackData->ID, id))
_objectsMapping[trackData->ID] = id;
break;
}
}
}
}
}
void SceneAnimationPlayer::Collect(RenderContext& renderContext)