2025-10-13 17:28:05 +08:00

230 lines
7.8 KiB
C#

using NUnit.Framework;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using YiLiao.Main;
using ZXKFramework;
namespace YiLiao.JingLuoXueWei
{
public class GameManager : MonoSingleton<GameManager>
{
/// <summary>
/// 所有的经络物体
/// </summary>
public List<GameObject> allJingLuoGame;
/// <summary>
/// 红色的经络物体(用于变色)
/// </summary>
[Header("红色的经络物体(用于变色)")]
public List<Renderer> allRedJingLuoRenderer;
/// <summary>
/// 蓝色的经络物体(用于变色)
/// </summary>
[Header("蓝色的经络物体(用于变色)")]
public List<Renderer> allBlueJingLuoRenderer;
/// <summary>
/// 经络红色的材质
/// </summary>
[Header("经络红色的材质")]
public Material redJingLuoMaterial;
/// <summary>
/// 经络蓝色的材质
/// </summary>
[Header("经络蓝色的材质")]
public Material blueJingLuoMaterial;
/// <summary>
/// 经络默认的材质
/// </summary>
[Header("经络默认的材质")]
public Material defaultJingLuoMaterial;
/// <summary>
/// 所有的穴位物体(用于变色)
/// </summary>
public List<Renderer> allXueWeiRenderer;
/// <summary>
/// 默认的材质
/// </summary>
[Header("穴位默认的材质")]
public Material redMaterial;
/// <summary>
/// 变色的材质
/// </summary>
[Header("穴位变色的材质")]
public Material blueMaterial;
/// <summary>
/// 身体透明材质球
/// </summary>
[Header("身体透明材质球")]
public Material touMingMaterial;
/// <summary>
/// 身体不透明材质球
/// </summary>
[Header("身体不透明材质球")]
public Material noTouMingMaterial;
[HideInInspector]
/// <summary>
/// 选择的经络
/// </summary>
public string selectJingLuoName;
//交互模块
[HideInInspector]
public InteractionManager interactionManager;
//动画播放模块
[HideInInspector]
public TimelineClipManager timelineManager;
//[HideInInspector]
//public FSMManager fsm;
//玩家管理器
[HideInInspector]
public PlayerManager playerManager;
//高亮模块
[HideInInspector]
public HighLightManager highLightManager;
//计时模块
[HideInInspector]
public TimeCounterManager timeCounterManager;
//成绩模块
[HideInInspector]
public KaoHeManager kaoheManager;
//UI模块
[HideInInspector]
public IUIManager uiManager = new UIManager();
//虚拟相机模块
[HideInInspector]
public VirtualCameraManager virtualCameraManager;
[HideInInspector]
public NetAsyncMgr net;
public bool test;
[HideInInspector]
public SceneDataHandler sceneDataHandler;
IEnumerator Start()
{
if (test)
{
//数据初始化
MVC.RegisterModel(new Main.GameModel());
yield return MVC.GetModel<Main.GameModel>().Init();
MVC.GetModel<Main.GameModel>().modeType = ModeType.KaoHe;
MVC.GetModel<Main.GameModel>().mainData = MVC.GetModel<Main.GameModel>().excelData.GetMainData(2);
}
MVC.RegisterModel(new GameModel());
yield return MVC.GetModel<GameModel>().Init();
Game.Instance.eventManager.AddListener<PlayTrueOrFalseEvent>(PlayTrueOrFalseSound);
Game.Instance.eventManager.AddListener<PlaySoundEvent>(PlaySound);
sceneDataHandler = transform.FindFirst<SceneDataHandler>("SceneDataHandler");
interactionManager = transform.FindFirst<InteractionManager>("InteractionManager");
virtualCameraManager = transform.FindFirst<VirtualCameraManager>("VirtualCameraManager");
//fsm = transform.FindFirst<FSMManager>("FSMManager");
timelineManager = transform.FindFirst<TimelineClipManager>("TimelineManager");
highLightManager = transform.FindFirst<HighLightManager>("HighLightManager");
timeCounterManager = transform.FindFirst<TimeCounterManager>("TimeCounterManager");
kaoheManager = transform.FindFirst<KaoHeManager>("KaoHeManager");
playerManager = transform.FindFirst<PlayerManager>("PlayerManager");
net = transform.FindFirst<NetAsyncMgr>("NetAsyncMgr");
//存储数据初始化
sceneDataHandler.Init();
//平台适配初始化
Game.Instance.AdapterInit();
//虚拟相机初始化
virtualCameraManager.Init();
//高亮初始化
highLightManager.Init();
//状态机初始化
//fsm.Init();
//动画模块初始化
timelineManager.Init();
//计时器初始化
timeCounterManager.Init();
uiManager.ShowUI<LeftBigBtnPanel>();
}
private void PlaySound(PlaySoundEvent e)
{
Game.Instance.sound.PlayBGM(e.path, false, clip =>
{
e.callBack?.Invoke(clip.length);
});
}
private void PlayTrueOrFalseSound(PlayTrueOrFalseEvent e)
{
if (e.isTrue)
{
Game.Instance.sound.PlayMS(MVC.GetModel<Main.GameModel>().mainData.folder + "/Sounds/right");
}
else
{
Game.Instance.sound.PlayMS(MVC.GetModel<Main.GameModel>().mainData.folder + "/Sounds/false");
}
}
private void OnDestroy()
{
Game.Instance.eventManager.RemoveListener<PlayTrueOrFalseEvent>(PlayTrueOrFalseSound);
Game.Instance.eventManager.RemoveListener<PlaySoundEvent>(PlaySound);
}
/// <summary>
/// 更改经络颜色(循行的时候使用)
/// </summary>
/// <param name="name"></param>
public void ChangeJingLuoColor(string name)
{
for (int i = 0; i < allRedJingLuoRenderer.Count; i++)
{
if (allRedJingLuoRenderer[i].gameObject.name.Contains(name))
{
allRedJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(1, 0, 0, 0));
allRedJingLuoRenderer[i].material.SetFloat("_Mode", 0f);
}
else
{
allRedJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(1, 0, 1, 0));
}
}
for (int i = 0; i < allBlueJingLuoRenderer.Count; i++)
{
if (allBlueJingLuoRenderer[i].gameObject.name.Contains(name))
{
allBlueJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(0, 0, 1, 0));
allBlueJingLuoRenderer[i].material.SetFloat("_Mode", 0f);
}
else
{
allBlueJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(1, 0, 1, 0));
}
}
}
/// <summary>
/// 将经络颜色改回默认颜色(关闭循行的时候使用)
/// </summary>
public void ChangeJingLuoDefaultColor()
{
for (int i = 0; i < allRedJingLuoRenderer.Count; i++)
{
allRedJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(1, 0, 1, 0));
allRedJingLuoRenderer[i].material.SetFloat("_Mode", 1f);
}
for (int i = 0; i < allBlueJingLuoRenderer.Count; i++)
{
allBlueJingLuoRenderer[i].material.SetColor("_BaseColor", new Color(1, 0, 1, 0));
allBlueJingLuoRenderer[i].material.SetFloat("_Mode", 1f);
}
}
}
}