Refactor raw data ReadSttream and WriteStream to have easier to use API with more features

This commit is contained in:
Wojciech Figat
2022-10-12 11:22:20 +02:00
parent 09e50bb0e1
commit ff34c7cc9b
18 changed files with 448 additions and 277 deletions

View File

@@ -148,7 +148,7 @@ Asset::LoadResult SceneAnimation::load()
break;
case Track::Types::PostProcessMaterial:
{
const auto trackData = stream.Read<PostProcessMaterialTrack::Data>();
const auto trackData = stream.Move<PostProcessMaterialTrack::Data>();
track.Data = trackData;
track.Asset = Content::LoadAsync<MaterialBase>(trackData->AssetID);
const auto trackRuntime = _runtimeData.Move<PostProcessMaterialTrack::Runtime>();
@@ -157,12 +157,12 @@ Asset::LoadResult SceneAnimation::load()
{
// [Deprecated on 03.09.2021 expires on 03.09.2023]
trackRuntime->Count = 1;
trackRuntime->Media = stream.Read<Media>();
trackRuntime->Media = stream.Move<Media>();
}
else
{
stream.ReadInt32(&trackRuntime->Count);
trackRuntime->Media = stream.Read<Media>(trackRuntime->Count);
trackRuntime->Media = stream.Move<Media>(trackRuntime->Count);
}
if (trackData->AssetID.IsValid() && !track.Asset)
{
@@ -173,7 +173,7 @@ Asset::LoadResult SceneAnimation::load()
}
case Track::Types::NestedSceneAnimation:
{
const auto trackData = stream.Read<NestedSceneAnimationTrack::Data>();
const auto trackData = stream.Move<NestedSceneAnimationTrack::Data>();
track.Data = trackData;
track.Asset = Content::LoadAsync<SceneAnimation>(trackData->AssetID);
const auto trackRuntime = _runtimeData.Move<NestedSceneAnimationTrack::Runtime>();
@@ -189,7 +189,7 @@ Asset::LoadResult SceneAnimation::load()
}
case Track::Types::ScreenFade:
{
const auto trackData = stream.Read<ScreenFadeTrack::Data>();
const auto trackData = stream.Move<ScreenFadeTrack::Data>();
track.Data = trackData;
if (trackData->GradientStopsCount < 0)
{
@@ -198,12 +198,12 @@ Asset::LoadResult SceneAnimation::load()
}
const auto trackRuntime = _runtimeData.Move<ScreenFadeTrack::Runtime>();
track.RuntimeData = trackRuntime;
trackRuntime->GradientStops = stream.Read<ScreenFadeTrack::GradientStop>(trackData->GradientStopsCount);
trackRuntime->GradientStops = stream.Move<ScreenFadeTrack::GradientStop>(trackData->GradientStopsCount);
break;
}
case Track::Types::Audio:
{
const auto trackData = stream.Read<AudioTrack::Data>();
const auto trackData = stream.Move<AudioTrack::Data>();
track.Data = trackData;
track.Asset = Content::LoadAsync<AudioClip>(trackData->AssetID);
const auto trackRuntime = _runtimeData.Move<AudioTrack::Runtime>();
@@ -222,18 +222,18 @@ Asset::LoadResult SceneAnimation::load()
else
{
stream.ReadInt32(&trackRuntime->Count);
trackRuntime->Media = stream.Read<AudioTrack::Media>(trackRuntime->Count);
trackRuntime->Media = stream.Move<AudioTrack::Media>(trackRuntime->Count);
}
break;
}
case Track::Types::AudioVolume:
{
const auto trackData = stream.Read<AudioVolumeTrack::Data>();
const auto trackData = stream.Move<AudioVolumeTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<AudioVolumeTrack::Runtime>();
track.RuntimeData = trackRuntime;
trackRuntime->KeyframesCount = trackData->KeyframesCount;
trackRuntime->Keyframes = stream.Read<BezierCurveKeyframe<float>>(trackData->KeyframesCount);
trackRuntime->Keyframes = stream.Move<BezierCurveKeyframe<float>>(trackData->KeyframesCount);
if (track.ParentIndex != -1)
{
if (Tracks[track.ParentIndex].Type == Track::Types::Audio)
@@ -250,7 +250,7 @@ Asset::LoadResult SceneAnimation::load()
}
case Track::Types::Actor:
{
const auto trackData = stream.Read<ActorTrack::Data>();
const auto trackData = stream.Move<ActorTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<ActorTrack::Runtime>();
track.RuntimeData = trackRuntime;
@@ -259,7 +259,7 @@ Asset::LoadResult SceneAnimation::load()
}
case Track::Types::Script:
{
const auto trackData = stream.Read<ScriptTrack::Data>();
const auto trackData = stream.Move<ScriptTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<ScriptTrack::Runtime>();
track.RuntimeData = trackRuntime;
@@ -274,33 +274,33 @@ Asset::LoadResult SceneAnimation::load()
case Track::Types::KeyframesProperty:
case Track::Types::ObjectReferenceProperty:
{
const auto trackData = stream.Read<KeyframesPropertyTrack::Data>();
const auto trackData = stream.Move<KeyframesPropertyTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<KeyframesPropertyTrack::Runtime>();
track.RuntimeData = trackRuntime;
track.TrackStateIndex = TrackStatesCount++;
trackRuntime->PropertyName = stream.Read<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Read<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->PropertyName = stream.Move<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Move<char>(trackData->PropertyTypeNameLength + 1);
const int32 keyframesDataSize = trackData->KeyframesCount * (sizeof(float) + trackData->ValueSize);
trackRuntime->ValueSize = trackData->ValueSize;
trackRuntime->KeyframesCount = trackData->KeyframesCount;
trackRuntime->Keyframes = stream.Read(keyframesDataSize);
trackRuntime->Keyframes = stream.Move(keyframesDataSize);
needsParent = true;
break;
}
case Track::Types::CurveProperty:
{
const auto trackData = stream.Read<CurvePropertyTrack::Data>();
const auto trackData = stream.Move<CurvePropertyTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<CurvePropertyTrack::Runtime>();
track.RuntimeData = trackRuntime;
track.TrackStateIndex = TrackStatesCount++;
trackRuntime->PropertyName = stream.Read<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Read<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->PropertyName = stream.Move<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Move<char>(trackData->PropertyTypeNameLength + 1);
const int32 keyframesDataSize = trackData->KeyframesCount * (sizeof(float) + trackData->ValueSize * 3);
trackRuntime->ValueSize = trackData->ValueSize;
trackRuntime->KeyframesCount = trackData->KeyframesCount;
trackRuntime->Keyframes = stream.Read(keyframesDataSize);
trackRuntime->Keyframes = stream.Move(keyframesDataSize);
trackRuntime->DataType = CurvePropertyTrack::DataTypes::Unknown;
trackRuntime->ValueType = CurvePropertyTrack::DataTypes::Unknown;
if (StringUtils::Compare(trackRuntime->PropertyTypeName, "System.Single") == 0)
@@ -367,13 +367,13 @@ Asset::LoadResult SceneAnimation::load()
}
case Track::Types::StringProperty:
{
const auto trackData = stream.Read<StringPropertyTrack::Data>();
const auto trackData = stream.Move<StringPropertyTrack::Data>();
track.Data = trackData;
const auto trackRuntime = (StringPropertyTrack::Runtime*)_runtimeData.Move(sizeof(StringPropertyTrack::Runtime) + sizeof(void*) * 2 * trackData->KeyframesCount);
track.RuntimeData = trackRuntime;
track.TrackStateIndex = TrackStatesCount++;
trackRuntime->PropertyName = stream.Read<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Read<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->PropertyName = stream.Move<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Move<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->ValueSize = trackData->ValueSize;
trackRuntime->KeyframesCount = trackData->KeyframesCount;
const auto keyframesTimes = (float*)((byte*)trackRuntime + sizeof(StringPropertyTrack::Runtime));
@@ -383,7 +383,7 @@ Asset::LoadResult SceneAnimation::load()
{
stream.ReadFloat(&keyframesTimes[j]);
stream.ReadInt32(&keyframesLengths[j]);
keyframesValues[j] = stream.Read<Char>(keyframesLengths[j]);
keyframesValues[j] = stream.Move<Char>(keyframesLengths[j]);
}
needsParent = true;
break;
@@ -391,13 +391,13 @@ Asset::LoadResult SceneAnimation::load()
case Track::Types::StructProperty:
case Track::Types::ObjectProperty:
{
const auto trackData = stream.Read<StructPropertyTrack::Data>();
const auto trackData = stream.Move<StructPropertyTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<StructPropertyTrack::Runtime>();
track.RuntimeData = trackRuntime;
track.TrackStateIndex = TrackStatesCount++;
trackRuntime->PropertyName = stream.Read<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Read<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->PropertyName = stream.Move<char>(trackData->PropertyNameLength + 1);
trackRuntime->PropertyTypeName = stream.Move<char>(trackData->PropertyTypeNameLength + 1);
trackRuntime->ValueSize = trackData->ValueSize;
needsParent = true;
break;
@@ -411,22 +411,22 @@ Asset::LoadResult SceneAnimation::load()
stream.ReadInt32(&trackRuntime->EventParamsCount);
stream.ReadInt32(&trackRuntime->EventsCount);
stream.ReadInt32(&tmp);
trackRuntime->EventName = stream.Read<char>(tmp + 1);
trackRuntime->EventName = stream.Move<char>(tmp + 1);
trackRuntime->EventParamsSize = 0;
for (int j = 0; j < trackRuntime->EventParamsCount; j++)
{
stream.ReadInt32(&trackRuntime->EventParamSizes[j]);
trackRuntime->EventParamsSize += trackRuntime->EventParamSizes[j];
stream.ReadInt32(&tmp);
trackRuntime->EventParamTypes[j] = stream.Read<char>(tmp + 1);
trackRuntime->EventParamTypes[j] = stream.Move<char>(tmp + 1);
}
trackRuntime->DataBegin = stream.Read<byte>(trackRuntime->EventsCount * (sizeof(float) + trackRuntime->EventParamsSize));
trackRuntime->DataBegin = stream.Move<byte>(trackRuntime->EventsCount * (sizeof(float) + trackRuntime->EventParamsSize));
needsParent = true;
break;
}
case Track::Types::CameraCut:
{
const auto trackData = stream.Read<CameraCutTrack::Data>();
const auto trackData = stream.Move<CameraCutTrack::Data>();
track.Data = trackData;
const auto trackRuntime = _runtimeData.Move<CameraCutTrack::Runtime>();
track.RuntimeData = trackRuntime;
@@ -435,12 +435,12 @@ Asset::LoadResult SceneAnimation::load()
{
// [Deprecated on 03.09.2021 expires on 03.09.2023]
trackRuntime->Count = 1;
trackRuntime->Media = stream.Read<Media>();
trackRuntime->Media = stream.Move<Media>();
}
else
{
stream.ReadInt32(&trackRuntime->Count);
trackRuntime->Media = stream.Read<Media>(trackRuntime->Count);
trackRuntime->Media = stream.Move<Media>(trackRuntime->Count);
}
break;
}