summaryrefslogtreecommitdiff
path: root/Client/Assembly-CSharp/KillAnimation.cs
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2020-12-30 20:59:04 +0800
committerchai <chaifix@163.com>2020-12-30 20:59:04 +0800
commite9ea621b93fbb58d9edfca8375918791637bbd52 (patch)
tree19ce3b1c1f2d51eda6878c9d0f2c9edc27f13650 /Client/Assembly-CSharp/KillAnimation.cs
+init
Diffstat (limited to 'Client/Assembly-CSharp/KillAnimation.cs')
-rw-r--r--Client/Assembly-CSharp/KillAnimation.cs52
1 files changed, 52 insertions, 0 deletions
diff --git a/Client/Assembly-CSharp/KillAnimation.cs b/Client/Assembly-CSharp/KillAnimation.cs
new file mode 100644
index 0000000..d6e980a
--- /dev/null
+++ b/Client/Assembly-CSharp/KillAnimation.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections;
+using PowerTools;
+using UnityEngine;
+
+public class KillAnimation : MonoBehaviour
+{
+ public AnimationClip BlurAnim;
+
+ public DeadBody bodyPrefab;
+
+ public Vector3 BodyOffset;
+
+ public IEnumerator CoPerformKill(PlayerControl source, PlayerControl target)
+ {
+ bool isParticipant = PlayerControl.LocalPlayer == source || PlayerControl.LocalPlayer == target;
+ PlayerPhysics sourcePhys = source.MyPhysics;
+ KillAnimation.SetMovement(source, false);
+ KillAnimation.SetMovement(target, false);
+ if (isParticipant)
+ {
+ Camera.main.GetComponent<FollowerCamera>().Locked = true;
+ }
+ target.Die(DeathReason.Kill);
+ SpriteAnim sourceAnim = source.GetComponent<SpriteAnim>();
+ yield return new WaitForAnimationFinish(sourceAnim, this.BlurAnim);
+ source.NetTransform.SnapTo(target.transform.position);
+ sourceAnim.Play(sourcePhys.IdleAnim, 1f);
+ KillAnimation.SetMovement(source, true);
+ DeadBody deadBody = UnityEngine.Object.Instantiate<DeadBody>(this.bodyPrefab);
+ Vector3 vector = target.transform.position + this.BodyOffset;
+ vector.z = vector.y / 1000f;
+ deadBody.transform.position = vector;
+ deadBody.ParentId = target.PlayerId;
+ target.SetPlayerMaterialColors(deadBody.GetComponent<Renderer>());
+ KillAnimation.SetMovement(target, true);
+ if (isParticipant)
+ {
+ Camera.main.GetComponent<FollowerCamera>().Locked = false;
+ }
+ yield break;
+ }
+
+ public static void SetMovement(PlayerControl source, bool canMove)
+ {
+ source.moveable = canMove;
+ source.MyPhysics.ResetAnim(false);
+ source.NetTransform.enabled = canMove;
+ source.MyPhysics.enabled = canMove;
+ source.NetTransform.Halt();
+ }
+}