1.进步优化UI系统 加载问题 性能问题 Canvas重绘问题 边界处理问题 2.优化对象池和游戏对象池的性能 游戏对象池根据窗口 策略定期清理 3.优化整个AppService 和ServiceWorld结构 固定三大类 具体参考代码
103 lines
2.9 KiB
C#
103 lines
2.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace AlicizaX
|
|
{
|
|
internal class ProcedureService : ServiceBase, IProcedureService
|
|
{
|
|
private readonly Dictionary<Type, IProcedure> _procedures = new Dictionary<Type, IProcedure>();
|
|
private IProcedure _currentProcedure;
|
|
private IProcedure _defaultProcedure;
|
|
|
|
public Type CurrentProcedureType => _currentProcedure?.GetType();
|
|
|
|
public void InitializeProcedure(IEnumerable<IProcedure> availableProcedures, Type defaultProcedureType)
|
|
{
|
|
_procedures.Clear();
|
|
foreach (var procedure in availableProcedures)
|
|
{
|
|
if (procedure == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var type = procedure.GetType();
|
|
_procedures[type] = procedure;
|
|
procedure.ProcedureService = this;
|
|
procedure.Init();
|
|
}
|
|
|
|
if (_procedures.TryGetValue(defaultProcedureType, out var defaultProcedure))
|
|
{
|
|
_defaultProcedure = defaultProcedure;
|
|
TrySwitchProcedure(defaultProcedureType);
|
|
}
|
|
else
|
|
{
|
|
Log.Info($"榛樿娴佺▼ {defaultProcedureType.Name} 鏈敞鍐?");
|
|
}
|
|
}
|
|
|
|
public void ClearAllProcedures()
|
|
{
|
|
foreach (var procedure in _procedures.Values)
|
|
{
|
|
procedure.Destroy();
|
|
}
|
|
|
|
_procedures.Clear();
|
|
_currentProcedure = null;
|
|
_defaultProcedure = null;
|
|
}
|
|
|
|
public bool ContainsProcedure(Type procedureType)
|
|
{
|
|
return procedureType != null && _procedures.ContainsKey(procedureType);
|
|
}
|
|
|
|
public bool TrySwitchProcedure(Type procedureType)
|
|
{
|
|
if (procedureType == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!_procedures.TryGetValue(procedureType, out var nextProcedure))
|
|
{
|
|
if (_defaultProcedure == null)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Debug.LogWarning($"娴佺▼ {procedureType.Name} 涓嶅瓨鍦紝鍒囨崲鍒伴粯璁ゆ祦绋?");
|
|
nextProcedure = _defaultProcedure;
|
|
}
|
|
|
|
if (ReferenceEquals(_currentProcedure, nextProcedure))
|
|
{
|
|
return true;
|
|
}
|
|
|
|
_currentProcedure?.Leave();
|
|
nextProcedure.Enter();
|
|
_currentProcedure = nextProcedure;
|
|
return true;
|
|
}
|
|
|
|
protected override void OnInitialize()
|
|
{
|
|
}
|
|
|
|
protected override void OnDestroyService()
|
|
{
|
|
ClearAllProcedures();
|
|
}
|
|
|
|
void IServiceTickable.Tick(float deltaTime)
|
|
{
|
|
_currentProcedure?.Update();
|
|
}
|
|
}
|
|
}
|