public void OnReplaySerialize(ReplayState state) { // Write the object identity state.Write(objectIdentity); state.Write(timestamp); // Calcualte the flags flags = ReplayInitialDataFlags.None; // Mkae sure initial state flags are updated UpdateDataFlags(); // Write the data flags state.Write((short)flags); // Write Position if ((flags & ReplayInitialDataFlags.Position) != 0) { state.Write(position); } // Write rotation if ((flags & ReplayInitialDataFlags.Rotation) != 0) { state.Write(rotation); } // Write scale if ((flags & ReplayInitialDataFlags.Scale) != 0) { state.Write(scale); } // Write parent if ((flags & ReplayInitialDataFlags.Parent) != 0) { state.Write(parentIdentity); } // Write the component identities int size = (observedComponentIdentities == null) ? 0 : observedComponentIdentities.Length; // Write the number of ids state.Write((short)size); // Write all ids for (int i = 0; i < size; i++) { // Write the identity state.Write(observedComponentIdentities[i]); } }
public void OnReplayDeserialize(ReplayState state) { // Read the object identity objectIdentity = state.ReadIdentity(); timestamp = state.ReadFloat(); // Read the flags flags = (ReplayInitialDataFlags)state.Read16(); // Read position if ((flags & ReplayInitialDataFlags.Position) != 0) { position = state.ReadVec3(); } // Read rotation if ((flags & ReplayInitialDataFlags.Rotation) != 0) { rotation = state.ReadQuat(); } // Read scale if ((flags & ReplayInitialDataFlags.Scale) != 0) { scale = state.ReadVec3(); } // Read parent identity if ((flags & ReplayInitialDataFlags.Parent) != 0) { parentIdentity = state.ReadIdentity(); } // Read the number of observed components int size = state.Read16(); // Allocate the array observedComponentIdentities = new ReplayIdentity[size]; // Read all ids for (int i = 0; i < size; i++) { // Read the identity observedComponentIdentities[i] = state.ReadIdentity(); } }
// Methods public void UpdateDataFlags() { // Reset flags flags = ReplayInitialDataFlags.None; // Create the initial object flag data if (position != Vector3.zero) { flags |= ReplayInitialDataFlags.Position; } if (rotation != Quaternion.identity) { flags |= ReplayInitialDataFlags.Rotation; } if (scale != Vector3.one) { flags |= ReplayInitialDataFlags.Scale; } if (parentIdentity != null) { flags |= ReplayInitialDataFlags.Parent; } }