103 lines
3.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|