123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System.Collections.Generic;
- using System.IO;
- namespace COM3D2.MeidoPhotoStudio.Plugin
- {
- public class PropManagerSerializer : Serializer<PropManager>
- {
- private const short version = 1;
- private static SimpleSerializer<DragPointPropDTO> DragPointDtoSerializer
- => Serialization.GetSimple<DragPointPropDTO>();
- public override void Serialize(PropManager manager, BinaryWriter writer)
- {
- writer.Write(PropManager.header);
- writer.WriteVersion(version);
- List<DragPointProp> propList = GetPropList(manager);
- writer.Write(propList.Count);
- foreach (var prop in propList) DragPointDtoSerializer.Serialize(new DragPointPropDTO(prop), writer);
- }
- public override void Deserialize(PropManager manager, BinaryReader reader, SceneMetadata metadata)
- {
- _ = reader.ReadVersion();
- manager.DeleteAllProps();
- List<DragPointProp> propList = GetPropList(manager);
- var propCount = reader.ReadInt32();
- var propIndex = 0;
- for (var i = 0; i < propCount; i++)
- {
- var dragPointPropDto = DragPointDtoSerializer.Deserialize(reader, metadata);
- if (!manager.AddFromPropInfo(dragPointPropDto.PropInfo)) continue;
- Apply(manager, propList[propIndex], dragPointPropDto);
- propIndex++;
- }
- }
- private static void Apply(PropManager manager, DragPointProp prop, DragPointPropDTO dto)
- {
- var (transformDto, attachPointInfo, shadowCasting) = dto;
- prop.ShadowCasting = shadowCasting;
- var transform = prop.MyObject;
- if (attachPointInfo.AttachPoint != AttachPoint.None)
- {
- manager.AttachProp(prop, attachPointInfo.AttachPoint, attachPointInfo.MaidIndex);
- transform.localPosition = transformDto.LocalPosition;
- transform.localRotation = transformDto.LocalRotation;
- }
- transform.position = transformDto.Position;
- transform.rotation = transformDto.Rotation;
- transform.localScale = transformDto.LocalScale;
- }
- private static List<DragPointProp> GetPropList(PropManager manager)
- => Utility.GetFieldValue<PropManager, List<DragPointProp>>(manager, "propList");
- }
- }
|