DRHPS/code-csharp/en_US/Bullet_Generic.cs
2025-04-08 11:31:35 +08:00

103 lines
3.0 KiB
C#

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<SpriteRenderer>();
}
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<BattlePartyMember> 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;
}
}
}