mixedcards/Assets/Battle/BattleParticipantSprite.cs
2020-09-26 22:23:52 -04:00

88 lines
3 KiB
C#

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<SpriteRenderer>().material = hitEffectMaterial;
}
// Start is called before the first frame update
void Start() {
gameObject.AddComponent<BoxCollider2D>();
Animator animator = gameObject.AddComponent<Animator>();
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 bool colorChanged;
void OnMouseEnter() {
if (!this.removedFromBattle && this.playerControls.CouldTarget(participant)) {
SpriteRenderer sprite = GetComponent<SpriteRenderer>();
sprite.material.SetFloat("_Glow", 1f);
this.colorChanged = true;
}
}
void OnMouseExit() {
if (this.colorChanged) {
SpriteRenderer sprite = GetComponent<SpriteRenderer>();
sprite.material.SetFloat("_Glow", 0f);
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<SpriteRenderer>();
sprite.enabled = false;
BoxCollider2D collider = GetComponent<BoxCollider2D>();
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>();
animator.Play("Hit");
}
}
}