Files
MinFt/Client/Assets/Scripts/Others/UIParticleAttractorCenter.cs
Liubing\LB 3d8d4d18f3 first commit
先修复一下,错误的场景

删除不必要的钓场资产

修复into场景

update:更新meta文件,修复报错

update:修复资源

修复第一章节建造

修复建造第三章

update:删除多余内容

update:更新README.md

update:还原图标

update:更新README

update:更新配置
2026-04-28 02:17:22 +08:00

112 lines
3.4 KiB
C#

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;
}
}