备份CatanBuilding瘦身独立工程
This commit is contained in:
111
Assets/Scripts/Others/UIParticleAttractorCenter.cs
Normal file
111
Assets/Scripts/Others/UIParticleAttractorCenter.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using asap.core;
|
||||
using Coffee.UIExtensions;
|
||||
using UnityEngine;
|
||||
using UniRx;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
public class ParticleAttractorData
|
||||
{
|
||||
public bool IgnorePack;
|
||||
public int Type;
|
||||
public int SubType;
|
||||
public int ParticleCount;
|
||||
public int Priority;
|
||||
public UIParticleAttractorCenter uIParticleAttractorCenter;
|
||||
}
|
||||
public class UIParticleAttractorCenter : MonoBehaviour
|
||||
{
|
||||
[SerializeField] UIParticleAttractor uiParticleAttractorTemplate;
|
||||
private List<UIParticleAttractor> _uiParticleAttractors;
|
||||
public int Type;
|
||||
public int SubType;
|
||||
public int Priority;
|
||||
Animator ani;
|
||||
IDisposable disposable;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
void Init()
|
||||
{
|
||||
_uiParticleAttractors = GetComponents<UIParticleAttractor>().ToList();
|
||||
uiParticleAttractorTemplate = GetComponent<UIParticleAttractor>();
|
||||
|
||||
// uIParticleAttractor = uiParticleAttractors.FirstOrDefault(x => !x.IsTaken);
|
||||
// if (uIParticleAttractor == null)
|
||||
// {
|
||||
// uIParticleAttractor = gameObject.AddComponent<UIParticleAttractor>();
|
||||
// }
|
||||
// uIParticleAttractor.enabled = false;
|
||||
// uIParticleAttractor.destinationRadius = 1;
|
||||
|
||||
//uIParticleAttractor.delay = 0.2f;
|
||||
// uIParticleAttractor.maxSpeed = 0.6f;
|
||||
ani = GetComponent<Animator>();
|
||||
if (ani != null && uiParticleAttractorTemplate != null)
|
||||
{
|
||||
uiParticleAttractorTemplate.onAttractedStart.AddListener(() => ani.Play("reward_gain_loop"));
|
||||
uiParticleAttractorTemplate.onAttractedEnd.AddListener(OnEnd);
|
||||
}
|
||||
}
|
||||
async void OnEnd()
|
||||
{
|
||||
await Awaiters.Seconds(0.2f);
|
||||
if (ani)
|
||||
{
|
||||
ani.Play("Init");
|
||||
}
|
||||
}
|
||||
private void OnEnable()
|
||||
{
|
||||
disposable = GContext.OnEvent<ParticleAttractorData>().Subscribe(OnParticleAttractor);
|
||||
}
|
||||
void OnParticleAttractor(ParticleAttractorData data)
|
||||
{
|
||||
bool doesTypeMatch = (!data.IgnorePack && Type == -1) || (data.Type == Type && data.SubType == SubType);
|
||||
if (doesTypeMatch && data.Priority < Priority)
|
||||
{
|
||||
data.Priority = Priority;
|
||||
data.uIParticleAttractorCenter = this;
|
||||
}
|
||||
}
|
||||
|
||||
public UIParticleAttractor GetUIParticleAttractor()
|
||||
{
|
||||
var uiParticleAttractor = _uiParticleAttractors.FirstOrDefault(x => x.particleSystem == null);
|
||||
if (uiParticleAttractor == null)
|
||||
{
|
||||
uiParticleAttractor = gameObject.AddComponent<UIParticleAttractor>();
|
||||
_uiParticleAttractors.Add(uiParticleAttractor);
|
||||
}
|
||||
|
||||
uiParticleAttractor.enabled = false;
|
||||
|
||||
if (uiParticleAttractorTemplate != null)
|
||||
{
|
||||
uiParticleAttractor.destinationRadius = uiParticleAttractorTemplate.destinationRadius;
|
||||
uiParticleAttractor.delay = uiParticleAttractorTemplate.delay;
|
||||
uiParticleAttractor.maxSpeed = uiParticleAttractorTemplate.maxSpeed;
|
||||
if (ani != null)
|
||||
{
|
||||
uiParticleAttractor.onAttractedStart = uiParticleAttractorTemplate.onAttractedStart;
|
||||
uiParticleAttractor.onAttractedEnd = uiParticleAttractorTemplate.onAttractedEnd;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
uiParticleAttractor.destinationRadius = 1;
|
||||
}
|
||||
|
||||
return uiParticleAttractor;
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
disposable?.Dispose();
|
||||
disposable = null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user