summaryrefslogtreecommitdiff
path: root/GameCode/SpawnObjectEffect.cs
blob: a383ff9f805f42a9d6bc1e4d1cee832d86dbbedb (plain)
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;
				}
			}
		}
	}
}