v
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e0c57d8d96f20a7602e9c9af036ccd27adccf9d08ecbcd6f60bec0ba4e78e5e2
|
||||
size 281532
|
||||
oid sha256:60c9fc32910746f134c7ade2390c674afb51eae2d258e8292b0bb9e817d02732
|
||||
size 282839
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
using Unity.Cinemachine;
|
||||
using UnityEngine;
|
||||
|
||||
namespace BrewMonster.Scripts
|
||||
{
|
||||
public class CameraProvider : MonoSingleton<CameraProvider>
|
||||
{
|
||||
|
||||
[SerializeField]private CinemachineBrain _cinemachineBrain;
|
||||
public CinemachineBrain CinemachineBrain
|
||||
{
|
||||
get => _cinemachineBrain;
|
||||
private set => _cinemachineBrain = value;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 536ca7dcb1b8e4e0fae1bb97ef326ed3
|
||||
@@ -1,4 +1,4 @@
|
||||
// #define ENALBE_LOGGING
|
||||
#define ENALBE_LOGGING
|
||||
using UnityEngine;
|
||||
|
||||
namespace BrewMonster
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using BrewMonster.Scripts;
|
||||
using Unity.Cinemachine;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -21,7 +22,7 @@ public class LookAtCamera : MonoBehaviour
|
||||
{
|
||||
if (targetCamera == null)
|
||||
{
|
||||
var brain = FindFirstObjectByType<CinemachineBrain>();
|
||||
var brain = CameraProvider.Instance.CinemachineBrain;
|
||||
if (brain != null)
|
||||
targetCamera = brain.OutputCamera;
|
||||
if (targetCamera == null && Camera.main != null)
|
||||
|
||||
@@ -112,7 +112,7 @@ namespace BrewMonster
|
||||
int m_iBuddyId;
|
||||
int m_idCandBuddy; // ID of candidate buddy
|
||||
EC_ManPlayer m_pPlayerMan => EC_ManMessageMono.Instance?.GetECManPlayer; // Player manager
|
||||
protected Transform playerTransform => transform;
|
||||
protected Transform playerTransform => _objectTransform ??= transform;
|
||||
|
||||
public MOVECONST m_MoveConst; // Const used when moving control
|
||||
public Move_Mode m_MoveMode;
|
||||
|
||||
@@ -11,17 +11,19 @@ public class AddressableObject : MonoBehaviour
|
||||
public string assetPath;
|
||||
|
||||
private GameObject _instance;
|
||||
private bool _isLoading;
|
||||
private bool _isLoaded;
|
||||
public bool _isLoading;
|
||||
public bool _isLoaded;
|
||||
private int _loadRequestId;
|
||||
|
||||
public bool IsLoaded => _isLoaded;
|
||||
public bool IsLoading => _isLoading;
|
||||
public Vector3 ObjectPosition;
|
||||
public Vector3 ObjectPositionOxz;
|
||||
|
||||
void Awake()
|
||||
{
|
||||
ObjectPosition = transform.position;
|
||||
ObjectPositionOxz = new Vector3(ObjectPosition.x, 0, ObjectPosition.z);
|
||||
}
|
||||
|
||||
public async UniTask LoadAsset()
|
||||
@@ -74,12 +76,12 @@ public class AddressableObject : MonoBehaviour
|
||||
// make the loading request invalid.
|
||||
_loadRequestId++;
|
||||
_isLoading = false;
|
||||
_isLoaded = false;
|
||||
|
||||
if (_instance != null)
|
||||
{
|
||||
Destroy(_instance);
|
||||
_instance = null;
|
||||
_isLoaded = false;
|
||||
}
|
||||
else if (transform.childCount > 0)
|
||||
{
|
||||
|
||||
@@ -35,9 +35,10 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
private HashSet<AddressableObject> _loadedObjects = new HashSet<AddressableObject>();
|
||||
private List<AddressableObject> _objectsToUnload = new List<AddressableObject>();
|
||||
|
||||
private Vector3 _lastHostPos;
|
||||
private Vector3 _lastHostPosOxz;
|
||||
private bool _hasLastHostPos = false;
|
||||
private Vector3 _currentHostPos;
|
||||
private Vector3 _currentHostPosOxz;
|
||||
private bool _hostPosReady = false;
|
||||
private AddressableObject _currentObjectToCheck; // the object that we're currently checking for loading/unloading.
|
||||
private bool _needToProcessLoadAndUnload = false;
|
||||
@@ -51,6 +52,8 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
#region Unity Lifecycle
|
||||
protected override async void Initialize()
|
||||
{
|
||||
_currentHostPos = Vector3.zero;
|
||||
_currentHostPosOxz = Vector3.zero;
|
||||
await StartStreamingProcess();
|
||||
}
|
||||
|
||||
@@ -110,19 +113,19 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
// Wait until Addressables are initialized.
|
||||
while (!AddressableManager.Instance.IsInitialized())
|
||||
{
|
||||
await UniTask.DelayFrame(1, cancellationToken: destroyToken);
|
||||
await Task.Delay(100, destroyToken);
|
||||
}
|
||||
|
||||
while (_hostPlayer == null)
|
||||
{
|
||||
_hostPlayer = GetHostPlayer();
|
||||
await UniTask.Delay(100);
|
||||
await Task.Delay(100, destroyToken);
|
||||
continue;
|
||||
}
|
||||
|
||||
while (!_hostPlayer.IsAllResReady())
|
||||
{
|
||||
await UniTask.Delay(100);
|
||||
await Task.Delay(100, destroyToken);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -130,9 +133,9 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
await LoadObjectBaseOnDistance(destroyToken);
|
||||
|
||||
// Start distance-based streaming loop. This will be running continuously in the background.
|
||||
UniTask.RunOnThreadPool(() =>
|
||||
UniTask.RunOnThreadPool(async () =>
|
||||
{
|
||||
StreamByDistanceLoop(destroyToken : destroyToken);
|
||||
await StreamByDistanceLoop(destroyToken : destroyToken);
|
||||
}
|
||||
).Forget();
|
||||
}
|
||||
@@ -150,8 +153,6 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
_unloadDistance = _loadImmediateDistance;
|
||||
}
|
||||
|
||||
float immediateSqr = _loadImmediateDistance * _loadImmediateDistance;
|
||||
|
||||
while (_hostPlayer == null)
|
||||
{
|
||||
_hostPlayer = GetHostPlayer();
|
||||
@@ -160,45 +161,37 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
continue;
|
||||
}
|
||||
|
||||
await UniTask.DelayFrame(1); // wait for the host player to be initialized.
|
||||
await Task.Delay(100, destroyToken); // wait for the host player to be initialized.
|
||||
|
||||
_currentHostPosOxz = _hostPlayer.GetPosVector3();
|
||||
_currentHostPosOxz.y = 0;
|
||||
LoadAllObjectsNearPosition(_currentHostPosOxz, destroyToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This function will load all the objects that are close to the host player immediately. <br/> <br/>
|
||||
/// <b>Use this once at the beginning of the game. Or when player is revived/GOTO/Teleported.</b>
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private void LoadAllObjectsNearPosition(Vector3 targetPosition, CancellationToken destroyToken)
|
||||
{
|
||||
if (addressableObjects == null || addressableObjects.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (_unloadDistance < _loadImmediateDistance)
|
||||
{
|
||||
_unloadDistance = _loadImmediateDistance;
|
||||
}
|
||||
|
||||
float immediateSqr = _loadImmediateDistance * _loadImmediateDistance;
|
||||
float paddingSqr = _unloadDistance * _unloadDistance;
|
||||
|
||||
List<AddressableObject> objectsToLoad = new List<AddressableObject>();
|
||||
targetPosition.y = 0; // only consider Oxz plane
|
||||
// go through all the objects, check for the immediateSqr and load the objects that are in the range.
|
||||
for (int i = 0; i < addressableObjects.Length; i++)
|
||||
{
|
||||
AddressableObject obj = addressableObjects[i];
|
||||
if (obj == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
float distSqr = (obj.transform.position - _hostPlayer.transform.position).sqrMagnitude;
|
||||
if (distSqr <= immediateSqr)
|
||||
{
|
||||
obj.LoadAsset().Forget();
|
||||
objectsToLoad.Add(obj);
|
||||
}
|
||||
}
|
||||
|
||||
if (objectsToLoad.Count > 0)
|
||||
{
|
||||
// wait until all the objects are loaded.
|
||||
bool allLoaded = false;
|
||||
while (!allLoaded)
|
||||
{
|
||||
allLoaded = true;
|
||||
for (int i = 0; i < objectsToLoad.Count; i++)
|
||||
{
|
||||
if (!objectsToLoad[i].IsLoaded && !objectsToLoad[i].IsLoading)
|
||||
{
|
||||
allLoaded = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
await UniTask.DelayFrame(1, cancellationToken: destroyToken);
|
||||
}
|
||||
|
||||
BMLogger.Log("[LitModelHolder] All objects are loaded.");
|
||||
}
|
||||
TickStreaming(targetPosition, immediateSqr, paddingSqr, destroyToken);
|
||||
}
|
||||
|
||||
|
||||
@@ -229,7 +222,7 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
|
||||
if (_hasLastHostPos)
|
||||
{
|
||||
if ((_currentHostPos - _lastHostPos).sqrMagnitude < minMoveSqr)
|
||||
if ((_currentHostPosOxz - _lastHostPosOxz).sqrMagnitude < minMoveSqr)
|
||||
{
|
||||
await Task.Delay(intervalMs, destroyToken);
|
||||
continue;
|
||||
@@ -237,9 +230,9 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
}
|
||||
|
||||
_hasLastHostPos = true;
|
||||
_lastHostPos = _currentHostPos;
|
||||
|
||||
await TickStreaming(_currentHostPos, immediateSqr, paddingSqr, destroyToken);
|
||||
_lastHostPosOxz = _currentHostPosOxz;
|
||||
|
||||
TickStreaming(_currentHostPosOxz, immediateSqr, paddingSqr, destroyToken);
|
||||
|
||||
await Task.Delay(intervalMs, destroyToken);
|
||||
}
|
||||
@@ -251,7 +244,7 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
/// Go through all the objects and check if they are in the immediate loading range or padding range.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async UniTask TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken)
|
||||
private void TickStreaming(Vector3 hostPos, float immediateSqr, float paddingSqr, CancellationToken destroyToken)
|
||||
{
|
||||
if (addressableObjects == null || addressableObjects.Length == 0)
|
||||
{
|
||||
@@ -268,15 +261,14 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_loadedObjects.Contains(_currentObjectToCheck))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
float distSqr = (_currentObjectToCheck.ObjectPosition - hostPos).sqrMagnitude;
|
||||
float distSqr = (_currentObjectToCheck.ObjectPositionOxz - hostPos).sqrMagnitude;
|
||||
|
||||
if (distSqr <= immediateSqr)
|
||||
{
|
||||
if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (!_candidatesForLoading.ContainsKey(_currentObjectToCheck))
|
||||
{
|
||||
_candidatesForLoading[_currentObjectToCheck] = _realTimeSinceStartUp;
|
||||
@@ -286,7 +278,10 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
{
|
||||
if (_currentObjectToCheck.IsLoaded || _currentObjectToCheck.IsLoading)
|
||||
{
|
||||
_objectsToUnload.Add(_currentObjectToCheck);
|
||||
if (!_objectsToUnload.Contains(_currentObjectToCheck))
|
||||
{
|
||||
_objectsToUnload.Add(_currentObjectToCheck);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -299,11 +294,8 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
// load the objects that are in the loading range long enough. (_candidateWaitTimeSeconds)
|
||||
foreach (var kvp in _candidatesForLoading)
|
||||
{
|
||||
if (kvp.Value < _realTimeSinceStartUp - _candidateWaitTimeSeconds)
|
||||
{
|
||||
kvp.Key.LoadAsset().Forget();
|
||||
_loadedObjects.Add(kvp.Key);
|
||||
}
|
||||
kvp.Key.LoadAsset().Forget();
|
||||
_loadedObjects.Add(kvp.Key);
|
||||
}
|
||||
// remove the loaded objects from the candidates for loading list.
|
||||
foreach (var obj in _loadedObjects)
|
||||
@@ -335,13 +327,37 @@ public class LitModelHolder : MonoSingleton<LitModelHolder>
|
||||
_hostPlayer = GetHostPlayer();
|
||||
if (_hostPlayer != null)
|
||||
{
|
||||
_currentHostPos = _hostPlayer.transform.position;
|
||||
_currentHostPosOxz = _hostPlayer.GetPosVector3(false);
|
||||
_currentHostPosOxz.y = 0;
|
||||
_hostPosReady = true;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
#region Public Functions
|
||||
public async UniTask LoadAllObjectsNearTargetPosition(Vector3 targetPosition = default, bool useHostPlayerPosition = false)
|
||||
{
|
||||
if (!useHostPlayerPosition)
|
||||
{
|
||||
_currentHostPosOxz = targetPosition;
|
||||
_currentHostPosOxz.y = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
while (_hostPlayer == null)
|
||||
{
|
||||
UpdateHostPlayerPosition();
|
||||
await Task.Delay(10);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UniTask.RunOnThreadPool(() => {LoadAllObjectsNearPosition(_currentHostPosOxz, _cts.Token);}).Forget();
|
||||
}
|
||||
#endregion
|
||||
|
||||
// Keep this part of the code for the initial setup of the addressable objects.
|
||||
// We have to run this once on every scene.
|
||||
#if UNITY_EDITOR
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:1f175b8382ec0686d5bce9ce1d33a04868482bfd6bf28ef42b01356eaba0630f
|
||||
size 196281143
|
||||
oid sha256:8afbdb17249969e64a11fbda64cda8d83eebcc9fa65a12a47dfa60670304a597
|
||||
size 196460134
|
||||
|
||||
@@ -76,6 +76,8 @@ public partial class CECGameRun
|
||||
public void Init()
|
||||
{
|
||||
#if !UNITY_EDITOR
|
||||
Debug.unityLogger.logEnabled = false;
|
||||
QualitySettings.vSyncCount = 0;
|
||||
Application.targetFrameRate = 60;
|
||||
#endif
|
||||
instance = this;
|
||||
|
||||
@@ -564,71 +564,71 @@ namespace BrewMonster
|
||||
//Debug.LogError("HoangDev : ProcessMessageProcessMessageProcessMessage " + msg);
|
||||
switch (msg)
|
||||
{
|
||||
case int value when value == EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_IVTRINFO:
|
||||
case EC_MsgDef.MSG_HST_CORRECTPOS: OnMsgHstCorrectPos(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_GOTO: OnMsgHstGoto(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_IVTRINFO:
|
||||
{
|
||||
OnMsgHstIvtrInfo(Msg);
|
||||
break;
|
||||
}
|
||||
case int value when value == EC_MsgDef.MSG_HST_OWNITEMINFO:
|
||||
case EC_MsgDef.MSG_HST_OWNITEMINFO:
|
||||
{
|
||||
OnMsgHstOwnItemInfo(Msg);
|
||||
break;
|
||||
}
|
||||
case int value when value == EC_MsgDef.MSG_HST_TASKDATA:
|
||||
case EC_MsgDef.MSG_HST_TASKDATA:
|
||||
{
|
||||
OnMsgHstTaskData(Msg).Forget();
|
||||
//Debug.LogError("[Dat]- OnMsgHstTaskData");
|
||||
break;
|
||||
}
|
||||
case int value when value == EC_MsgDef.MSG_HST_ITEMOPERATION:
|
||||
case EC_MsgDef.MSG_HST_ITEMOPERATION:
|
||||
OnMsgHstItemOperation(Msg);
|
||||
break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_PICKUPITEM:
|
||||
case EC_MsgDef.MSG_HST_PICKUPITEM:
|
||||
OnMsgHstPickupItem(Msg);
|
||||
break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_PRODUCEITEM:
|
||||
case EC_MsgDef.MSG_HST_PRODUCEITEM:
|
||||
OnMsgHstProduceItem(Msg);
|
||||
break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_SELTARGET:
|
||||
case EC_MsgDef.MSG_HST_SELTARGET:
|
||||
OnMsgHstSelTarget(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_USEITEM:
|
||||
case EC_MsgDef.MSG_HST_USEITEM:
|
||||
OnMsgHstUseItem(Msg);
|
||||
break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_ATKRESULT: OnMsgHstAttackResult(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_ATTACKED: OnMsgHstAttacked(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_HURTRESULT: OnMsgHstHurtResult(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_INFO00: OnMsgHstInfo00(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_NPCGREETING: OnMsgHstNPCGreeting(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_WAYPOINT: OnMsgHstWayPoint(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_SKILLDATA: OnMsgHstSkillData(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_DIED: OnMsgHstDied(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_STARTATTACK: OnMsgHstStartAttack(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_STOPATTACK: OnMsgHstStopAttack(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_SKILLRESULT: OnMsgHstSkillResult(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_CASTSKILL: OnMsgPlayerCastSkill(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_ENCHANTRESULT: OnMsgEnchantResult(Msg); break;
|
||||
|
||||
case int value when value == EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break;
|
||||
case int value when value == EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_OWNEXTPROP: OnMsgHstExtProp(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_PLAYERDOEMOTE: OnMsgPlayerDoEmote(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_TARGETISFAR: OnMsgHstTargetIsFar(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_PLAYERGATHER: OnMsgPlayerGather(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_COOLTIMEDATA: OnMsgHstCoolTimeData(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_SETCOOLTIME: OnMsgHstSetCoolTime(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_PRESSCANCEL: OnMsgHstPressCancel(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_LEARNSKILL: OnMsgHstLearnSkill(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_COMBO_SKILL_PREPARE: OnMsgComboSkillPrepare(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_PLAYERFLY: OnMsgPlayerFly(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_PETOPT: OnMsgHstPetOpt(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_SETPLAYERLIMIT: OnMsgHstSetPlayerLimit(Msg); break;
|
||||
case EC_MsgDef.MSG_PM_PLAYERMOUNT: OnMsgPlayerMount(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_EMBEDITEM: OnMsgHstEmbedItem(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_JOINTEAM: OnMsgHstJoinTeam(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_LEAVETEAM: OnMsgHstLeaveTeam(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_NEWTEAMMEM: OnMsgHstNewTeamMem(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_TEAMMEMBERDATA: OnMsgHstTeamMemberData(Msg); break;
|
||||
case EC_MsgDef.MSG_HST_CONTINUECOMBOSKILL: OnMsgContinueComboSkill(Msg); break;
|
||||
}
|
||||
|
||||
/*if (bActionStartSkill)
|
||||
@@ -1044,7 +1044,7 @@ namespace BrewMonster
|
||||
|
||||
switch (Convert.ToInt32(Msg.dwParam2))
|
||||
{
|
||||
case int value2 when value2 == CommandID.OBJECT_CAST_SKILL:
|
||||
case CommandID.OBJECT_CAST_SKILL:
|
||||
{
|
||||
cmd_object_cast_skill pCmd =
|
||||
GPDataTypeHelper.FromBytes<cmd_object_cast_skill>((byte[])Msg.dwParam1);
|
||||
@@ -1109,7 +1109,7 @@ namespace BrewMonster
|
||||
}
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.SKILL_PERFORM:
|
||||
case CommandID.SKILL_PERFORM:
|
||||
{
|
||||
// Skill perform
|
||||
// 技能执行
|
||||
@@ -1129,7 +1129,7 @@ namespace BrewMonster
|
||||
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.HOST_STOP_SKILL:
|
||||
case CommandID.HOST_STOP_SKILL:
|
||||
{
|
||||
m_pPrepSkill = null;
|
||||
|
||||
@@ -1166,7 +1166,7 @@ namespace BrewMonster
|
||||
m_idCurSkillTarget = 0;
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.SELF_SKILL_INTERRUPTED:
|
||||
case CommandID.SELF_SKILL_INTERRUPTED:
|
||||
{
|
||||
// Skill interrupted
|
||||
// 技能被打断
|
||||
@@ -1213,7 +1213,7 @@ namespace BrewMonster
|
||||
CECAutoPolicy.GetInstance().SendEvent_SkillInterrupt(skill_id);
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.OBJECT_CAST_INSTANT_SKILL:
|
||||
case CommandID.OBJECT_CAST_INSTANT_SKILL:
|
||||
{
|
||||
// Cast instant skill
|
||||
// 施放即时技能
|
||||
@@ -1236,7 +1236,7 @@ namespace BrewMonster
|
||||
bActionStartSkill = true;
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.OBJECT_CAST_POS_SKILL:
|
||||
case CommandID.OBJECT_CAST_POS_SKILL:
|
||||
{
|
||||
// Cast position skill (target position instead of target object)
|
||||
// 施放位置技能(目标位置而不是目标对象)
|
||||
@@ -1361,7 +1361,7 @@ namespace BrewMonster
|
||||
bActionStartSkill = true;
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_SKILL:
|
||||
case CommandID.PLAYER_CAST_RUNE_SKILL:
|
||||
{
|
||||
// Cast rune skill (item skill)
|
||||
// 施放符文技能(物品技能)
|
||||
@@ -1424,7 +1424,7 @@ namespace BrewMonster
|
||||
Debug.Log($"Cast rune skill({m_pCurSkill.GetSkillID()})");
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL:
|
||||
case CommandID.PLAYER_CAST_RUNE_INSTANT_SKILL:
|
||||
{
|
||||
// Cast instant rune skill
|
||||
// 施放即时符文技能
|
||||
@@ -1452,7 +1452,7 @@ namespace BrewMonster
|
||||
bActionStartSkill = true;
|
||||
break;
|
||||
}
|
||||
case int value2 when value2 == CommandID.ERROR_MESSAGE:
|
||||
case CommandID.ERROR_MESSAGE:
|
||||
bDoOtherThing = true;
|
||||
break;
|
||||
|
||||
@@ -3032,7 +3032,7 @@ namespace BrewMonster
|
||||
// 调用 Goto 方法来正确处理传送
|
||||
if (!Goto(idInst, vPos, iLine))
|
||||
{
|
||||
Debug.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}");
|
||||
BMLogger.LogError($"OnMsgHstGoto: Failed to teleport to instance {idInst}");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -3088,6 +3088,7 @@ namespace BrewMonster
|
||||
// 如果可用则更新相机
|
||||
// UpdateFollowCamera(false, 10); // Uncomment if UpdateFollowCamera method exists
|
||||
|
||||
LitModelHolder.Instance.LoadAllObjectsNearTargetPosition(vPos).Forget();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ public class CECUIManager : MonoSingleton<CECUIManager>
|
||||
}
|
||||
private void Update()
|
||||
{
|
||||
_fpsText.text = $"{Mathf.RoundToInt(1f / Time.deltaTime)}";
|
||||
// _fpsText.text = $"{Mathf.RoundToInt(1f / Time.deltaTime)}";
|
||||
if (m_pDlgQuickBar1 != null)
|
||||
{ m_pDlgQuickBar1.UpdateShortcuts(); }
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ PlayerSettings:
|
||||
disableDepthAndStencilBuffers: 0
|
||||
androidStartInFullscreen: 1
|
||||
androidRenderOutsideSafeArea: 1
|
||||
androidUseSwappy: 1
|
||||
androidUseSwappy: 0
|
||||
androidBlitType: 0
|
||||
androidResizeableActivity: 1
|
||||
androidDefaultWindowWidth: 1920
|
||||
|
||||
@@ -60,4 +60,8 @@ QualitySettings:
|
||||
excludedTargetPlatforms:
|
||||
- Standalone
|
||||
m_TextureMipmapLimitGroupNames: []
|
||||
m_PerPlatformDefaultQuality: {}
|
||||
m_PerPlatformDefaultQuality:
|
||||
Android: 0
|
||||
Standalone: 0
|
||||
VisionOS: 0
|
||||
iPhone: 0
|
||||
|
||||
Reference in New Issue
Block a user