Files
taptap2024_GJ_chidouren/Assets/Scripts/Game/RoomManager.cs

167 lines
5.1 KiB
C#
Raw Normal View History

2024-10-16 00:03:41 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.ScriptListener;
using Cysharp.Threading.Tasks;
using FJson;
2024-10-21 16:20:37 +08:00
using Framework.Asset;
2024-10-16 00:03:41 +08:00
using Framework.Audio;
using Framework.GamePool.manager;
using Framework.Timer;
using Framework.UI;
using Framework.Utils.SingletonTemplate;
2024-10-21 16:20:37 +08:00
using Game.Component;
2024-10-16 00:03:41 +08:00
using Game.Data;
using Game.EventDefine;
using IcecreamView;
using StateSystem;
using UniFramework.Event;
using UnityEngine;
2024-10-26 21:50:45 +08:00
using UnityEngine.Playables;
2024-10-16 00:03:41 +08:00
using Views;
2024-10-21 16:20:37 +08:00
using Object = UnityEngine.Object;
2024-10-16 00:03:41 +08:00
namespace Game
{
public enum VibratorScale
{
Small = 1,
Normal = 2,
Big = 4,
SuperBig = 6,
Max = 8
}
public class RoomManager : MgrBase<RoomManager>
{
2024-10-26 21:50:45 +08:00
private EventGroup _eventGroup;
private GameFsm _gameFsm;
private RoomGlobalData _roomGlobalData;
public PlayableDirector _BossSceneDirector;
public bool HasLock { get ; private set; }
2024-10-16 00:03:41 +08:00
public GameState CurrentGameState => this._gameFsm.CurrentState;
2024-10-21 16:20:37 +08:00
public int PartIndex = 1;
2024-10-16 00:03:41 +08:00
public RoomGlobalData RoomGlobalData
{
get => _roomGlobalData;
set => _roomGlobalData = value;
}
public void JoinGame (params object[] args)
{
this._gameFsm = new GameFsm ();
this._gameFsm.Active (GameState.InitGame , args);
GameUpdateMgr.Instance.AddUpdater (DoUpdate);
this.BindEvent ();
this._gameFsm.OpenState (GameState.StartGame);
}
internal void _OnExitGame ()
{
UnBindEvent ();
this._gameFsm.Kill ();
GameUpdateMgr.Instance.RemoveUpdater (DoUpdate);
GameStateManager.Instance.OpenState (System.StateSystem.GameGlobalState.GameHome);
}
private void DoUpdate ()
{
#if UNITY_EDITOR
if (Input.GetKeyDown (KeyCode.F1))
{
}
#endif
}
protected override void OnCreateMge ()
{
// _eventBindHandler = new EventBindHandler (this);
_eventGroup = new EventGroup ();
}
protected override bool InstanceHook ()
{
return GameStateManager.Instance.CurrentState == System.StateSystem.GameGlobalState.GameRoom;
}
/// <summary>
/// 锁定操作
/// </summary>
public void Lock ()
{
this.HasLock = true;
}
/// <summary>
/// 解除锁定操作
/// </summary>
public void UnLock ()
{
this.HasLock = false;
}
2024-10-21 16:20:37 +08:00
public void LoadScenePart (int partIndex)
{
var loadName = $"AutoSource/Part/part{partIndex}.prefab";
var scenePart = AssetManager.Instance.LoadAsset<GameObject> (loadName).GetComponent<ScenePart> ();
var instantiate = Object.Instantiate (scenePart, MapContent.Instance.transform, true);
MapContent.Instance.SetPart (instantiate);
2024-10-26 21:50:45 +08:00
if (partIndex == 3)
{
//额外加载boss场景
2024-10-26 22:42:24 +08:00
var bossScene = AssetManager.Instance.LoadAsset<GameObject>("AutoSource/CGScene/BossScene.prefab");
2024-10-26 21:50:45 +08:00
var gameObject = Object.Instantiate (bossScene , MapContent.Instance.ScenePart.SuccessProp.transform.position , Quaternion.identity);
this._BossSceneDirector = gameObject.GetComponent<PlayableDirector> ();
}
2024-10-21 16:20:37 +08:00
}
2024-10-16 00:03:41 +08:00
#region
private void BindEvent ()
{
this._eventGroup.AddListener<GameEventDefine.ChangeGameFsm> (ChangeGameFsm);
this._eventGroup.AddListener<GameEventDefine.OverlyCoin> (OverlyCoin);
}
private void ChangeGameFsm (IEventMessage eventMessage)
{
GameEventDefine.ChangeGameFsm message = eventMessage as GameEventDefine.ChangeGameFsm;
this._gameFsm.OpenState (message.State , message.Args);
}
2024-10-23 14:56:16 +08:00
private async void OverlyCoin (IEventMessage obj)
2024-10-16 00:03:41 +08:00
{
if (obj is GameEventDefine.OverlyCoin message)
{
AudioManager.Instance.PlaySoundEffect (SeAudio.Gaming_GetCoin);
2024-10-21 16:20:37 +08:00
MapContent.Instance.OverlyCoin (message.overlyCoin);
2024-10-16 00:03:41 +08:00
GlobalEventDefine.RefreshView.SendMessage ();
2024-10-23 14:56:16 +08:00
if (MapContent.Instance.ScenePart.IsCondition)
2024-10-22 19:10:15 +08:00
{
2024-10-23 14:56:16 +08:00
if (!MapContent.Instance.ScenePart.successProp.gameObject.activeSelf)
{
2024-10-23 23:16:50 +08:00
//给一个奖励buff全局逃跑
2024-10-23 14:56:16 +08:00
CameraManager.Instance.SetCloseUpTarget (MapContent.Instance.ScenePart.successProp.transform);
await UniTask.Delay (1000);
2024-10-23 23:16:50 +08:00
GameEventDefine.GlobalRunaway.SendMessage (3f);
2024-10-23 14:56:16 +08:00
MapContent.Instance.ScenePart.successProp.gameObject.SetActive (true);
}
2024-10-22 19:10:15 +08:00
}
2024-10-16 00:03:41 +08:00
}
}
private void UnBindEvent ()
{
this._eventGroup.RemoveAllListener ();
}
#endregion
}
}