feat(fix-system): 添加EyeModule并重构视觉模块控制

This commit is contained in:
2026-03-24 15:34:08 +08:00
parent 89f8b52423
commit a561909134
5 changed files with 64 additions and 14 deletions
@@ -152,7 +152,7 @@ namespace AibisDream.FixSystem
}
}
}
/// <summary>
/// 寻找指定名称的BodyModule
/// </summary>
@@ -163,6 +163,16 @@ namespace AibisDream.FixSystem
return BodyModules?.FirstOrDefault(module => module.data.moduleName == modulename);
}
/// <summary>
/// 寻找指定类型的BodyModule
/// </summary>
/// <typeparam name="T">模块类型</typeparam>
/// <returns>对应类型的BodyModule</returns>
public T FindBodyModuleByType<T>() where T : BodyModule
{
return BodyModules?.FirstOrDefault(module => module is T) as T;
}
/// <summary>
/// 设置发热
/// </summary>
@@ -5,7 +5,6 @@ using UnityEngine;
using System.Collections;
using DG.Tweening;
using AibisDream.Kit;
using UnityEngine.Serialization;
namespace AibisDream.FixSystem
{
@@ -0,0 +1,37 @@
using System.Collections;
using UnityEngine;
using AibisDream.Kit;
using AibisDream.Framework;
using UnityEngine.ResourceManagement.AsyncOperations;
namespace AibisDream.FixSystem
{
public class EyeModule : BodyModule
{
private static IEnumerator ApplyCoverSprite(SpriteRenderer sp, string address)
{
var handle = ResourceSystem.LoadAsync<Sprite>(address);
yield return handle;
if (handle.Status == AsyncOperationStatus.Succeeded)
sp.sprite = handle.Result;
}
public IEnumerator OpenEye()
{
var sp = transform.Find("Cover").GetComponent<SpriteRenderer>();
AudioManager.Instance.PlaySfx("event:/ActionFB/eye_open");
yield return ApplyCoverSprite(sp, FixAssetRef.EyeCoverOpenA);
yield return new WaitForSeconds(0.1f);
yield return ApplyCoverSprite(sp, FixAssetRef.EyeCoverOpenB);
}
public IEnumerator CloseEye()
{
var sp = transform.Find("Cover").GetComponent<SpriteRenderer>();
yield return ApplyCoverSprite(sp, FixAssetRef.EyeCoverOpenA);
AudioManager.Instance.PlaySfx("event:/ActionFB/eye_close");
yield return new WaitForSeconds(0.1f);
yield return ApplyCoverSprite(sp, FixAssetRef.EyeCoverClose);
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ef3089c3a47fcd84689e9cf23e93ce75
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+5 -12
View File
@@ -254,12 +254,9 @@ namespace AibisDream.FixSystem
}
//打开盖子
SpriteRenderer sp = bodyModuleSystem.FindBodyModuleByName("Eye").transform.Find("Cover")
.GetComponent<SpriteRenderer>();
sp.sprite = Resources.Load<Sprite>("Art/Fix/Peipei/Eye/视觉模块盖子打开A");
AudioManager.Instance.PlaySfx("event:/ActionFB/eye_open");
yield return new WaitForSeconds(0.1f);
sp.sprite = Resources.Load<Sprite>("Art/Fix/Peipei/Eye/视觉模块盖子打开B");
var eyeModule = bodyModuleSystem.FindBodyModuleByType<EyeModule>();
yield return eyeModule.OpenEye();
// 插头回到初始插孔
FixPanelSystem.GetRepairPanel<CablePanel>().ResetPlug();
// 切换相机
@@ -284,12 +281,8 @@ namespace AibisDream.FixSystem
yield return new WaitForSeconds(0.1f);
yield return UIManager.Instance.GetPanel<PlayToolPanel>().FadeOutAsync(duration);
//关上
SpriteRenderer sp = bodyModuleSystem.FindBodyModuleByName("Eye").transform.Find("Cover")
.GetComponent<SpriteRenderer>();
sp.sprite = Resources.Load<Sprite>("Art/Fix/Peipei/Eye/视觉模块盖子打开A");
AudioManager.Instance.PlaySfx("event:/ActionFB/eye_close");
yield return new WaitForSeconds(0.1f);
sp.sprite = Resources.Load<Sprite>("Art/Fix/Peipei/Eye/视觉模块盖子关闭");
var eyeModule = bodyModuleSystem.FindBodyModuleByType<EyeModule>();
yield return eyeModule.CloseEye();
yield return new WaitForSeconds(0.5f);
}
}