Run-and-capture/Assets/Scripts/Units/PlayerControl.cs

104 lines
2.8 KiB
C#

using System;
using Controller;
using Data;
using DG.Tweening;
using HexFiled;
using Runtime.Controller;
using Units;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Chars
{
public class PlayerControl : IFixedExecute, IExecute
{
private Unit _unit;
private FloatingJoystick _moveJoystick;
private FloatingJoystick _attackJoystick;
private Camera _camera;
private Vector2 _attackDircetion;
public PlayerControl(Unit unit, PlayerControlView joyView)
{
_unit = unit;
_moveJoystick = joyView.MoveJoystick;
_attackJoystick = joyView.AttackJoystick;
_camera = Camera.main;
_attackJoystick.OnTouchUp += DoAttack;
_attackJoystick.OnTouchDown += AimCanvas;
}
private void DoAttack()
{
_unit.UnitView.AimCanvas.SetActive(false);
_unit.StartAttack();
}
private void AimCanvas()
{
if (!_unit.IsBusy)
_unit.UnitView.AimCanvas.SetActive(true);
}
public void FixedExecute()
{
if (!_unit.IsBusy && _moveJoystick.Direction != Vector2.zero)
{
_unit.Move(VectorToDirection(_moveJoystick.Direction.normalized));
}
if (!_unit.IsBusy && _attackJoystick.isPressed)
{
_attackDircetion = _attackJoystick.Direction.normalized;
_unit.Aim(_attackDircetion);
}
}
private static HexDirection VectorToDirection(Vector2 dir)
{
if (dir.x >= 0 && dir.y <= 1 && dir.x <= 1 && dir.y >= 0.5)
{
return HexDirection.NE;
}
if (Math.Abs(dir.x - 1f) < 0.2 && dir.y <= 0.5 && dir.y >= -0.5)
{
return HexDirection.E;
}
if (dir.x <= 1 && dir.y <= -0.5 && dir.x >= 0 && dir.y >= -1)
{
return HexDirection.SE;
}
if (dir.x <= 0 && dir.y >= -1 && dir.x >= -1 && dir.y <= -0.5)
{
return HexDirection.SW;
}
if (Math.Abs(dir.x - (-1f)) < 0.2 && dir.y >= -0.5 && dir.y <= 0.5)
{
return HexDirection.W;
}
if (dir.x >= -1 && dir.y >= 0.5 && dir.x <= 0 && dir.y <= 1)
{
return HexDirection.NW;
}
return HexDirection.W;
}
public void Execute()
{
if (_unit.IsAlive)
{
_unit.UnitView.BarCanvas.transform.DOLookAt(
_unit.UnitView.BarCanvas.transform.position + _camera.transform.rotation * Vector3.back, 0f,
up: _camera.transform.rotation * Vector3.up);
}
}
}
}