Felix Boucher 092aa026c8 drag&drop - montrer range et tweaker outline
problème :

- le range d'attaque n'apparaissait pas sur le placeholder des unités
- le outline ne fonctionnait pas bien sur toutes les unités
- le placeholder étant opaque, on ne pouvait pas voir la tuile en dessous

solutions :
- utiliser les bounds du collider de détection pour tracer le range des unités sur le placeholder
- utiliser un shader pour tracer un outline colorable autour des unités
- rendre le placeholder plus transparent
2023-06-13 18:30:15 -04:00

78 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Detection : MonoBehaviour
{
public Rect DetectionRectangle
{
get
{
var collider = GetComponent<Collider2D>();
var bounds = collider.bounds;
return new Rect(bounds.min - transform.position, bounds.size);
}
}
[SerializeField]
private Entity _entityLinked;
//If it's a projectile damage > 0
private int _projectileDamage = 0;
void OnTriggerEnter2D(Collider2D other)
{
//Projectiles detection + damage deal
if(_projectileDamage > 0 && other.gameObject.GetComponent<Entity>() == _entityLinked) {
other.gameObject.GetComponent<Entity>().Hp -= _projectileDamage;
//Kill if no hp
if(other.gameObject.GetComponent<Entity>().Hp <= 0) {
Destroy(other.gameObject);
}
}
}
void OnTriggerStay2D(Collider2D other) {
if(_entityLinked.Enemy == null) {
//Detect the enemy and inform the Ally
if (other.gameObject.tag == "Opponent" && _entityLinked is Ally) {
_entityLinked.IsEnemyDetected = true;
_entityLinked.Enemy = other.gameObject.GetComponent<Entity>();
}
//Detect the enemy and inform the Opponent
if (other.gameObject.tag == "Ally" && _entityLinked is Opponent) {
_entityLinked.IsEnemyDetected = true;
_entityLinked.Enemy = other.gameObject.GetComponent<Entity>();
}
}
}
void OnTriggerExit2D(Collider2D other)
{
if(_projectileDamage == 0) {
if ((other.gameObject.tag == "Opponent" && _entityLinked is Ally) || (other.gameObject.tag == "Ally" && _entityLinked is Opponent)) {
_entityLinked.IsEnemyDetected = false;
}
}
}
//Getter and Setter
public Entity EntityLinked
{
get { return _entityLinked; }
set { _entityLinked = value; }
}
public int ProjectileDamage
{
get { return _projectileDamage; }
set { _projectileDamage = value; }
}
}