Files
2026-05-26 16:15:54 +08:00

98 lines
2.3 KiB
C#

using asap.core;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
public enum ERightState
{
Idle,
Throwing,
Waiting,
Piercing,
Drawing,
Pulling,
Preparing,
Noviceguide,
MaxCombo,
Shock,
PiercingSp,
}
[Serializable]
public class RightState
{
public ERightState state;
public float time;
public Vector3 pos;
}
public class HandPosController : MonoBehaviour
{
[Header("专为钓场钓鱼使用,其他场景不再初始化")]
public List<RightState> RightStateDic;
public ERightState curERightState;
Coroutine coroutine;
IDisposable disposable;
bool isInFishingAct = false;
private void Awake()
{
IAct act = GContext.container.ResolveAct("ShooterFishAct");
isInFishingAct = act == null;
}
private void OnEnable()
{
if (isInFishingAct)
{
disposable = GContext.OnEvent<ERightState>().Subscribe(SetRightStateDic);
SetRightStateDic(ERightState.Preparing);
}
}
public void SetRightStateDic(ERightState state)
{
RightState rightState = null;
foreach (var item in RightStateDic)
{
if (item.state == state)
{
rightState = item;
break;
}
}
if (rightState != null)
{
if (coroutine != null)
{
StopCoroutine(coroutine);
}
coroutine = StartCoroutine(SetRightHandTarget(rightState));
}
}
IEnumerator SetRightHandTarget(RightState rightState)
{
curERightState = rightState.state;
Vector3 pos = rightState.pos;
Vector3 starPos = transform.localPosition;
float time = rightState.time;
float timer = 0;
if (time > 0.01)
{
while (timer < time)
{
timer += Time.deltaTime;
transform.localPosition = Vector3.Lerp(starPos, pos, timer / time);
yield return null;
}
}
else
{
transform.localPosition = pos;
}
}
private void OnDisable()
{
disposable?.Dispose();
disposable = null;
}
}