1645 lines
50 KiB
C#
1645 lines
50 KiB
C#
using System;
|
|
|
|
namespace UnityEngine.Networking
|
|
{
|
|
// Token: 0x0200005D RID: 93
|
|
[DisallowMultipleComponent]
|
|
[AddComponentMenu("Network/NetworkTransform")]
|
|
public class NetworkTransform : NetworkBehaviour
|
|
{
|
|
// Token: 0x170000C4 RID: 196
|
|
// (get) Token: 0x06000492 RID: 1170 RVA: 0x0001A1B0 File Offset: 0x000183B0
|
|
// (set) Token: 0x06000493 RID: 1171 RVA: 0x0001A1CB File Offset: 0x000183CB
|
|
public NetworkTransform.TransformSyncMode transformSyncMode
|
|
{
|
|
get
|
|
{
|
|
return this.m_TransformSyncMode;
|
|
}
|
|
set
|
|
{
|
|
this.m_TransformSyncMode = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000C5 RID: 197
|
|
// (get) Token: 0x06000494 RID: 1172 RVA: 0x0001A1D8 File Offset: 0x000183D8
|
|
// (set) Token: 0x06000495 RID: 1173 RVA: 0x0001A1F3 File Offset: 0x000183F3
|
|
public float sendInterval
|
|
{
|
|
get
|
|
{
|
|
return this.m_SendInterval;
|
|
}
|
|
set
|
|
{
|
|
this.m_SendInterval = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000C6 RID: 198
|
|
// (get) Token: 0x06000496 RID: 1174 RVA: 0x0001A200 File Offset: 0x00018400
|
|
// (set) Token: 0x06000497 RID: 1175 RVA: 0x0001A21B File Offset: 0x0001841B
|
|
public NetworkTransform.AxisSyncMode syncRotationAxis
|
|
{
|
|
get
|
|
{
|
|
return this.m_SyncRotationAxis;
|
|
}
|
|
set
|
|
{
|
|
this.m_SyncRotationAxis = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000C7 RID: 199
|
|
// (get) Token: 0x06000498 RID: 1176 RVA: 0x0001A228 File Offset: 0x00018428
|
|
// (set) Token: 0x06000499 RID: 1177 RVA: 0x0001A243 File Offset: 0x00018443
|
|
public NetworkTransform.CompressionSyncMode rotationSyncCompression
|
|
{
|
|
get
|
|
{
|
|
return this.m_RotationSyncCompression;
|
|
}
|
|
set
|
|
{
|
|
this.m_RotationSyncCompression = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000C8 RID: 200
|
|
// (get) Token: 0x0600049A RID: 1178 RVA: 0x0001A250 File Offset: 0x00018450
|
|
// (set) Token: 0x0600049B RID: 1179 RVA: 0x0001A26B File Offset: 0x0001846B
|
|
public bool syncSpin
|
|
{
|
|
get
|
|
{
|
|
return this.m_SyncSpin;
|
|
}
|
|
set
|
|
{
|
|
this.m_SyncSpin = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000C9 RID: 201
|
|
// (get) Token: 0x0600049C RID: 1180 RVA: 0x0001A278 File Offset: 0x00018478
|
|
// (set) Token: 0x0600049D RID: 1181 RVA: 0x0001A293 File Offset: 0x00018493
|
|
public float movementTheshold
|
|
{
|
|
get
|
|
{
|
|
return this.m_MovementTheshold;
|
|
}
|
|
set
|
|
{
|
|
this.m_MovementTheshold = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CA RID: 202
|
|
// (get) Token: 0x0600049E RID: 1182 RVA: 0x0001A2A0 File Offset: 0x000184A0
|
|
// (set) Token: 0x0600049F RID: 1183 RVA: 0x0001A2BB File Offset: 0x000184BB
|
|
public float velocityThreshold
|
|
{
|
|
get
|
|
{
|
|
return this.m_VelocityThreshold;
|
|
}
|
|
set
|
|
{
|
|
this.m_VelocityThreshold = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CB RID: 203
|
|
// (get) Token: 0x060004A0 RID: 1184 RVA: 0x0001A2C8 File Offset: 0x000184C8
|
|
// (set) Token: 0x060004A1 RID: 1185 RVA: 0x0001A2E3 File Offset: 0x000184E3
|
|
public float snapThreshold
|
|
{
|
|
get
|
|
{
|
|
return this.m_SnapThreshold;
|
|
}
|
|
set
|
|
{
|
|
this.m_SnapThreshold = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CC RID: 204
|
|
// (get) Token: 0x060004A2 RID: 1186 RVA: 0x0001A2F0 File Offset: 0x000184F0
|
|
// (set) Token: 0x060004A3 RID: 1187 RVA: 0x0001A30B File Offset: 0x0001850B
|
|
public float interpolateRotation
|
|
{
|
|
get
|
|
{
|
|
return this.m_InterpolateRotation;
|
|
}
|
|
set
|
|
{
|
|
this.m_InterpolateRotation = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CD RID: 205
|
|
// (get) Token: 0x060004A4 RID: 1188 RVA: 0x0001A318 File Offset: 0x00018518
|
|
// (set) Token: 0x060004A5 RID: 1189 RVA: 0x0001A333 File Offset: 0x00018533
|
|
public float interpolateMovement
|
|
{
|
|
get
|
|
{
|
|
return this.m_InterpolateMovement;
|
|
}
|
|
set
|
|
{
|
|
this.m_InterpolateMovement = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CE RID: 206
|
|
// (get) Token: 0x060004A6 RID: 1190 RVA: 0x0001A340 File Offset: 0x00018540
|
|
// (set) Token: 0x060004A7 RID: 1191 RVA: 0x0001A35B File Offset: 0x0001855B
|
|
public NetworkTransform.ClientMoveCallback3D clientMoveCallback3D
|
|
{
|
|
get
|
|
{
|
|
return this.m_ClientMoveCallback3D;
|
|
}
|
|
set
|
|
{
|
|
this.m_ClientMoveCallback3D = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000CF RID: 207
|
|
// (get) Token: 0x060004A8 RID: 1192 RVA: 0x0001A368 File Offset: 0x00018568
|
|
// (set) Token: 0x060004A9 RID: 1193 RVA: 0x0001A383 File Offset: 0x00018583
|
|
public NetworkTransform.ClientMoveCallback2D clientMoveCallback2D
|
|
{
|
|
get
|
|
{
|
|
return this.m_ClientMoveCallback2D;
|
|
}
|
|
set
|
|
{
|
|
this.m_ClientMoveCallback2D = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D0 RID: 208
|
|
// (get) Token: 0x060004AA RID: 1194 RVA: 0x0001A390 File Offset: 0x00018590
|
|
public CharacterController characterContoller
|
|
{
|
|
get
|
|
{
|
|
return this.m_CharacterController;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D1 RID: 209
|
|
// (get) Token: 0x060004AB RID: 1195 RVA: 0x0001A3AC File Offset: 0x000185AC
|
|
public Rigidbody rigidbody3D
|
|
{
|
|
get
|
|
{
|
|
return this.m_RigidBody3D;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D2 RID: 210
|
|
// (get) Token: 0x060004AC RID: 1196 RVA: 0x0001A3C8 File Offset: 0x000185C8
|
|
public Rigidbody2D rigidbody2D
|
|
{
|
|
get
|
|
{
|
|
return this.m_RigidBody2D;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D3 RID: 211
|
|
// (get) Token: 0x060004AD RID: 1197 RVA: 0x0001A3E4 File Offset: 0x000185E4
|
|
public float lastSyncTime
|
|
{
|
|
get
|
|
{
|
|
return this.m_LastClientSyncTime;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D4 RID: 212
|
|
// (get) Token: 0x060004AE RID: 1198 RVA: 0x0001A400 File Offset: 0x00018600
|
|
public Vector3 targetSyncPosition
|
|
{
|
|
get
|
|
{
|
|
return this.m_TargetSyncPosition;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D5 RID: 213
|
|
// (get) Token: 0x060004AF RID: 1199 RVA: 0x0001A41C File Offset: 0x0001861C
|
|
public Vector3 targetSyncVelocity
|
|
{
|
|
get
|
|
{
|
|
return this.m_TargetSyncVelocity;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D6 RID: 214
|
|
// (get) Token: 0x060004B0 RID: 1200 RVA: 0x0001A438 File Offset: 0x00018638
|
|
public Quaternion targetSyncRotation3D
|
|
{
|
|
get
|
|
{
|
|
return this.m_TargetSyncRotation3D;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D7 RID: 215
|
|
// (get) Token: 0x060004B1 RID: 1201 RVA: 0x0001A454 File Offset: 0x00018654
|
|
public float targetSyncRotation2D
|
|
{
|
|
get
|
|
{
|
|
return this.m_TargetSyncRotation2D;
|
|
}
|
|
}
|
|
|
|
// Token: 0x170000D8 RID: 216
|
|
// (get) Token: 0x060004B2 RID: 1202 RVA: 0x0001A470 File Offset: 0x00018670
|
|
// (set) Token: 0x060004B3 RID: 1203 RVA: 0x0001A48B File Offset: 0x0001868B
|
|
public bool grounded
|
|
{
|
|
get
|
|
{
|
|
return this.m_Grounded;
|
|
}
|
|
set
|
|
{
|
|
this.m_Grounded = value;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004B4 RID: 1204 RVA: 0x0001A498 File Offset: 0x00018698
|
|
private void OnValidate()
|
|
{
|
|
if (this.m_TransformSyncMode < NetworkTransform.TransformSyncMode.SyncNone || this.m_TransformSyncMode > NetworkTransform.TransformSyncMode.SyncCharacterController)
|
|
{
|
|
this.m_TransformSyncMode = NetworkTransform.TransformSyncMode.SyncTransform;
|
|
}
|
|
if (this.m_SendInterval < 0f)
|
|
{
|
|
this.m_SendInterval = 0f;
|
|
}
|
|
if (this.m_SyncRotationAxis < NetworkTransform.AxisSyncMode.None || this.m_SyncRotationAxis > NetworkTransform.AxisSyncMode.AxisXYZ)
|
|
{
|
|
this.m_SyncRotationAxis = NetworkTransform.AxisSyncMode.None;
|
|
}
|
|
if (this.m_MovementTheshold < 0f)
|
|
{
|
|
this.m_MovementTheshold = 0f;
|
|
}
|
|
if (this.m_VelocityThreshold < 0f)
|
|
{
|
|
this.m_VelocityThreshold = 0f;
|
|
}
|
|
if (this.m_SnapThreshold < 0f)
|
|
{
|
|
this.m_SnapThreshold = 0.01f;
|
|
}
|
|
if (this.m_InterpolateRotation < 0f)
|
|
{
|
|
this.m_InterpolateRotation = 0.01f;
|
|
}
|
|
if (this.m_InterpolateMovement < 0f)
|
|
{
|
|
this.m_InterpolateMovement = 0.01f;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004B5 RID: 1205 RVA: 0x0001A598 File Offset: 0x00018798
|
|
private void Awake()
|
|
{
|
|
this.m_RigidBody3D = base.GetComponent<Rigidbody>();
|
|
this.m_RigidBody2D = base.GetComponent<Rigidbody2D>();
|
|
this.m_CharacterController = base.GetComponent<CharacterController>();
|
|
this.m_PrevPosition = base.transform.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
this.m_PrevVelocity = 0f;
|
|
if (base.localPlayerAuthority)
|
|
{
|
|
this.m_LocalTransformWriter = new NetworkWriter();
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004B6 RID: 1206 RVA: 0x0001A60F File Offset: 0x0001880F
|
|
public override void OnStartServer()
|
|
{
|
|
this.m_LastClientSyncTime = 0f;
|
|
}
|
|
|
|
// Token: 0x060004B7 RID: 1207 RVA: 0x0001A620 File Offset: 0x00018820
|
|
public override bool OnSerialize(NetworkWriter writer, bool initialState)
|
|
{
|
|
if (!initialState)
|
|
{
|
|
if (base.syncVarDirtyBits == 0U)
|
|
{
|
|
writer.WritePackedUInt32(0U);
|
|
return false;
|
|
}
|
|
writer.WritePackedUInt32(1U);
|
|
}
|
|
switch (this.transformSyncMode)
|
|
{
|
|
case NetworkTransform.TransformSyncMode.SyncNone:
|
|
return false;
|
|
case NetworkTransform.TransformSyncMode.SyncTransform:
|
|
this.SerializeModeTransform(writer);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody2D:
|
|
this.SerializeMode2D(writer);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody3D:
|
|
this.SerializeMode3D(writer);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncCharacterController:
|
|
this.SerializeModeCharacterController(writer);
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// Token: 0x060004B8 RID: 1208 RVA: 0x0001A6C8 File Offset: 0x000188C8
|
|
private void SerializeModeTransform(NetworkWriter writer)
|
|
{
|
|
writer.Write(base.transform.position);
|
|
if (this.m_SyncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.SerializeRotation3D(writer, base.transform.rotation, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
this.m_PrevPosition = base.transform.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
this.m_PrevVelocity = 0f;
|
|
}
|
|
|
|
// Token: 0x060004B9 RID: 1209 RVA: 0x0001A740 File Offset: 0x00018940
|
|
private void VerifySerializeComponentExists()
|
|
{
|
|
bool flag = false;
|
|
Type type = null;
|
|
NetworkTransform.TransformSyncMode transformSyncMode = this.transformSyncMode;
|
|
if (transformSyncMode != NetworkTransform.TransformSyncMode.SyncCharacterController)
|
|
{
|
|
if (transformSyncMode != NetworkTransform.TransformSyncMode.SyncRigidbody2D)
|
|
{
|
|
if (transformSyncMode == NetworkTransform.TransformSyncMode.SyncRigidbody3D)
|
|
{
|
|
if (!this.m_RigidBody3D)
|
|
{
|
|
flag = true;
|
|
type = typeof(Rigidbody);
|
|
}
|
|
}
|
|
}
|
|
else if (!this.m_RigidBody2D)
|
|
{
|
|
flag = true;
|
|
type = typeof(Rigidbody2D);
|
|
}
|
|
}
|
|
else if (!this.m_CharacterController)
|
|
{
|
|
flag = true;
|
|
type = typeof(CharacterController);
|
|
}
|
|
if (flag && type != null)
|
|
{
|
|
throw new InvalidOperationException(string.Format("transformSyncMode set to {0} but no {1} component was found, did you call NetworkServer.Spawn on a prefab?", this.transformSyncMode, type.Name));
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004BA RID: 1210 RVA: 0x0001A810 File Offset: 0x00018A10
|
|
private void SerializeMode3D(NetworkWriter writer)
|
|
{
|
|
this.VerifySerializeComponentExists();
|
|
if (base.isServer && this.m_LastClientSyncTime != 0f)
|
|
{
|
|
writer.Write(this.m_TargetSyncPosition);
|
|
NetworkTransform.SerializeVelocity3D(writer, this.m_TargetSyncVelocity, NetworkTransform.CompressionSyncMode.None);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.SerializeRotation3D(writer, this.m_TargetSyncRotation3D, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.Write(this.m_RigidBody3D.position);
|
|
NetworkTransform.SerializeVelocity3D(writer, this.m_RigidBody3D.velocity, NetworkTransform.CompressionSyncMode.None);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.SerializeRotation3D(writer, this.m_RigidBody3D.rotation, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
if (this.m_SyncSpin)
|
|
{
|
|
NetworkTransform.SerializeSpin3D(writer, this.m_RigidBody3D.angularVelocity, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
this.m_PrevPosition = this.m_RigidBody3D.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
this.m_PrevVelocity = this.m_RigidBody3D.velocity.sqrMagnitude;
|
|
}
|
|
|
|
// Token: 0x060004BB RID: 1211 RVA: 0x0001A938 File Offset: 0x00018B38
|
|
private void SerializeModeCharacterController(NetworkWriter writer)
|
|
{
|
|
this.VerifySerializeComponentExists();
|
|
if (base.isServer && this.m_LastClientSyncTime != 0f)
|
|
{
|
|
writer.Write(this.m_TargetSyncPosition);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.SerializeRotation3D(writer, this.m_TargetSyncRotation3D, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.Write(base.transform.position);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.SerializeRotation3D(writer, base.transform.rotation, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
this.m_PrevPosition = base.transform.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
this.m_PrevVelocity = 0f;
|
|
}
|
|
|
|
// Token: 0x060004BC RID: 1212 RVA: 0x0001AA0C File Offset: 0x00018C0C
|
|
private void SerializeMode2D(NetworkWriter writer)
|
|
{
|
|
this.VerifySerializeComponentExists();
|
|
if (base.isServer && this.m_LastClientSyncTime != 0f)
|
|
{
|
|
writer.Write(this.m_TargetSyncPosition);
|
|
NetworkTransform.SerializeVelocity2D(writer, this.m_TargetSyncVelocity, NetworkTransform.CompressionSyncMode.None);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
float num = this.m_TargetSyncRotation2D % 360f;
|
|
if (num < 0f)
|
|
{
|
|
num += 360f;
|
|
}
|
|
NetworkTransform.SerializeRotation2D(writer, num, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.Write(this.m_RigidBody2D.position);
|
|
NetworkTransform.SerializeVelocity2D(writer, this.m_RigidBody2D.velocity, NetworkTransform.CompressionSyncMode.None);
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
float num2 = this.m_RigidBody2D.rotation % 360f;
|
|
if (num2 < 0f)
|
|
{
|
|
num2 += 360f;
|
|
}
|
|
NetworkTransform.SerializeRotation2D(writer, num2, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
if (this.m_SyncSpin)
|
|
{
|
|
NetworkTransform.SerializeSpin2D(writer, this.m_RigidBody2D.angularVelocity, this.rotationSyncCompression);
|
|
}
|
|
this.m_PrevPosition = this.m_RigidBody2D.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
this.m_PrevVelocity = this.m_RigidBody2D.velocity.sqrMagnitude;
|
|
}
|
|
|
|
// Token: 0x060004BD RID: 1213 RVA: 0x0001AB68 File Offset: 0x00018D68
|
|
public override void OnDeserialize(NetworkReader reader, bool initialState)
|
|
{
|
|
if (!base.isServer || !NetworkServer.localClientActive)
|
|
{
|
|
if (!initialState)
|
|
{
|
|
if (reader.ReadPackedUInt32() == 0U)
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
switch (this.transformSyncMode)
|
|
{
|
|
case NetworkTransform.TransformSyncMode.SyncNone:
|
|
return;
|
|
case NetworkTransform.TransformSyncMode.SyncTransform:
|
|
this.UnserializeModeTransform(reader, initialState);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody2D:
|
|
this.UnserializeMode2D(reader, initialState);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody3D:
|
|
this.UnserializeMode3D(reader, initialState);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncCharacterController:
|
|
this.UnserializeModeCharacterController(reader, initialState);
|
|
break;
|
|
}
|
|
this.m_LastClientSyncTime = Time.time;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004BE RID: 1214 RVA: 0x0001AC18 File Offset: 0x00018E18
|
|
private void UnserializeModeTransform(NetworkReader reader, bool initialState)
|
|
{
|
|
if (base.hasAuthority)
|
|
{
|
|
reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else if (base.isServer && this.m_ClientMoveCallback3D != null)
|
|
{
|
|
Vector3 vector = reader.ReadVector3();
|
|
Vector3 zero = Vector3.zero;
|
|
Quaternion quaternion = Quaternion.identity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
quaternion = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
if (this.m_ClientMoveCallback3D(ref vector, ref zero, ref quaternion))
|
|
{
|
|
base.transform.position = vector;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
base.transform.rotation = quaternion;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
base.transform.position = reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
base.transform.rotation = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004BF RID: 1215 RVA: 0x0001AD34 File Offset: 0x00018F34
|
|
private void UnserializeMode3D(NetworkReader reader, bool initialState)
|
|
{
|
|
if (base.hasAuthority)
|
|
{
|
|
reader.ReadVector3();
|
|
reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
NetworkTransform.UnserializeSpin3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (base.isServer && this.m_ClientMoveCallback3D != null)
|
|
{
|
|
Vector3 vector = reader.ReadVector3();
|
|
Vector3 vector2 = reader.ReadVector3();
|
|
Quaternion quaternion = Quaternion.identity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
quaternion = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
if (!this.m_ClientMoveCallback3D(ref vector, ref vector2, ref quaternion))
|
|
{
|
|
return;
|
|
}
|
|
this.m_TargetSyncPosition = vector;
|
|
this.m_TargetSyncVelocity = vector2;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation3D = quaternion;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.m_TargetSyncPosition = reader.ReadVector3();
|
|
this.m_TargetSyncVelocity = reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation3D = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_TargetSyncAngularVelocity3D = NetworkTransform.UnserializeSpin3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
if (!(this.m_RigidBody3D == null))
|
|
{
|
|
if (base.isServer && !base.isClient)
|
|
{
|
|
this.m_RigidBody3D.MovePosition(this.m_TargetSyncPosition);
|
|
this.m_RigidBody3D.MoveRotation(this.m_TargetSyncRotation3D);
|
|
this.m_RigidBody3D.velocity = this.m_TargetSyncVelocity;
|
|
}
|
|
else if (this.GetNetworkSendInterval() == 0f)
|
|
{
|
|
this.m_RigidBody3D.MovePosition(this.m_TargetSyncPosition);
|
|
this.m_RigidBody3D.velocity = this.m_TargetSyncVelocity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_RigidBody3D.MoveRotation(this.m_TargetSyncRotation3D);
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_RigidBody3D.angularVelocity = this.m_TargetSyncAngularVelocity3D;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
float magnitude = (this.m_RigidBody3D.position - this.m_TargetSyncPosition).magnitude;
|
|
if (magnitude > this.snapThreshold)
|
|
{
|
|
this.m_RigidBody3D.position = this.m_TargetSyncPosition;
|
|
this.m_RigidBody3D.velocity = this.m_TargetSyncVelocity;
|
|
}
|
|
if (this.interpolateRotation == 0f && this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_RigidBody3D.rotation = this.m_TargetSyncRotation3D;
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_RigidBody3D.angularVelocity = this.m_TargetSyncAngularVelocity3D;
|
|
}
|
|
}
|
|
if (this.m_InterpolateMovement == 0f)
|
|
{
|
|
this.m_RigidBody3D.position = this.m_TargetSyncPosition;
|
|
}
|
|
if (initialState && this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_RigidBody3D.rotation = this.m_TargetSyncRotation3D;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C0 RID: 1216 RVA: 0x0001B058 File Offset: 0x00019258
|
|
private void UnserializeMode2D(NetworkReader reader, bool initialState)
|
|
{
|
|
if (base.hasAuthority)
|
|
{
|
|
reader.ReadVector2();
|
|
reader.ReadVector2();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.UnserializeRotation2D(reader, this.rotationSyncCompression);
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
NetworkTransform.UnserializeSpin2D(reader, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else if (!(this.m_RigidBody2D == null))
|
|
{
|
|
if (base.isServer && this.m_ClientMoveCallback2D != null)
|
|
{
|
|
Vector2 vector = reader.ReadVector2();
|
|
Vector2 vector2 = reader.ReadVector2();
|
|
float num = 0f;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
num = NetworkTransform.UnserializeRotation2D(reader, this.rotationSyncCompression);
|
|
}
|
|
if (!this.m_ClientMoveCallback2D(ref vector, ref vector2, ref num))
|
|
{
|
|
return;
|
|
}
|
|
this.m_TargetSyncPosition = vector;
|
|
this.m_TargetSyncVelocity = vector2;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation2D = num;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.m_TargetSyncPosition = reader.ReadVector2();
|
|
this.m_TargetSyncVelocity = reader.ReadVector2();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation2D = NetworkTransform.UnserializeRotation2D(reader, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_TargetSyncAngularVelocity2D = NetworkTransform.UnserializeSpin2D(reader, this.rotationSyncCompression);
|
|
}
|
|
if (base.isServer && !base.isClient)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
this.m_RigidBody2D.MoveRotation(this.m_TargetSyncRotation2D);
|
|
this.m_RigidBody2D.velocity = this.m_TargetSyncVelocity;
|
|
}
|
|
else if (this.GetNetworkSendInterval() == 0f)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
this.m_RigidBody2D.velocity = this.m_TargetSyncVelocity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_RigidBody2D.MoveRotation(this.m_TargetSyncRotation2D);
|
|
}
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_RigidBody2D.angularVelocity = this.m_TargetSyncAngularVelocity2D;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
float magnitude = (this.m_RigidBody2D.position - this.m_TargetSyncPosition).magnitude;
|
|
if (magnitude > this.snapThreshold)
|
|
{
|
|
this.m_RigidBody2D.position = this.m_TargetSyncPosition;
|
|
this.m_RigidBody2D.velocity = this.m_TargetSyncVelocity;
|
|
}
|
|
if (this.interpolateRotation == 0f && this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_RigidBody2D.rotation = this.m_TargetSyncRotation2D;
|
|
if (this.syncSpin)
|
|
{
|
|
this.m_RigidBody2D.angularVelocity = this.m_TargetSyncAngularVelocity2D;
|
|
}
|
|
}
|
|
if (this.m_InterpolateMovement == 0f)
|
|
{
|
|
this.m_RigidBody2D.position = this.m_TargetSyncPosition;
|
|
}
|
|
if (initialState)
|
|
{
|
|
this.m_RigidBody2D.rotation = this.m_TargetSyncRotation2D;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C1 RID: 1217 RVA: 0x0001B384 File Offset: 0x00019584
|
|
private void UnserializeModeCharacterController(NetworkReader reader, bool initialState)
|
|
{
|
|
if (base.hasAuthority)
|
|
{
|
|
reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (base.isServer && this.m_ClientMoveCallback3D != null)
|
|
{
|
|
Vector3 vector = reader.ReadVector3();
|
|
Quaternion quaternion = Quaternion.identity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
quaternion = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
if (this.m_CharacterController == null)
|
|
{
|
|
return;
|
|
}
|
|
Vector3 velocity = this.m_CharacterController.velocity;
|
|
if (!this.m_ClientMoveCallback3D(ref vector, ref velocity, ref quaternion))
|
|
{
|
|
return;
|
|
}
|
|
this.m_TargetSyncPosition = vector;
|
|
this.m_TargetSyncVelocity = velocity;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation3D = quaternion;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.m_TargetSyncPosition = reader.ReadVector3();
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
this.m_TargetSyncRotation3D = NetworkTransform.UnserializeRotation3D(reader, this.syncRotationAxis, this.rotationSyncCompression);
|
|
}
|
|
}
|
|
if (!(this.m_CharacterController == null))
|
|
{
|
|
Vector3 vector2 = this.m_TargetSyncPosition - base.transform.position;
|
|
Vector3 vector3 = vector2 / this.GetNetworkSendInterval();
|
|
this.m_FixedPosDiff = vector3 * Time.fixedDeltaTime;
|
|
if (base.isServer && !base.isClient)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
base.transform.rotation = this.m_TargetSyncRotation3D;
|
|
}
|
|
else if (this.GetNetworkSendInterval() == 0f)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
if (this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
base.transform.rotation = this.m_TargetSyncRotation3D;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
float magnitude = (base.transform.position - this.m_TargetSyncPosition).magnitude;
|
|
if (magnitude > this.snapThreshold)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
}
|
|
if (this.interpolateRotation == 0f && this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
base.transform.rotation = this.m_TargetSyncRotation3D;
|
|
}
|
|
if (this.m_InterpolateMovement == 0f)
|
|
{
|
|
base.transform.position = this.m_TargetSyncPosition;
|
|
}
|
|
if (initialState && this.syncRotationAxis != NetworkTransform.AxisSyncMode.None)
|
|
{
|
|
base.transform.rotation = this.m_TargetSyncRotation3D;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C2 RID: 1218 RVA: 0x0001B634 File Offset: 0x00019834
|
|
private void FixedUpdate()
|
|
{
|
|
if (base.isServer)
|
|
{
|
|
this.FixedUpdateServer();
|
|
}
|
|
if (base.isClient)
|
|
{
|
|
this.FixedUpdateClient();
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C3 RID: 1219 RVA: 0x0001B660 File Offset: 0x00019860
|
|
private void FixedUpdateServer()
|
|
{
|
|
if (base.syncVarDirtyBits == 0U)
|
|
{
|
|
if (NetworkServer.active)
|
|
{
|
|
if (base.isServer)
|
|
{
|
|
if (this.GetNetworkSendInterval() != 0f)
|
|
{
|
|
float num = (base.transform.position - this.m_PrevPosition).magnitude;
|
|
if (num < this.movementTheshold)
|
|
{
|
|
num = Quaternion.Angle(this.m_PrevRotation, base.transform.rotation);
|
|
if (num < this.movementTheshold)
|
|
{
|
|
if (!this.CheckVelocityChanged())
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
base.SetDirtyBit(1U);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C4 RID: 1220 RVA: 0x0001B71C File Offset: 0x0001991C
|
|
private bool CheckVelocityChanged()
|
|
{
|
|
NetworkTransform.TransformSyncMode transformSyncMode = this.transformSyncMode;
|
|
bool flag;
|
|
if (transformSyncMode != NetworkTransform.TransformSyncMode.SyncRigidbody2D)
|
|
{
|
|
flag = transformSyncMode == NetworkTransform.TransformSyncMode.SyncRigidbody3D && (this.m_RigidBody3D && this.m_VelocityThreshold > 0f) && Mathf.Abs(this.m_RigidBody3D.velocity.sqrMagnitude - this.m_PrevVelocity) >= this.m_VelocityThreshold;
|
|
}
|
|
else
|
|
{
|
|
flag = this.m_RigidBody2D && this.m_VelocityThreshold > 0f && Mathf.Abs(this.m_RigidBody2D.velocity.sqrMagnitude - this.m_PrevVelocity) >= this.m_VelocityThreshold;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x060004C5 RID: 1221 RVA: 0x0001B800 File Offset: 0x00019A00
|
|
private void FixedUpdateClient()
|
|
{
|
|
if (this.m_LastClientSyncTime != 0f)
|
|
{
|
|
if (NetworkServer.active || NetworkClient.active)
|
|
{
|
|
if (base.isServer || base.isClient)
|
|
{
|
|
if (this.GetNetworkSendInterval() != 0f)
|
|
{
|
|
if (!base.hasAuthority)
|
|
{
|
|
switch (this.transformSyncMode)
|
|
{
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody2D:
|
|
this.InterpolateTransformMode2D();
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody3D:
|
|
this.InterpolateTransformMode3D();
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncCharacterController:
|
|
this.InterpolateTransformModeCharacterController();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C6 RID: 1222 RVA: 0x0001B8D4 File Offset: 0x00019AD4
|
|
private void InterpolateTransformMode3D()
|
|
{
|
|
if (this.m_InterpolateMovement != 0f)
|
|
{
|
|
Vector3 vector = (this.m_TargetSyncPosition - this.m_RigidBody3D.position) * this.m_InterpolateMovement / this.GetNetworkSendInterval();
|
|
this.m_RigidBody3D.velocity = vector;
|
|
}
|
|
if (this.interpolateRotation != 0f)
|
|
{
|
|
this.m_RigidBody3D.MoveRotation(Quaternion.Slerp(this.m_RigidBody3D.rotation, this.m_TargetSyncRotation3D, Time.fixedDeltaTime * this.interpolateRotation));
|
|
}
|
|
this.m_TargetSyncPosition += this.m_TargetSyncVelocity * Time.fixedDeltaTime * 0.1f;
|
|
}
|
|
|
|
// Token: 0x060004C7 RID: 1223 RVA: 0x0001B998 File Offset: 0x00019B98
|
|
private void InterpolateTransformModeCharacterController()
|
|
{
|
|
if (!(this.m_FixedPosDiff == Vector3.zero) || !(this.m_TargetSyncRotation3D == base.transform.rotation))
|
|
{
|
|
if (this.m_InterpolateMovement != 0f)
|
|
{
|
|
this.m_CharacterController.Move(this.m_FixedPosDiff * this.m_InterpolateMovement);
|
|
}
|
|
if (this.interpolateRotation != 0f)
|
|
{
|
|
base.transform.rotation = Quaternion.Slerp(base.transform.rotation, this.m_TargetSyncRotation3D, Time.fixedDeltaTime * this.interpolateRotation * 10f);
|
|
}
|
|
if (Time.time - this.m_LastClientSyncTime > this.GetNetworkSendInterval())
|
|
{
|
|
this.m_FixedPosDiff = Vector3.zero;
|
|
Vector3 vector = this.m_TargetSyncPosition - base.transform.position;
|
|
this.m_CharacterController.Move(vector);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004C8 RID: 1224 RVA: 0x0001BA98 File Offset: 0x00019C98
|
|
private void InterpolateTransformMode2D()
|
|
{
|
|
if (this.m_InterpolateMovement != 0f)
|
|
{
|
|
Vector2 velocity = this.m_RigidBody2D.velocity;
|
|
Vector2 vector = (this.m_TargetSyncPosition - this.m_RigidBody2D.position) * this.m_InterpolateMovement / this.GetNetworkSendInterval();
|
|
if (!this.m_Grounded && vector.y < 0f)
|
|
{
|
|
vector.y = velocity.y;
|
|
}
|
|
this.m_RigidBody2D.velocity = vector;
|
|
}
|
|
if (this.interpolateRotation != 0f)
|
|
{
|
|
float num = this.m_RigidBody2D.rotation % 360f;
|
|
if (num < 0f)
|
|
{
|
|
num += 360f;
|
|
}
|
|
Quaternion quaternion = Quaternion.Slerp(base.transform.rotation, Quaternion.Euler(0f, 0f, this.m_TargetSyncRotation2D), Time.fixedDeltaTime * this.interpolateRotation / this.GetNetworkSendInterval());
|
|
this.m_RigidBody2D.MoveRotation(quaternion.eulerAngles.z);
|
|
this.m_TargetSyncRotation2D += this.m_TargetSyncAngularVelocity2D * Time.fixedDeltaTime * 0.1f;
|
|
}
|
|
this.m_TargetSyncPosition += this.m_TargetSyncVelocity * Time.fixedDeltaTime * 0.1f;
|
|
}
|
|
|
|
// Token: 0x060004C9 RID: 1225 RVA: 0x0001BC08 File Offset: 0x00019E08
|
|
private void Update()
|
|
{
|
|
if (base.hasAuthority)
|
|
{
|
|
if (base.localPlayerAuthority)
|
|
{
|
|
if (!NetworkServer.active)
|
|
{
|
|
if (Time.time - this.m_LastClientSendTime > this.GetNetworkSendInterval())
|
|
{
|
|
this.SendTransform();
|
|
this.m_LastClientSendTime = Time.time;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004CA RID: 1226 RVA: 0x0001BC70 File Offset: 0x00019E70
|
|
private bool HasMoved()
|
|
{
|
|
float num;
|
|
if (this.m_RigidBody3D != null)
|
|
{
|
|
num = (this.m_RigidBody3D.position - this.m_PrevPosition).magnitude;
|
|
}
|
|
else if (this.m_RigidBody2D != null)
|
|
{
|
|
num = (this.m_RigidBody2D.position - this.m_PrevPosition).magnitude;
|
|
}
|
|
else
|
|
{
|
|
num = (base.transform.position - this.m_PrevPosition).magnitude;
|
|
}
|
|
bool flag;
|
|
if (num > 1E-05f)
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
if (this.m_RigidBody3D != null)
|
|
{
|
|
num = Quaternion.Angle(this.m_RigidBody3D.rotation, this.m_PrevRotation);
|
|
}
|
|
else if (this.m_RigidBody2D != null)
|
|
{
|
|
num = Math.Abs(this.m_RigidBody2D.rotation - this.m_PrevRotation2D);
|
|
}
|
|
else
|
|
{
|
|
num = Quaternion.Angle(base.transform.rotation, this.m_PrevRotation);
|
|
}
|
|
if (num > 1E-05f)
|
|
{
|
|
flag = true;
|
|
}
|
|
else
|
|
{
|
|
if (this.m_RigidBody3D != null)
|
|
{
|
|
num = Mathf.Abs(this.m_RigidBody3D.velocity.sqrMagnitude - this.m_PrevVelocity);
|
|
}
|
|
else if (this.m_RigidBody2D != null)
|
|
{
|
|
num = Mathf.Abs(this.m_RigidBody2D.velocity.sqrMagnitude - this.m_PrevVelocity);
|
|
}
|
|
flag = num > 1E-05f;
|
|
}
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x060004CB RID: 1227 RVA: 0x0001BE44 File Offset: 0x0001A044
|
|
[Client]
|
|
private void SendTransform()
|
|
{
|
|
if (this.HasMoved() && ClientScene.readyConnection != null)
|
|
{
|
|
this.m_LocalTransformWriter.StartMessage(6);
|
|
this.m_LocalTransformWriter.Write(base.netId);
|
|
switch (this.transformSyncMode)
|
|
{
|
|
case NetworkTransform.TransformSyncMode.SyncNone:
|
|
return;
|
|
case NetworkTransform.TransformSyncMode.SyncTransform:
|
|
this.SerializeModeTransform(this.m_LocalTransformWriter);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody2D:
|
|
this.SerializeMode2D(this.m_LocalTransformWriter);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody3D:
|
|
this.SerializeMode3D(this.m_LocalTransformWriter);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncCharacterController:
|
|
this.SerializeModeCharacterController(this.m_LocalTransformWriter);
|
|
break;
|
|
}
|
|
if (this.m_RigidBody3D != null)
|
|
{
|
|
this.m_PrevPosition = this.m_RigidBody3D.position;
|
|
this.m_PrevRotation = this.m_RigidBody3D.rotation;
|
|
this.m_PrevVelocity = this.m_RigidBody3D.velocity.sqrMagnitude;
|
|
}
|
|
else if (this.m_RigidBody2D != null)
|
|
{
|
|
this.m_PrevPosition = this.m_RigidBody2D.position;
|
|
this.m_PrevRotation2D = this.m_RigidBody2D.rotation;
|
|
this.m_PrevVelocity = this.m_RigidBody2D.velocity.sqrMagnitude;
|
|
}
|
|
else
|
|
{
|
|
this.m_PrevPosition = base.transform.position;
|
|
this.m_PrevRotation = base.transform.rotation;
|
|
}
|
|
this.m_LocalTransformWriter.FinishMessage();
|
|
ClientScene.readyConnection.SendWriter(this.m_LocalTransformWriter, this.GetNetworkChannel());
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004CC RID: 1228 RVA: 0x0001BFF0 File Offset: 0x0001A1F0
|
|
public static void HandleTransform(NetworkMessage netMsg)
|
|
{
|
|
NetworkInstanceId networkInstanceId = netMsg.reader.ReadNetworkId();
|
|
GameObject gameObject = NetworkServer.FindLocalObject(networkInstanceId);
|
|
if (gameObject == null)
|
|
{
|
|
if (LogFilter.logError)
|
|
{
|
|
Debug.LogError("Received NetworkTransform data for GameObject that doesn't exist");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
NetworkTransform component = gameObject.GetComponent<NetworkTransform>();
|
|
if (component == null)
|
|
{
|
|
if (LogFilter.logError)
|
|
{
|
|
Debug.LogError("HandleTransform null target");
|
|
}
|
|
}
|
|
else if (!component.localPlayerAuthority)
|
|
{
|
|
if (LogFilter.logError)
|
|
{
|
|
Debug.LogError("HandleTransform no localPlayerAuthority");
|
|
}
|
|
}
|
|
else if (netMsg.conn.clientOwnedObjects == null)
|
|
{
|
|
if (LogFilter.logError)
|
|
{
|
|
Debug.LogError("HandleTransform object not owned by connection");
|
|
}
|
|
}
|
|
else if (netMsg.conn.clientOwnedObjects.Contains(networkInstanceId))
|
|
{
|
|
switch (component.transformSyncMode)
|
|
{
|
|
case NetworkTransform.TransformSyncMode.SyncNone:
|
|
return;
|
|
case NetworkTransform.TransformSyncMode.SyncTransform:
|
|
component.UnserializeModeTransform(netMsg.reader, false);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody2D:
|
|
component.UnserializeMode2D(netMsg.reader, false);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncRigidbody3D:
|
|
component.UnserializeMode3D(netMsg.reader, false);
|
|
break;
|
|
case NetworkTransform.TransformSyncMode.SyncCharacterController:
|
|
component.UnserializeModeCharacterController(netMsg.reader, false);
|
|
break;
|
|
}
|
|
component.m_LastClientSyncTime = Time.time;
|
|
}
|
|
else if (LogFilter.logWarn)
|
|
{
|
|
Debug.LogWarning("HandleTransform netId:" + networkInstanceId + " is not for a valid player");
|
|
}
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004CD RID: 1229 RVA: 0x0001C180 File Offset: 0x0001A380
|
|
private static void WriteAngle(NetworkWriter writer, float angle, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
if (compression != NetworkTransform.CompressionSyncMode.None)
|
|
{
|
|
if (compression != NetworkTransform.CompressionSyncMode.Low)
|
|
{
|
|
if (compression == NetworkTransform.CompressionSyncMode.High)
|
|
{
|
|
writer.Write((short)angle);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.Write((short)angle);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.Write(angle);
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004CE RID: 1230 RVA: 0x0001C1D0 File Offset: 0x0001A3D0
|
|
private static float ReadAngle(NetworkReader reader, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
float num;
|
|
if (compression != NetworkTransform.CompressionSyncMode.None)
|
|
{
|
|
if (compression != NetworkTransform.CompressionSyncMode.Low)
|
|
{
|
|
if (compression != NetworkTransform.CompressionSyncMode.High)
|
|
{
|
|
num = 0f;
|
|
}
|
|
else
|
|
{
|
|
num = (float)reader.ReadInt16();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num = (float)reader.ReadInt16();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
num = reader.ReadSingle();
|
|
}
|
|
return num;
|
|
}
|
|
|
|
// Token: 0x060004CF RID: 1231 RVA: 0x0001C22C File Offset: 0x0001A42C
|
|
public static void SerializeVelocity3D(NetworkWriter writer, Vector3 velocity, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
writer.Write(velocity);
|
|
}
|
|
|
|
// Token: 0x060004D0 RID: 1232 RVA: 0x0001C236 File Offset: 0x0001A436
|
|
public static void SerializeVelocity2D(NetworkWriter writer, Vector2 velocity, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
writer.Write(velocity);
|
|
}
|
|
|
|
// Token: 0x060004D1 RID: 1233 RVA: 0x0001C240 File Offset: 0x0001A440
|
|
public static void SerializeRotation3D(NetworkWriter writer, Quaternion rot, NetworkTransform.AxisSyncMode mode, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
switch (mode)
|
|
{
|
|
case NetworkTransform.AxisSyncMode.AxisX:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.x, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisY:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.y, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisZ:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXY:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.x, compression);
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.y, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXZ:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.x, compression);
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisYZ:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.y, compression);
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXYZ:
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.x, compression);
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.y, compression);
|
|
NetworkTransform.WriteAngle(writer, rot.eulerAngles.z, compression);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004D2 RID: 1234 RVA: 0x0001C3B1 File Offset: 0x0001A5B1
|
|
public static void SerializeRotation2D(NetworkWriter writer, float rot, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
NetworkTransform.WriteAngle(writer, rot, compression);
|
|
}
|
|
|
|
// Token: 0x060004D3 RID: 1235 RVA: 0x0001C3BC File Offset: 0x0001A5BC
|
|
public static void SerializeSpin3D(NetworkWriter writer, Vector3 angularVelocity, NetworkTransform.AxisSyncMode mode, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
switch (mode)
|
|
{
|
|
case NetworkTransform.AxisSyncMode.AxisX:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.x, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisY:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.y, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisZ:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXY:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.x, compression);
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.y, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXZ:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.x, compression);
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisYZ:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.y, compression);
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.z, compression);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXYZ:
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.x, compression);
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.y, compression);
|
|
NetworkTransform.WriteAngle(writer, angularVelocity.z, compression);
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Token: 0x060004D4 RID: 1236 RVA: 0x0001C4C5 File Offset: 0x0001A6C5
|
|
public static void SerializeSpin2D(NetworkWriter writer, float angularVelocity, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
NetworkTransform.WriteAngle(writer, angularVelocity, compression);
|
|
}
|
|
|
|
// Token: 0x060004D5 RID: 1237 RVA: 0x0001C4D0 File Offset: 0x0001A6D0
|
|
public static Vector3 UnserializeVelocity3D(NetworkReader reader, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
return reader.ReadVector3();
|
|
}
|
|
|
|
// Token: 0x060004D6 RID: 1238 RVA: 0x0001C4EC File Offset: 0x0001A6EC
|
|
public static Vector3 UnserializeVelocity2D(NetworkReader reader, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
return reader.ReadVector2();
|
|
}
|
|
|
|
// Token: 0x060004D7 RID: 1239 RVA: 0x0001C50C File Offset: 0x0001A70C
|
|
public static Quaternion UnserializeRotation3D(NetworkReader reader, NetworkTransform.AxisSyncMode mode, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
Quaternion identity = Quaternion.identity;
|
|
Vector3 zero = Vector3.zero;
|
|
switch (mode)
|
|
{
|
|
case NetworkTransform.AxisSyncMode.AxisX:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), 0f, 0f);
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisY:
|
|
zero.Set(0f, NetworkTransform.ReadAngle(reader, compression), 0f);
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisZ:
|
|
zero.Set(0f, 0f, NetworkTransform.ReadAngle(reader, compression));
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXY:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression), 0f);
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXZ:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), 0f, NetworkTransform.ReadAngle(reader, compression));
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisYZ:
|
|
zero.Set(0f, NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression));
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXYZ:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression));
|
|
identity.eulerAngles = zero;
|
|
break;
|
|
}
|
|
return identity;
|
|
}
|
|
|
|
// Token: 0x060004D8 RID: 1240 RVA: 0x0001C66C File Offset: 0x0001A86C
|
|
public static float UnserializeRotation2D(NetworkReader reader, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
return NetworkTransform.ReadAngle(reader, compression);
|
|
}
|
|
|
|
// Token: 0x060004D9 RID: 1241 RVA: 0x0001C688 File Offset: 0x0001A888
|
|
public static Vector3 UnserializeSpin3D(NetworkReader reader, NetworkTransform.AxisSyncMode mode, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
Vector3 zero = Vector3.zero;
|
|
switch (mode)
|
|
{
|
|
case NetworkTransform.AxisSyncMode.AxisX:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), 0f, 0f);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisY:
|
|
zero.Set(0f, NetworkTransform.ReadAngle(reader, compression), 0f);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisZ:
|
|
zero.Set(0f, 0f, NetworkTransform.ReadAngle(reader, compression));
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXY:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression), 0f);
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXZ:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), 0f, NetworkTransform.ReadAngle(reader, compression));
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisYZ:
|
|
zero.Set(0f, NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression));
|
|
break;
|
|
case NetworkTransform.AxisSyncMode.AxisXYZ:
|
|
zero.Set(NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression), NetworkTransform.ReadAngle(reader, compression));
|
|
break;
|
|
}
|
|
return zero;
|
|
}
|
|
|
|
// Token: 0x060004DA RID: 1242 RVA: 0x0001C7AC File Offset: 0x0001A9AC
|
|
public static float UnserializeSpin2D(NetworkReader reader, NetworkTransform.CompressionSyncMode compression)
|
|
{
|
|
return NetworkTransform.ReadAngle(reader, compression);
|
|
}
|
|
|
|
// Token: 0x060004DB RID: 1243 RVA: 0x0001C7C8 File Offset: 0x0001A9C8
|
|
public override int GetNetworkChannel()
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
// Token: 0x060004DC RID: 1244 RVA: 0x0001C7E0 File Offset: 0x0001A9E0
|
|
public override float GetNetworkSendInterval()
|
|
{
|
|
return this.m_SendInterval;
|
|
}
|
|
|
|
// Token: 0x060004DD RID: 1245 RVA: 0x0001C7FB File Offset: 0x0001A9FB
|
|
public override void OnStartAuthority()
|
|
{
|
|
this.m_LastClientSyncTime = 0f;
|
|
}
|
|
|
|
// Token: 0x040001F1 RID: 497
|
|
[SerializeField]
|
|
private NetworkTransform.TransformSyncMode m_TransformSyncMode = NetworkTransform.TransformSyncMode.SyncNone;
|
|
|
|
// Token: 0x040001F2 RID: 498
|
|
[SerializeField]
|
|
private float m_SendInterval = 0.1f;
|
|
|
|
// Token: 0x040001F3 RID: 499
|
|
[SerializeField]
|
|
private NetworkTransform.AxisSyncMode m_SyncRotationAxis = NetworkTransform.AxisSyncMode.AxisXYZ;
|
|
|
|
// Token: 0x040001F4 RID: 500
|
|
[SerializeField]
|
|
private NetworkTransform.CompressionSyncMode m_RotationSyncCompression = NetworkTransform.CompressionSyncMode.None;
|
|
|
|
// Token: 0x040001F5 RID: 501
|
|
[SerializeField]
|
|
private bool m_SyncSpin;
|
|
|
|
// Token: 0x040001F6 RID: 502
|
|
[SerializeField]
|
|
private float m_MovementTheshold = 0.001f;
|
|
|
|
// Token: 0x040001F7 RID: 503
|
|
[SerializeField]
|
|
private float m_VelocityThreshold = 0.0001f;
|
|
|
|
// Token: 0x040001F8 RID: 504
|
|
[SerializeField]
|
|
private float m_SnapThreshold = 5f;
|
|
|
|
// Token: 0x040001F9 RID: 505
|
|
[SerializeField]
|
|
private float m_InterpolateRotation = 1f;
|
|
|
|
// Token: 0x040001FA RID: 506
|
|
[SerializeField]
|
|
private float m_InterpolateMovement = 1f;
|
|
|
|
// Token: 0x040001FB RID: 507
|
|
[SerializeField]
|
|
private NetworkTransform.ClientMoveCallback3D m_ClientMoveCallback3D;
|
|
|
|
// Token: 0x040001FC RID: 508
|
|
[SerializeField]
|
|
private NetworkTransform.ClientMoveCallback2D m_ClientMoveCallback2D;
|
|
|
|
// Token: 0x040001FD RID: 509
|
|
private Rigidbody m_RigidBody3D;
|
|
|
|
// Token: 0x040001FE RID: 510
|
|
private Rigidbody2D m_RigidBody2D;
|
|
|
|
// Token: 0x040001FF RID: 511
|
|
private CharacterController m_CharacterController;
|
|
|
|
// Token: 0x04000200 RID: 512
|
|
private bool m_Grounded = true;
|
|
|
|
// Token: 0x04000201 RID: 513
|
|
private Vector3 m_TargetSyncPosition;
|
|
|
|
// Token: 0x04000202 RID: 514
|
|
private Vector3 m_TargetSyncVelocity;
|
|
|
|
// Token: 0x04000203 RID: 515
|
|
private Vector3 m_FixedPosDiff;
|
|
|
|
// Token: 0x04000204 RID: 516
|
|
private Quaternion m_TargetSyncRotation3D;
|
|
|
|
// Token: 0x04000205 RID: 517
|
|
private Vector3 m_TargetSyncAngularVelocity3D;
|
|
|
|
// Token: 0x04000206 RID: 518
|
|
private float m_TargetSyncRotation2D;
|
|
|
|
// Token: 0x04000207 RID: 519
|
|
private float m_TargetSyncAngularVelocity2D;
|
|
|
|
// Token: 0x04000208 RID: 520
|
|
private float m_LastClientSyncTime;
|
|
|
|
// Token: 0x04000209 RID: 521
|
|
private float m_LastClientSendTime;
|
|
|
|
// Token: 0x0400020A RID: 522
|
|
private Vector3 m_PrevPosition;
|
|
|
|
// Token: 0x0400020B RID: 523
|
|
private Quaternion m_PrevRotation;
|
|
|
|
// Token: 0x0400020C RID: 524
|
|
private float m_PrevRotation2D;
|
|
|
|
// Token: 0x0400020D RID: 525
|
|
private float m_PrevVelocity;
|
|
|
|
// Token: 0x0400020E RID: 526
|
|
private const float k_LocalMovementThreshold = 1E-05f;
|
|
|
|
// Token: 0x0400020F RID: 527
|
|
private const float k_LocalRotationThreshold = 1E-05f;
|
|
|
|
// Token: 0x04000210 RID: 528
|
|
private const float k_LocalVelocityThreshold = 1E-05f;
|
|
|
|
// Token: 0x04000211 RID: 529
|
|
private const float k_MoveAheadRatio = 0.1f;
|
|
|
|
// Token: 0x04000212 RID: 530
|
|
private NetworkWriter m_LocalTransformWriter;
|
|
|
|
// Token: 0x0200005E RID: 94
|
|
public enum TransformSyncMode
|
|
{
|
|
// Token: 0x04000214 RID: 532
|
|
SyncNone,
|
|
// Token: 0x04000215 RID: 533
|
|
SyncTransform,
|
|
// Token: 0x04000216 RID: 534
|
|
SyncRigidbody2D,
|
|
// Token: 0x04000217 RID: 535
|
|
SyncRigidbody3D,
|
|
// Token: 0x04000218 RID: 536
|
|
SyncCharacterController
|
|
}
|
|
|
|
// Token: 0x0200005F RID: 95
|
|
public enum AxisSyncMode
|
|
{
|
|
// Token: 0x0400021A RID: 538
|
|
None,
|
|
// Token: 0x0400021B RID: 539
|
|
AxisX,
|
|
// Token: 0x0400021C RID: 540
|
|
AxisY,
|
|
// Token: 0x0400021D RID: 541
|
|
AxisZ,
|
|
// Token: 0x0400021E RID: 542
|
|
AxisXY,
|
|
// Token: 0x0400021F RID: 543
|
|
AxisXZ,
|
|
// Token: 0x04000220 RID: 544
|
|
AxisYZ,
|
|
// Token: 0x04000221 RID: 545
|
|
AxisXYZ
|
|
}
|
|
|
|
// Token: 0x02000060 RID: 96
|
|
public enum CompressionSyncMode
|
|
{
|
|
// Token: 0x04000223 RID: 547
|
|
None,
|
|
// Token: 0x04000224 RID: 548
|
|
Low,
|
|
// Token: 0x04000225 RID: 549
|
|
High
|
|
}
|
|
|
|
// Token: 0x02000061 RID: 97
|
|
// (Invoke) Token: 0x060004DF RID: 1247
|
|
public delegate bool ClientMoveCallback3D(ref Vector3 position, ref Vector3 velocity, ref Quaternion rotation);
|
|
|
|
// Token: 0x02000062 RID: 98
|
|
// (Invoke) Token: 0x060004E3 RID: 1251
|
|
public delegate bool ClientMoveCallback2D(ref Vector2 position, ref Vector2 velocity, ref float rotation);
|
|
}
|
|
}
|