60 lines
2.0 KiB
C#
60 lines
2.0 KiB
C#
using System;
|
|
using DefaultNamespace;
|
|
using DG.Tweening;
|
|
using HexFiled;
|
|
using UnityEngine;
|
|
using Weapons;
|
|
using Object = UnityEngine.Object;
|
|
|
|
namespace Items
|
|
{
|
|
[CreateAssetMenu(fileName = "SpecialWeapon", menuName = "Item/Special Weapon")]
|
|
public class SpecialWeapon : Item
|
|
{
|
|
[SerializeField] private Weapon _weapon;
|
|
[SerializeField] private GameObject _aimGameObject;
|
|
[SerializeField] private float lifeTime;
|
|
|
|
private GameObject _aimInstance;
|
|
private HexDirection _direction;
|
|
|
|
public void Invoke(Action action)
|
|
{
|
|
OnItemUsed ??= action;
|
|
|
|
if(_aimInstance == null || !_aimInstance.activeSelf)
|
|
_aimInstance = Object.Instantiate(_aimGameObject, Unit.Instance.transform);
|
|
_aimInstance.SetActive(false);
|
|
}
|
|
|
|
public void Aim(HexDirection direction)
|
|
{
|
|
_aimInstance.SetActive(true);
|
|
_aimInstance.transform.LookAt(HexManager.UnitCurrentCell[Unit.Color].cell
|
|
.GetNeighbor(direction).transform);
|
|
_direction = direction;
|
|
}
|
|
|
|
public void DeAim()
|
|
{
|
|
_aimInstance.SetActive(false);
|
|
}
|
|
|
|
public void Fire()
|
|
{
|
|
var cell = HexManager.UnitCurrentCell[Unit.Color].cell.GetNeighbor(_direction);
|
|
Unit.RotateUnit(new Vector2((cell.transform.position - Unit.Instance.transform.position).normalized.x,
|
|
(cell.transform.position - Unit.Instance.transform.position).normalized.z));
|
|
_weapon.SetModifiedDamage(0);
|
|
_weapon.objectToThrow.GetComponent<ISetUp>().SetUp(Unit);
|
|
_aimInstance.SetActive(false);
|
|
var dir = DirectionHelper.DirectionTo(Unit.Instance.transform.position, cell.transform.position);
|
|
_weapon.Fire(Unit.Instance.transform, new Vector2(dir.x, dir.z));
|
|
TimerHelper.Instance.StartTimer(() =>
|
|
{
|
|
_weapon.DestroyBall();
|
|
}, lifeTime);
|
|
OnItemUsed?.Invoke();
|
|
}
|
|
}
|
|
} |