/// <summary> /// Custom Serialization /// </summary> /// <param name="writer"></param> /// <param name="initialState"></param> /// <returns></returns> public override bool OnSerialize(NetworkWriter writer, bool initialState) { bool changed = base.OnSerialize(writer, initialState); if (initialState) { for (int i = 0; i < animator.layerCount; i++) { if (animator.IsInTransition(i)) { AnimatorStateInfo st = animator.GetNextAnimatorStateInfo(i); writer.WriteInt(st.fullPathHash); writer.WriteFloat(st.normalizedTime); } else { AnimatorStateInfo st = animator.GetCurrentAnimatorStateInfo(i); writer.WriteInt(st.fullPathHash); writer.WriteFloat(st.normalizedTime); } writer.WriteFloat(animator.GetLayerWeight(i)); } WriteParameters(writer, initialState); return(true); } return(changed); }
public static void WriteArray <T>(this NetworkWriter writer, T[] array) { if (array is null) { writer.WriteInt(-1); return; } writer.WriteInt(array.Length); for (int i = 0; i < array.Length; i++) { writer.Write(array[i]); } }
public static void WriteList <T>(this NetworkWriter writer, List <T> list) { if (list is null) { writer.WriteInt(-1); return; } writer.WriteInt(list.Count); for (int i = 0; i < list.Count; i++) { writer.Write(list[i]); } }
bool WriteParameters(NetworkWriter writer, bool forceAll = false) { ulong dirtyBits = forceAll ? (~0ul) : NextDirtyBits(); writer.WriteULong(dirtyBits); for (int i = 0; i < parameters.Length; i++) { if ((dirtyBits & (1ul << i)) == 0) { continue; } AnimatorControllerParameter par = parameters[i]; if (par.type == AnimatorControllerParameterType.Int) { int newIntValue = animator.GetInteger(par.nameHash); writer.WriteInt(newIntValue); } else if (par.type == AnimatorControllerParameterType.Float) { float newFloatValue = animator.GetFloat(par.nameHash); writer.WriteFloat(newFloatValue); } else if (par.type == AnimatorControllerParameterType.Bool) { bool newBoolValue = animator.GetBool(par.nameHash); writer.WriteBool(newBoolValue); } } return(dirtyBits != 0); }
public static void WriteIntNullable(this NetworkWriter writer, int?value) { writer.WriteBool(value.HasValue); if (value.HasValue) { writer.WriteInt(value.Value); } }
public static void WriteArraySegment <T>(this NetworkWriter writer, ArraySegment <T> segment) { int length = segment.Count; writer.WriteInt(length); for (int i = 0; i < length; i++) { writer.Write(segment.Array[segment.Offset + i]); } }
public static void WriteVector3Int(this NetworkWriter writer, Vector3Int value) { writer.WriteInt(value.x); writer.WriteInt(value.y); writer.WriteInt(value.z); }
public static void WriteInt32(this NetworkWriter writer, int value) => writer.WriteInt(value);