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
|
using Sirenix.OdinInspector;
using UnityEngine;
public class SpawnObjectEffect : MonoBehaviour
{
public enum Dir
{
TowardsEnemy,
DamageDirction,
ReverseDamageDir,
TowardsRecentlyDamaged
}
public Dir dir;
[FoldoutGroup("Gun", 0)]
public bool spawnAttack;
[FoldoutGroup("Gun", 0)]
public float bulletDamageMultiplier = 0.5f;
[FoldoutGroup("Gun", 0)]
public int numberOfattacks = 1;
[FoldoutGroup("Gun", 0)]
public float spread;
[FoldoutGroup("Gun", 0)]
public float gravityMultiplier = 1f;
[FoldoutGroup("Gun", 0)]
public float speedMultiplier = 1f;
[FoldoutGroup("Gun", 0)]
public float extraSpread;
[FoldoutGroup("Gun", 0)]
public float recoilMultiplier = 1f;
[FoldoutGroup("Gun", 0)]
public int maxBullets = 100;
private Holding holding;
private Gun gun;
private Player player;
private void Start()
{
holding = GetComponentInParent<Holding>();
player = GetComponentInParent<Player>();
}
public void DoEffect(Vector2 dmg)
{
int num = 0;
if (!spawnAttack)
{
return;
}
for (int i = 0; i < numberOfattacks; i++)
{
if (!gun && (bool)holding && (bool)holding.holdable)
{
gun = holding.holdable.GetComponent<Gun>();
}
if ((bool)gun)
{
Quaternion rotation = gun.transform.rotation;
Vector3 vector = (PlayerManager.instance.GetOtherPlayer(player).transform.position - base.transform.position).normalized;
if (dir == Dir.DamageDirction)
{
vector = dmg.normalized;
}
if (dir == Dir.ReverseDamageDir)
{
vector = -dmg.normalized;
}
if (dir == Dir.TowardsRecentlyDamaged)
{
vector = (player.data.lastDamagedPlayer.transform.position - base.transform.position).normalized;
}
gun.transform.rotation = Quaternion.LookRotation(Vector3.forward, vector + gun.transform.right * Random.Range(0f - spread, spread));
gun.projectileSpeed *= speedMultiplier;
gun.gravity *= gravityMultiplier;
gun.spread += extraSpread;
gun.Attack(1f, forceAttack: true, bulletDamageMultiplier, recoilMultiplier);
num += (int)((float)gun.numberOfProjectiles + gun.chargeNumberOfProjectilesTo);
gun.projectileSpeed /= speedMultiplier;
gun.gravity /= gravityMultiplier;
gun.spread -= extraSpread;
gun.transform.rotation = rotation;
if (num > maxBullets)
{
break;
}
}
}
}
}
|