73 lines
2.5 KiB
C#
73 lines
2.5 KiB
C#
using System;
|
|
using DefaultNamespace;
|
|
using DG.Tweening;
|
|
using HexFiled;
|
|
using Sirenix.OdinInspector;
|
|
using Units;
|
|
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 bool isLifeByTime = true;
|
|
[SerializeField, ShowIf("isLifeByTime")] private float lifeTime;
|
|
|
|
|
|
|
|
public override void Invoke(ItemContainer container)
|
|
{
|
|
|
|
if(container.AimInstance == null)
|
|
container.AimInstance = Object.Instantiate(_aimGameObject, container.Unit.Instance.transform);
|
|
container.AimInstance.SetActive(false);
|
|
}
|
|
|
|
|
|
public void Aim(ItemContainer container, Vector2 direction)
|
|
{
|
|
|
|
container.AimInstance.SetActive(true);
|
|
container.AimInstance.transform.LookAt(
|
|
new Vector3(direction.x, 0, direction.y) + container.Unit.UnitView.transform.position);
|
|
container.Direction = direction;
|
|
}
|
|
|
|
|
|
public void Fire(ItemContainer container)
|
|
{
|
|
container.OnItemUsed.Invoke();
|
|
container.Unit.UseItem(this);
|
|
|
|
container.Unit.RotateUnit(container.Direction);
|
|
_weapon.SetModifiedDamage(0);
|
|
_weapon.objectToThrow.GetComponent<ISetUp>().SetUp(container.Unit);
|
|
container.DeAim();
|
|
|
|
TimerHelper.Instance.StartTimer(() =>
|
|
{
|
|
var ball = _weapon.Fire(container.Unit.Instance.transform, container.Direction, container.Unit);
|
|
if (isLifeByTime)
|
|
{
|
|
TimerHelper.Instance.StartTimer(() =>
|
|
{
|
|
if (ball == null)
|
|
return;
|
|
var vfx = VFXController.Instance.PlayEffect(_weapon.VFXGameObject, ball.transform.position,
|
|
Quaternion.identity);
|
|
MusicController.Instance.AddAudioSource(vfx);
|
|
MusicController.Instance.PlayAudioClip(_weapon.hitSound, vfx);
|
|
ball.transform.DOKill();
|
|
Object.Destroy(ball);
|
|
}, lifeTime);
|
|
}
|
|
}, 0.1f);
|
|
|
|
}
|
|
}
|
|
} |