-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathEffect_Garlic.cs
103 lines (84 loc) · 2.59 KB
/
Effect_Garlic.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using Landfall.TABS;
using TGCore.Library;
using UnityEngine;
using UnityEngine.Events;
namespace HiddenUnits
{
public class Effect_Garlic : UnitEffectBase
{
private void Init()
{
OwnUnit = transform.root.GetComponent<Unit>();
}
public override void DoEffect()
{
doEffectEvent.Invoke();
}
public override void Ping()
{
pingEvent.Invoke();
}
private void Update()
{
if (!OwnUnit || Done) return;
Counter += Time.deltaTime;
if (Counter < runTime)
{
OwnUnit.unitConfusion = Amount * multiplier * Direction;
Counter += Time.deltaTime;
if (OwnUnit.data.weaponHandler) OwnUnit.data.weaponHandler.StopAttacksFor(1f);
var forward = OwnUnit.data.mainRig.transform.forward;
OwnUnit.data.mainRig.AddTorque(torque * Vector2.Angle(forward, Direction) * Time.deltaTime * Vector3.up, ForceMode.Acceleration);
var allRigs = OwnUnit.data.allRigs.AllRigs;
foreach (var rig in allRigs)
{
if ((bool)rig)
{
rig.AddForce(force * Time.deltaTime * Mathf.Clamp(rig.drag, 0f, 1f) * Direction, ForceMode.Acceleration);
}
}
OwnUnit.data.mainRig.AddForce(force * Mathf.Clamp(OwnUnit.data.mainRig.drag, 0f, 1f) * Time.deltaTime * Direction, ForceMode.Acceleration);
}
else if (!Done)
{
Done = true;
OwnUnit.unitConfusion = Vector3.zero;
}
}
public void DoTheThing()
{
Init();
if (OwnUnit && OwnUnit.data && OwnUnit.data.targetData && !OwnUnit.GetComponentInChildren<IsVampire>())
{
Amount += 1.5f / Mathf.Clamp(OwnUnit.data.maxHealth * 0.02f, 0.1f, float.PositiveInfinity);
Direction = -(OwnUnit.data.targetData.mainRig.position - OwnUnit.data.mainRig.position).normalized;
Direction.y = 0.2f;
Direction = Direction.normalized;
Counter = 0f;
}
else if (OwnUnit && OwnUnit.data && OwnUnit.data.targetData)
{
var killed = OwnUnit.data.health <= vampireDamage;
OwnUnit.data.healthHandler.TakeDamage(vampireDamage, Vector3.zero, OwnUnit, DamageType.Magic);
if (killed) banishVampireEvent.Invoke();
else hurtVampireEvent.Invoke();
}
}
private Unit OwnUnit;
private float Amount;
private float Counter;
private Vector3 Direction;
private bool Done;
public UnityEvent doEffectEvent = new();
public UnityEvent pingEvent = new();
[Header("Vampire")]
public UnityEvent banishVampireEvent = new();
public UnityEvent hurtVampireEvent = new();
public float vampireDamage;
[Header("Non-Vampire")]
public float multiplier = 1f;
public float torque = 1f;
public float force = 1f;
public float runTime = 3f;
}
}