using System.Collections.Generic; using System.Linq; using UnityEngine; public class Bullet_Generic : MonoBehaviour { [Header("- References -")] public SpriteRenderer _Renderer; [Header("- Settings -")] public BattleEnemy Dealer; public int GrazeGain = 4; public Color DefaultColor = Color.white; public Color Color_Heal = Color.green; public bool DestroyOnDamage; public bool ChangeTargetAfterDamage = true; private BattlePartyMember InternalTarget; private void Awake() { ChooseNewRandomTarget(); } private void Start() { if (_Renderer == null) { _Renderer = base.gameObject.GetComponent(); } if (_Renderer == null) { Debug.LogWarning(base.gameObject.name + " + couldn't locate SpriteRenderer, \"_Renderer\""); } else if (CalculateDamage(InternalTarget) >= 0) { _Renderer.color = new Color(DefaultColor.r, DefaultColor.g, DefaultColor.b, _Renderer.color.a); } else { _Renderer.color = new Color(Color_Heal.r, Color_Heal.g, Color_Heal.b, _Renderer.color.a); } } private void OnTriggerStay2D(Collider2D collision) { if (collision.gameObject.tag == "Battle_Soul" && InternalTarget != null) { if (!Battle_PlayerSoul.Instance.DamageCooldown && Battle_PlayerSoul.Instance.CurrentSoulState == Battle_PlayerSoul.SoulState.Active) { int num = CalculateDamage(InternalTarget); Battle_PlayerSoul.TakeDamage(this, num); BattleSystem.Instance.DamagePartyMember(InternalTarget, num); } if (DestroyOnDamage) { Object.Destroy(base.gameObject); } if (ChangeTargetAfterDamage) { ChooseNewRandomTarget(); } } } public int CalculateDamage(BattlePartyMember Target) { if (Target == null) { return 0; } float num = 5 * Dealer.ATK; for (int i = 0; i < Target.PartyMemberInBattle.DF; i++) { num = ((!(num > (float)(Target.PartyMemberInBattle.MaximumHealth / 5))) ? ((!(num > (float)(Target.PartyMemberInBattle.MaximumHealth / 8))) ? (num - 1f) : (num - 2f)) : (num - 3f)); } if (Target.IsDefending) { num *= 2f / 3f; num = Mathf.CeilToInt(num); } return (int)Mathf.Clamp(Mathf.RoundToInt(num), 1f, float.PositiveInfinity); } private void ChooseNewRandomTarget() { List list = BattleSystem.Instance.BattlePartyMembers.Where((BattlePartyMember member) => member.PartyMember_Health > 0f).ToList(); if (list.Count > 0) { InternalTarget = list[Random.Range(0, list.Count)]; } else { InternalTarget = null; } } }