169 lines
5.3 KiB
C#
169 lines
5.3 KiB
C#
using BrewMonster;
|
|
using BrewMonster.Scripts;
|
|
using BrewMonster.Scripts.World;
|
|
using CSNetwork;
|
|
using CSNetwork.GPDataType;
|
|
using Unity.Cinemachine;
|
|
using UnityEngine;
|
|
|
|
public partial class CECGameRun
|
|
{
|
|
private static CECGameRun instance;
|
|
|
|
private GameObject _playerPrefab;
|
|
private GameObject _monsterPrefab;//CECMonster
|
|
private GameObject _npcServerPrefab;//CECNPCServer
|
|
private GameObject _testVfxPrefab;
|
|
|
|
// private GameRunConfig _gameRunConfig;
|
|
//[SerializeField] private Transform ground;
|
|
CECHostPlayer hostPlayer;
|
|
private CECWorld m_pWorld;
|
|
|
|
protected CECUIManager m_pUIManager; // UI manager
|
|
public CECWorld GetWorld() { return m_pWorld; }
|
|
|
|
public void Init()
|
|
{
|
|
instance = this;
|
|
// _gameRunConfig = Resources.Load<GameRunConfig>("GameRunConfig");
|
|
// _playerPrefab = _gameRunConfig.PlayerPrefab;
|
|
// _monsterPrefab = _gameRunConfig.MonsterPrefab;
|
|
// _npcServerPrefab = _gameRunConfig.NpcServerPrefab;
|
|
// _testVfxPrefab = _gameRunConfig.TestVfxPrefab;
|
|
LoadPrefabs();
|
|
|
|
// LoadPrefabs();
|
|
EC_ManMessage.RegisterHandler(this);
|
|
}
|
|
|
|
public static void Dispose()
|
|
{
|
|
instance = null;
|
|
AddressableManager.Instance.UnloadAsset(AddressResourceConfig.PlayerPrefab);
|
|
AddressableManager.Instance.UnloadAsset(AddressResourceConfig.MonsterPrefab);
|
|
AddressableManager.Instance.UnloadAsset(AddressResourceConfig.NpcServerPrefab);
|
|
AddressableManager.Instance.UnloadAsset(AddressResourceConfig.TestVfxPrefab);
|
|
}
|
|
|
|
private async void LoadPrefabs()
|
|
{
|
|
_playerPrefab = await AddressableManager.Instance.LoadPrefabAsync(AddressResourceConfig.PlayerPrefab);
|
|
_monsterPrefab = await AddressableManager.Instance.LoadPrefabAsync(AddressResourceConfig.MonsterPrefab);
|
|
_npcServerPrefab = await AddressableManager.Instance.LoadPrefabAsync(AddressResourceConfig.NpcServerPrefab);
|
|
_testVfxPrefab = await AddressableManager.Instance.LoadPrefabAsync(AddressResourceConfig.TestVfxPrefab);
|
|
}
|
|
public bool StartGame(int idInst, Vector3 vHostPos)
|
|
{
|
|
if (!JumpToInstance(idInst, vHostPos))
|
|
{
|
|
BMLogger.LogError("CECGameRun::StartGame, Failed to create game world.");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
private bool JumpToInstance(int idInst, Vector3 vHostPos, int iParallelWorldID = 0)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public static CECGameRun Instance
|
|
{
|
|
get
|
|
{
|
|
if (instance == null)
|
|
{
|
|
instance = new CECGameRun();
|
|
instance.Init();
|
|
}
|
|
return instance;
|
|
}
|
|
}
|
|
|
|
public CECHostPlayer GetHostPlayer()
|
|
{
|
|
return hostPlayer;
|
|
}
|
|
public void InitCharacter(cmd_self_info_1 info)
|
|
{
|
|
if (_playerPrefab == null)
|
|
{
|
|
BMLogger.LogError("null _playerPrefab");
|
|
return;
|
|
}
|
|
CECPlayer.InitStaticRes();
|
|
hostPlayer = ObjectSpawner.Instance.InstantiateObject(_playerPrefab, setThisAsParent:true).AddComponent<CECHostPlayer>();
|
|
hostPlayer.InitCharacter(info);
|
|
}
|
|
public CECMonster GetMonster()
|
|
{
|
|
return ObjectSpawner.Instance.InstantiateObject(_monsterPrefab, setThisAsParent: true)
|
|
.GetComponent<CECMonster>();
|
|
}
|
|
|
|
public CECNPCServer GetNPCServer()
|
|
{
|
|
return ObjectSpawner.Instance.InstantiateObject(_npcServerPrefab, setThisAsParent:true).GetComponent<CECNPCServer>();
|
|
}
|
|
public GameObject GetTestVfx()
|
|
{
|
|
return ObjectSpawner.Instance.InstantiateObject(_testVfxPrefab, setThisAsParent: true);
|
|
}
|
|
public void DestroyTestVfx(GameObject go, float delayTime)
|
|
{
|
|
ObjectSpawner.Instance.DestroyGameObject(go, delayTime);
|
|
}
|
|
|
|
public GameObject InitCharacter(info_player_1 info)
|
|
{
|
|
if (_playerPrefab == null)
|
|
{
|
|
Debug.LogError("null prefab");
|
|
return null;
|
|
}
|
|
GameObject character = ObjectSpawner.Instance.InstantiateObject(_playerPrefab, setThisAsParent: true);
|
|
return character.gameObject;
|
|
}
|
|
|
|
//private void Update()
|
|
//{
|
|
// if (hostPlayer == null || hostPlayer.transform == null)
|
|
// return;
|
|
|
|
// bool rightClick = Input.GetMouseButton(1);
|
|
|
|
// if (rightClick)
|
|
// {
|
|
// // Bật khả năng xoay khi giữ chuột phải
|
|
// freeLookCam.m_XAxis.m_MaxSpeed = rotateSpeedX;
|
|
// freeLookCam.m_YAxis.m_MaxSpeed = rotateSpeedY;
|
|
|
|
// // Ghi giá trị chuột thủ công (nếu muốn override Input System cũ)
|
|
// float mouseX = Input.GetAxis("Mouse X");
|
|
// float mouseY = Input.GetAxis("Mouse Y");
|
|
|
|
// // Xoay camera theo hướng chuột
|
|
// freeLookCam.m_XAxis.Value += mouseX * Time.deltaTime * rotateSpeedX;
|
|
// freeLookCam.m_YAxis.Value -= mouseY * Time.deltaTime * (rotateSpeedY / 100f);
|
|
// }
|
|
// else
|
|
// {
|
|
// // Khi thả chuột thì khoá xoay
|
|
// freeLookCam.m_XAxis.m_MaxSpeed = 0;
|
|
// freeLookCam.m_YAxis.m_MaxSpeed = 0;
|
|
// }
|
|
//}
|
|
|
|
|
|
// Get UI manager
|
|
public CECUIManager GetUIManager()
|
|
{
|
|
if(m_pUIManager == null)
|
|
{
|
|
m_pUIManager = CECUIManager.Instance;
|
|
}
|
|
return m_pUIManager;
|
|
}
|
|
}
|