From 766cdff5ffa72b65d7f106658d1603f47739b2ba Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 27 Oct 2023 11:05:14 +0800 Subject: + init --- GameCode/Empower.cs | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 GameCode/Empower.cs (limited to 'GameCode/Empower.cs') diff --git a/GameCode/Empower.cs b/GameCode/Empower.cs new file mode 100644 index 0000000..742e29a --- /dev/null +++ b/GameCode/Empower.cs @@ -0,0 +1,110 @@ +using System; +using Sonigon; +using UnityEngine; + +public class Empower : MonoBehaviour +{ + public SoundEvent soundEmpowerSpawn; + + public GameObject addObjectToBullet; + + public float dmgMultiplier = 2f; + + public float speedMultiplier = 2f; + + public Color empowerColor; + + private CharacterData data; + + private ParticleSystem[] parts; + + private Transform particleTransform; + + private bool empowered; + + private bool isOn; + + private void Start() + { + particleTransform = base.transform.GetChild(0); + data = GetComponentInParent(); + parts = GetComponentsInChildren(); + HealthHandler healthHandler = GetComponentInParent().data.healthHandler; + healthHandler.reviveAction = (Action)Delegate.Combine(healthHandler.reviveAction, new Action(ResetEmpower)); + Gun gun = data.weaponHandler.gun; + gun.ShootPojectileAction = (Action)Delegate.Combine(gun.ShootPojectileAction, new Action(Attack)); + Block componentInParent = GetComponentInParent(); + componentInParent.BlockAction = (Action)Delegate.Combine(componentInParent.BlockAction, new Action(Block)); + } + + private void OnDestroy() + { + HealthHandler healthHandler = GetComponentInParent().data.healthHandler; + healthHandler.reviveAction = (Action)Delegate.Remove(healthHandler.reviveAction, new Action(ResetEmpower)); + Gun gun = data.weaponHandler.gun; + gun.ShootPojectileAction = (Action)Delegate.Remove(gun.ShootPojectileAction, new Action(Attack)); + Block componentInParent = GetComponentInParent(); + componentInParent.BlockAction = (Action)Delegate.Remove(componentInParent.BlockAction, new Action(Block)); + } + + private void ResetEmpower() + { + empowered = false; + } + + public void Block(BlockTrigger.BlockTriggerType trigger) + { + if (trigger != BlockTrigger.BlockTriggerType.Echo && trigger != BlockTrigger.BlockTriggerType.Empower && trigger != BlockTrigger.BlockTriggerType.ShieldCharge) + { + empowered = true; + } + } + + public void Attack(GameObject projectile) + { + SpawnedAttack component = projectile.GetComponent(); + if (!component) + { + return; + } + if (empowered) + { + ProjectileHit component2 = projectile.GetComponent(); + MoveTransform component3 = projectile.GetComponent(); + component.SetColor(empowerColor); + component2.damage *= dmgMultiplier; + component3.localForce *= speedMultiplier; + if ((bool)addObjectToBullet) + { + UnityEngine.Object.Instantiate(addObjectToBullet, projectile.transform.position, projectile.transform.rotation, projectile.transform); + } + } + empowered = false; + } + + private void Update() + { + if (empowered) + { + particleTransform.transform.position = data.weaponHandler.gun.transform.position; + particleTransform.transform.rotation = data.weaponHandler.gun.transform.rotation; + if (!isOn) + { + SoundManager.Instance.PlayAtPosition(soundEmpowerSpawn, SoundManager.Instance.GetTransform(), base.transform); + for (int i = 0; i < parts.Length; i++) + { + parts[i].Play(); + } + isOn = true; + } + } + else if (isOn) + { + for (int j = 0; j < parts.Length; j++) + { + parts[j].Stop(); + } + isOn = false; + } + } +} -- cgit v1.1-26-g67d0