using System.Collections; using System.Collections.Generic; using UnityEngine; public class BattleParticipantSprite : MonoBehaviour { public delegate void SpriteClickedAction(BattleParticipant participant); public event SpriteClickedAction OnSpriteClicked; private BattlePlayerControls playerControls; private BattleParticipant participant; private RuntimeAnimatorController animatorController; private bool removedFromBattle; public void Init(BattlePlayerControls playerControls, BattleParticipant participant, Material hitEffectMaterial, RuntimeAnimatorController animatorController) { this.playerControls = playerControls; this.participant = participant; this.animatorController = animatorController; this.removedFromBattle = false; this.GetComponent().material = hitEffectMaterial; } // Start is called before the first frame update void Start() { gameObject.AddComponent(); Animator animator = gameObject.AddComponent(); animator.runtimeAnimatorController = this.animatorController; } // Update is called once per frame void Update() { if (this.colorChanged && !this.playerControls.CouldTarget(participant)) { OnMouseExit(); } } void OnMouseDown() { if (!this.removedFromBattle) { OnSpriteClicked(participant); } } private Color savedColor; private bool colorChanged; void OnMouseEnter() { if (!this.removedFromBattle && this.playerControls.CouldTarget(participant)) { SpriteRenderer sprite = GetComponent(); this.savedColor = sprite.color; sprite.color = Color.Lerp(this.savedColor, Color.white, .5f); this.colorChanged = true; } } void OnMouseExit() { if (this.colorChanged) { SpriteRenderer sprite = GetComponent(); sprite.color = this.savedColor; this.colorChanged = false; } } public void NotifyDeath(BattleParticipant deadParticipant) { if (deadParticipant != this.participant) { throw new System.InvalidOperationException( "BattleParticipantSprite received NotifyDeath for another battle participant."); } if (!this.removedFromBattle) { SpriteRenderer sprite = GetComponent(); sprite.enabled = false; BoxCollider2D collider = GetComponent(); collider.enabled = false; this.removedFromBattle = true; } } public void NotifyHit(BattleParticipant deadParticipant) { if (deadParticipant != this.participant) { throw new System.InvalidOperationException( "BattleParticipantSprite received NotifyHit for another battle participant."); } if (!this.removedFromBattle) { Animator animator = gameObject.GetComponent(); animator.Play("Hit"); } } }