115 lines
3.3 KiB
C#
115 lines
3.3 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using AibisDream.Framework;
|
|
using UnityEngine;
|
|
using Yarn.Unity;
|
|
|
|
namespace AibisDream.FixSystem
|
|
{
|
|
[RequireComponent(typeof(BodyModuleSystem))]
|
|
public class WhackMoleSystem : MonoBehaviour
|
|
{
|
|
private BodyModuleSystem _bodyModuleSystem;
|
|
private WhackMoleHandler _handler;
|
|
private WhackMoleLog _log;
|
|
|
|
private Dictionary<string, MoleModule> _moleModules;
|
|
|
|
private void Awake()
|
|
{
|
|
_bodyModuleSystem = GetComponent<BodyModuleSystem>();
|
|
FixSystemCenter.SystemDic.Register(this);
|
|
_log = GetComponentInChildren<WhackMoleLog>();
|
|
}
|
|
|
|
#region 打地鼠游戏流程控制
|
|
|
|
public void StartWhack(WhackMoleData levelData)
|
|
{
|
|
_handler = WhackMoleHandler.Create(levelData, this);
|
|
_handler.OnGameEnd += OnWhackEnd;
|
|
// 获取当前所有模块
|
|
_moleModules =
|
|
_bodyModuleSystem.BodyModules.ToDictionary(item => item.data.moduleName, item => item as MoleModule);
|
|
_moleModules.Values.ToList().ForEach(item => item.isInMoleGame = true);
|
|
_log.Init();
|
|
_handler.StartGame();
|
|
}
|
|
|
|
private void OnWhackEnd(bool isSuccess)
|
|
{
|
|
_moleModules.Values.ToList().ForEach(item => item.isInMoleGame = false);
|
|
// TODO 触发游戏结束
|
|
_log.OnGameEnd(isSuccess);
|
|
DialogController.Instance.StartDialogNode(isSuccess ? "打地鼠游戏通过" : "打地鼠游戏失败");
|
|
}
|
|
|
|
public void OnPlugIn(string moduleName)
|
|
{
|
|
_handler?.OnPlugIn(moduleName);
|
|
}
|
|
|
|
public void OnPlugOut(string moduleName)
|
|
{
|
|
_handler?.OnPlugOut(moduleName);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 效果相关, 控制BodyModuleSystem实现
|
|
|
|
public void StartAllFlicker()
|
|
{
|
|
foreach (var module in _moleModules.Values)
|
|
{
|
|
module.StartFlicker();
|
|
}
|
|
}
|
|
|
|
public void StopAllFlicker()
|
|
{
|
|
foreach (var module in _moleModules.Values)
|
|
{
|
|
module.StopFlicker();
|
|
}
|
|
}
|
|
|
|
public void LightOnModule(string moduleName)
|
|
{
|
|
if (_moleModules.TryGetValue(moduleName, out var moleModule))
|
|
{
|
|
moleModule.LightOn(Color.red);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"没有找到模块:{moduleName}");
|
|
}
|
|
}
|
|
|
|
public void LightOffModule(string moduleName)
|
|
{
|
|
if (_moleModules.TryGetValue(moduleName, out var moleModule))
|
|
{
|
|
moleModule.LightOff();
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError($"没有找到模块:{moduleName}");
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
|
|
public static class WholeMoleCommand
|
|
{
|
|
private static WhackMoleSystem WhackMoleSystem => FixSystemCenter.SystemDic.Get<WhackMoleSystem>();
|
|
|
|
[YarnCommand("start_whack_game")]
|
|
public static void StartWhack(string levelName)
|
|
{
|
|
var levelData = ResourceKit.LoadAssetSync<WhackMoleData>($"WhackMoleData/{levelName}.asset");
|
|
WhackMoleSystem.StartWhack(levelData);
|
|
}
|
|
}
|
|
} |