refactor(fix-system): BodyModule 持久化从 IData 改为显式快照
This commit is contained in:
@@ -4,7 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using JetBrains.Annotations;
|
||||
using UnityEngine;
|
||||
using AibisDream.Framework;
|
||||
using AibisDream.FixSystem;
|
||||
using AibisDream.Kit;
|
||||
using AibisDream.SaveSystem;
|
||||
|
||||
@@ -25,12 +25,12 @@ namespace AibisDream.FixSystem
|
||||
|
||||
#region 系统状态
|
||||
|
||||
private readonly ModuleSystemData _data = new();
|
||||
private ModuleState _moduleState = ModuleState.Body;
|
||||
public bool inHotErr;
|
||||
private int _heatValue;
|
||||
|
||||
/// <summary>获取当前 BodyModule 分组(Body/Head)。</summary>
|
||||
public ModuleState GetCurrentModuleState() => _data.moduleState;
|
||||
public ModuleState GetCurrentModuleState() => _moduleState;
|
||||
|
||||
private int HeatValue
|
||||
{
|
||||
@@ -58,9 +58,6 @@ namespace AibisDream.FixSystem
|
||||
|
||||
private void InitComponentRefs()
|
||||
{
|
||||
// 注册数据
|
||||
DeepRepairDataRegistry.RegisterData(_data);
|
||||
|
||||
// 处理内部索引
|
||||
_bodyModuleGroup = transform.Find("Scalehandler")?.transform.Find("Body Module Group")?.gameObject;
|
||||
_headModuleGroup = transform.Find("Scalehandler")?.transform.Find("Head Module Group")?.gameObject;
|
||||
@@ -75,9 +72,39 @@ namespace AibisDream.FixSystem
|
||||
RepairSystemManager.Register(this);
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
/// <summary>捕获插线模块持久状态(分组 + UF + Chip)。</summary>
|
||||
public BodyModuleSnapshotDto CaptureBodyModuleSnapshot()
|
||||
{
|
||||
DeepRepairDataRegistry.UnregisterData<ModuleSystemData>();
|
||||
var dto = new BodyModuleSnapshotDto
|
||||
{
|
||||
moduleState = _moduleState.ToString()
|
||||
};
|
||||
|
||||
var ufModule = FindBodyModuleByName("UF")?.GetComponent<UFModule>();
|
||||
ufModule?.CaptureState(dto);
|
||||
|
||||
var chipModule = FindBodyModuleByName("Color")?.GetComponent<ChipModule>();
|
||||
chipModule?.CaptureState(dto);
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
/// <summary>写回插线模块持久状态;须在 fix cue 还原之后调用。</summary>
|
||||
public void ApplyBodyModuleSnapshot(BodyModuleSnapshotDto dto)
|
||||
{
|
||||
if (dto == null) return;
|
||||
|
||||
if (!string.IsNullOrEmpty(dto.moduleState)
|
||||
&& Enum.TryParse<ModuleState>(dto.moduleState, out var moduleState))
|
||||
{
|
||||
SwitchModuleGroup(moduleState);
|
||||
}
|
||||
|
||||
var ufModule = FindBodyModuleByName("UF")?.GetComponent<UFModule>();
|
||||
ufModule?.ApplyState(dto);
|
||||
|
||||
var chipModule = FindBodyModuleByName("Color")?.GetComponent<ChipModule>();
|
||||
chipModule?.ApplyState(dto);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -240,8 +267,7 @@ namespace AibisDream.FixSystem
|
||||
// 重新获取ModuleGroup
|
||||
var root = moduleState == ModuleState.Body ? _bodyModuleGroup : _headModuleGroup;
|
||||
BodyModules = root?.GetComponentsInChildren<BodyModule>().ToList();
|
||||
// 更改data
|
||||
_data.moduleState = moduleState;
|
||||
_moduleState = moduleState;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -381,18 +407,6 @@ namespace AibisDream.FixSystem
|
||||
}
|
||||
}
|
||||
|
||||
[LoadIndex(2)]
|
||||
public class ModuleSystemData : IData
|
||||
{
|
||||
public ModuleState moduleState;
|
||||
|
||||
public IEnumerator Load()
|
||||
{
|
||||
FixSystemCenter.SystemDic.Get<BodyModuleSystem>().SwitchModuleGroup(moduleState);
|
||||
yield break;
|
||||
}
|
||||
}
|
||||
|
||||
public enum ModuleState
|
||||
{
|
||||
Body,
|
||||
|
||||
Reference in New Issue
Block a user