public void AddOverride(RespawningBodyOverride respawningBodyOverride) { if (overrides == null) { overrides = new List <RespawningBodyOverride>(); } overrides.Add(respawningBodyOverride); }
public void Respawn(Vector3 offset) { if (ReplayRecorder.isPlaying || NetGame.isClient) { return; } GrabManager.Release(base.gameObject); Vector3 vector = startPos + offset; Quaternion quaternion = startRot; if (overrides != null) { RespawningBodyOverride respawningBodyOverride = null; for (int i = 0; i < overrides.Count; i++) { if (overrides[i].checkpoint.number <= Game.instance.currentCheckpointNumber && (respawningBodyOverride == null || overrides[i].checkpoint.number > respawningBodyOverride.checkpoint.number)) { respawningBodyOverride = overrides[i]; } } if (respawningBodyOverride != null) { vector = respawningBodyOverride.initialToNewLocationMatrtix.MultiplyPoint3x4(vector); quaternion = respawningBodyOverride.initialToNewLocationRotation * quaternion; } } mJustReset = 5; mResetPosition = vector; mResetRotation = quaternion; base.transform.position = vector; base.transform.rotation = quaternion; if (syncLocalScale) { base.transform.localScale = startLocalScale; } UpdateVisibility(); if (m_respawnEvent != null) { m_respawnEvent.Invoke(); } else { Debug.LogError("Null respawn event.", this); } }