using Unity.Networking.Transport; using Unity.NetCode; using Unity.Mathematics; public struct TeleporterSnapshotData : ISnapshotData { public uint tick; private int TeleporterPresentationDataeffectTick; private int TranslationValueX; private int TranslationValueY; private int TranslationValueZ; private int Child0TranslationValueX; private int Child0TranslationValueY; private int Child0TranslationValueZ; private int Child1TranslationValueX; private int Child1TranslationValueY; private int Child1TranslationValueZ; uint changeMask0; public uint Tick => tick; public int GetTeleporterPresentationDataeffectTick(GhostDeserializerState deserializerState) { return (int)TeleporterPresentationDataeffectTick; } public int GetTeleporterPresentationDataeffectTick() { return (int)TeleporterPresentationDataeffectTick; } public void SetTeleporterPresentationDataeffectTick(int val, GhostSerializerState serializerState) { TeleporterPresentationDataeffectTick = (int)val; } public void SetTeleporterPresentationDataeffectTick(int val) { TeleporterPresentationDataeffectTick = (int)val; } public float3 GetTranslationValue(GhostDeserializerState deserializerState) { return GetTranslationValue(); } public float3 GetTranslationValue() { return new float3(TranslationValueX * 0.01f, TranslationValueY * 0.01f, TranslationValueZ * 0.01f); } public void SetTranslationValue(float3 val, GhostSerializerState serializerState) { SetTranslationValue(val); } public void SetTranslationValue(float3 val) { TranslationValueX = (int)(val.x * 100); TranslationValueY = (int)(val.y * 100); TranslationValueZ = (int)(val.z * 100); } public float3 GetChild0TranslationValue(GhostDeserializerState deserializerState) { return GetChild0TranslationValue(); } public float3 GetChild0TranslationValue() { return new float3(Child0TranslationValueX * 0.01f, Child0TranslationValueY * 0.01f, Child0TranslationValueZ * 0.01f); } public void SetChild0TranslationValue(float3 val, GhostSerializerState serializerState) { SetChild0TranslationValue(val); } public void SetChild0TranslationValue(float3 val) { Child0TranslationValueX = (int)(val.x * 100); Child0TranslationValueY = (int)(val.y * 100); Child0TranslationValueZ = (int)(val.z * 100); } public float3 GetChild1TranslationValue(GhostDeserializerState deserializerState) { return GetChild1TranslationValue(); } public float3 GetChild1TranslationValue() { return new float3(Child1TranslationValueX * 0.01f, Child1TranslationValueY * 0.01f, Child1TranslationValueZ * 0.01f); } public void SetChild1TranslationValue(float3 val, GhostSerializerState serializerState) { SetChild1TranslationValue(val); } public void SetChild1TranslationValue(float3 val) { Child1TranslationValueX = (int)(val.x * 100); Child1TranslationValueY = (int)(val.y * 100); Child1TranslationValueZ = (int)(val.z * 100); } public void PredictDelta(uint tick, ref TeleporterSnapshotData baseline1, ref TeleporterSnapshotData baseline2) { var predictor = new GhostDeltaPredictor(tick, this.tick, baseline1.tick, baseline2.tick); TeleporterPresentationDataeffectTick = predictor.PredictInt(TeleporterPresentationDataeffectTick, baseline1.TeleporterPresentationDataeffectTick, baseline2.TeleporterPresentationDataeffectTick); TranslationValueX = predictor.PredictInt(TranslationValueX, baseline1.TranslationValueX, baseline2.TranslationValueX); TranslationValueY = predictor.PredictInt(TranslationValueY, baseline1.TranslationValueY, baseline2.TranslationValueY); TranslationValueZ = predictor.PredictInt(TranslationValueZ, baseline1.TranslationValueZ, baseline2.TranslationValueZ); Child0TranslationValueX = predictor.PredictInt(Child0TranslationValueX, baseline1.Child0TranslationValueX, baseline2.Child0TranslationValueX); Child0TranslationValueY = predictor.PredictInt(Child0TranslationValueY, baseline1.Child0TranslationValueY, baseline2.Child0TranslationValueY); Child0TranslationValueZ = predictor.PredictInt(Child0TranslationValueZ, baseline1.Child0TranslationValueZ, baseline2.Child0TranslationValueZ); Child1TranslationValueX = predictor.PredictInt(Child1TranslationValueX, baseline1.Child1TranslationValueX, baseline2.Child1TranslationValueX); Child1TranslationValueY = predictor.PredictInt(Child1TranslationValueY, baseline1.Child1TranslationValueY, baseline2.Child1TranslationValueY); Child1TranslationValueZ = predictor.PredictInt(Child1TranslationValueZ, baseline1.Child1TranslationValueZ, baseline2.Child1TranslationValueZ); } public void Serialize(int networkId, ref TeleporterSnapshotData baseline, DataStreamWriter writer, NetworkCompressionModel compressionModel) { changeMask0 = (TeleporterPresentationDataeffectTick != baseline.TeleporterPresentationDataeffectTick) ? 1u : 0; changeMask0 |= (TranslationValueX != baseline.TranslationValueX || TranslationValueY != baseline.TranslationValueY || TranslationValueZ != baseline.TranslationValueZ) ? (1u<<1) : 0; changeMask0 |= (Child0TranslationValueX != baseline.Child0TranslationValueX || Child0TranslationValueY != baseline.Child0TranslationValueY || Child0TranslationValueZ != baseline.Child0TranslationValueZ) ? (1u<<2) : 0; changeMask0 |= (Child1TranslationValueX != baseline.Child1TranslationValueX || Child1TranslationValueY != baseline.Child1TranslationValueY || Child1TranslationValueZ != baseline.Child1TranslationValueZ) ? (1u<<3) : 0; writer.WritePackedUIntDelta(changeMask0, baseline.changeMask0, compressionModel); if ((changeMask0 & (1 << 0)) != 0) writer.WritePackedIntDelta(TeleporterPresentationDataeffectTick, baseline.TeleporterPresentationDataeffectTick, compressionModel); if ((changeMask0 & (1 << 1)) != 0) { writer.WritePackedIntDelta(TranslationValueX, baseline.TranslationValueX, compressionModel); writer.WritePackedIntDelta(TranslationValueY, baseline.TranslationValueY, compressionModel); writer.WritePackedIntDelta(TranslationValueZ, baseline.TranslationValueZ, compressionModel); } if ((changeMask0 & (1 << 2)) != 0) { writer.WritePackedIntDelta(Child0TranslationValueX, baseline.Child0TranslationValueX, compressionModel); writer.WritePackedIntDelta(Child0TranslationValueY, baseline.Child0TranslationValueY, compressionModel); writer.WritePackedIntDelta(Child0TranslationValueZ, baseline.Child0TranslationValueZ, compressionModel); } if ((changeMask0 & (1 << 3)) != 0) { writer.WritePackedIntDelta(Child1TranslationValueX, baseline.Child1TranslationValueX, compressionModel); writer.WritePackedIntDelta(Child1TranslationValueY, baseline.Child1TranslationValueY, compressionModel); writer.WritePackedIntDelta(Child1TranslationValueZ, baseline.Child1TranslationValueZ, compressionModel); } } public void Deserialize(uint tick, ref TeleporterSnapshotData baseline, DataStreamReader reader, ref DataStreamReader.Context ctx, NetworkCompressionModel compressionModel) { this.tick = tick; changeMask0 = reader.ReadPackedUIntDelta(ref ctx, baseline.changeMask0, compressionModel); if ((changeMask0 & (1 << 0)) != 0) TeleporterPresentationDataeffectTick = reader.ReadPackedIntDelta(ref ctx, baseline.TeleporterPresentationDataeffectTick, compressionModel); else TeleporterPresentationDataeffectTick = baseline.TeleporterPresentationDataeffectTick; if ((changeMask0 & (1 << 1)) != 0) { TranslationValueX = reader.ReadPackedIntDelta(ref ctx, baseline.TranslationValueX, compressionModel); TranslationValueY = reader.ReadPackedIntDelta(ref ctx, baseline.TranslationValueY, compressionModel); TranslationValueZ = reader.ReadPackedIntDelta(ref ctx, baseline.TranslationValueZ, compressionModel); } else { TranslationValueX = baseline.TranslationValueX; TranslationValueY = baseline.TranslationValueY; TranslationValueZ = baseline.TranslationValueZ; } if ((changeMask0 & (1 << 2)) != 0) { Child0TranslationValueX = reader.ReadPackedIntDelta(ref ctx, baseline.Child0TranslationValueX, compressionModel); Child0TranslationValueY = reader.ReadPackedIntDelta(ref ctx, baseline.Child0TranslationValueY, compressionModel); Child0TranslationValueZ = reader.ReadPackedIntDelta(ref ctx, baseline.Child0TranslationValueZ, compressionModel); } else { Child0TranslationValueX = baseline.Child0TranslationValueX; Child0TranslationValueY = baseline.Child0TranslationValueY; Child0TranslationValueZ = baseline.Child0TranslationValueZ; } if ((changeMask0 & (1 << 3)) != 0) { Child1TranslationValueX = reader.ReadPackedIntDelta(ref ctx, baseline.Child1TranslationValueX, compressionModel); Child1TranslationValueY = reader.ReadPackedIntDelta(ref ctx, baseline.Child1TranslationValueY, compressionModel); Child1TranslationValueZ = reader.ReadPackedIntDelta(ref ctx, baseline.Child1TranslationValueZ, compressionModel); } else { Child1TranslationValueX = baseline.Child1TranslationValueX; Child1TranslationValueY = baseline.Child1TranslationValueY; Child1TranslationValueZ = baseline.Child1TranslationValueZ; } } public void Interpolate(ref TeleporterSnapshotData target, float factor) { } }