备份CatanBuilding瘦身独立工程
This commit is contained in:
96
Assets/Scripts/EventBreak/EventBreakDrill.cs
Normal file
96
Assets/Scripts/EventBreak/EventBreakDrill.cs
Normal file
@@ -0,0 +1,96 @@
|
||||
using UnityEngine;
|
||||
using Spine.Unity;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using DG.Tweening;
|
||||
using asap.core;
|
||||
using Game;
|
||||
|
||||
public class EventBreakDrill : EventBreakDrillDisplay
|
||||
{
|
||||
[SerializeField] private SkeletonGraphic aniDrill;
|
||||
private const string _drillAnimationStart = "drill_start", _drillAnimationSpin = "drill_spin", _drillAnimationIdle = "drill_idle";
|
||||
[SerializeField] private float _jiandaDrillResetDuration = 0.3f;
|
||||
[SerializeField] private GameObject fxDrill;
|
||||
private Vector3 _originalPos;
|
||||
|
||||
public override void Init(int tunnelIndex)
|
||||
{
|
||||
_originalPos = transform.position;
|
||||
gameObject.SetActive(false);
|
||||
// Debug.Log($"[EventBreak] Wakeup! Drill {tunnelIndex} init!", this);
|
||||
}
|
||||
|
||||
public override async void PlayDrill(float readyDuration = 0)
|
||||
{
|
||||
// Debug.Log($"[EventBreak] Wakeup! Drill played!", this);
|
||||
fxDrill.SetActive(true);
|
||||
GContext.Publish(new EventUISound("audio_ui_drill_drill_launch", 0));
|
||||
await PlayDrillAnimationReady(_drillAnimationStart, readyDuration);
|
||||
PlayDrillAnimationLoop(_drillAnimationSpin);
|
||||
}
|
||||
|
||||
private void PlayIdle()
|
||||
{
|
||||
fxDrill.SetActive(false);
|
||||
PlayDrillAnimationLoop(_drillAnimationIdle);
|
||||
}
|
||||
|
||||
private async Task PlayDrillAnimationReady(string animationName, double duration = 0)
|
||||
{
|
||||
if (aniDrill == null)
|
||||
return;
|
||||
var animationEntry = aniDrill.AnimationState.SetAnimation(0, animationName, false);
|
||||
if (duration == 0)
|
||||
duration = animationEntry.Animation.Duration;
|
||||
await Task.Delay(TimeSpan.FromSeconds(duration));
|
||||
}
|
||||
|
||||
private void PlayDrillAnimationLoop(string animationName)
|
||||
{
|
||||
try
|
||||
{
|
||||
var animationEntry = aniDrill.AnimationState.SetAnimation(0,animationName, true);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Debug.Log($"[EventBreak] Play Spine Animation Error: {e.Message}\n{e.StackTrace}");
|
||||
}
|
||||
}
|
||||
|
||||
override public async void PlayEnter(Vector3 startPos)
|
||||
{
|
||||
try
|
||||
{
|
||||
var endPos = _originalPos;
|
||||
PlayIdle();
|
||||
transform.position = startPos;
|
||||
await Awaiters.NextFrame;
|
||||
gameObject.SetActive(true);
|
||||
transform.DOMove(endPos, _jiandaDrillResetDuration);
|
||||
}
|
||||
catch(Exception e)
|
||||
{
|
||||
Debug.Log($"[EventBreak]{e.Message}\n{e.StackTrace}");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override public Tween GetDrillTween(Vector3 endPos, float duration = 0.5f)
|
||||
{
|
||||
transform.position = _originalPos;
|
||||
return transform.DOMove(endPos, duration).SetEase(Ease.InSine);
|
||||
}
|
||||
|
||||
override public float Y => transform.position.y;
|
||||
|
||||
}
|
||||
|
||||
public abstract class EventBreakDrillDisplay : MonoBehaviour
|
||||
{
|
||||
abstract public void PlayEnter(Vector3 startPos);
|
||||
abstract public void PlayDrill(float readyDuration = 0);
|
||||
abstract public Tween GetDrillTween(Vector3 endPos, float duration);
|
||||
abstract public float Y {get;}
|
||||
abstract public void Init(int tunnelIndex);
|
||||
}
|
||||
Reference in New Issue
Block a user