This commit is contained in:
Le Duc Anh
2026-02-21 23:33:08 +07:00
parent 0e6ceaf6f3
commit 050bf5e9c8
14 changed files with 172 additions and 127 deletions
+2 -2
View File
@@ -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 -1
View File
@@ -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
+2 -2
View File
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1f175b8382ec0686d5bce9ce1d33a04868482bfd6bf28ef42b01356eaba0630f
size 196281143
oid sha256:8afbdb17249969e64a11fbda64cda8d83eebcc9fa65a12a47dfa60670304a597
size 196460134
+2
View File
@@ -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;
+53 -52
View File
@@ -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;
}
+1 -1
View File
@@ -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(); }
}
+1 -1
View File
@@ -69,7 +69,7 @@ PlayerSettings:
disableDepthAndStencilBuffers: 0
androidStartInFullscreen: 1
androidRenderOutsideSafeArea: 1
androidUseSwappy: 1
androidUseSwappy: 0
androidBlitType: 0
androidResizeableActivity: 1
androidDefaultWindowWidth: 1920
+5 -1
View File
@@ -60,4 +60,8 @@ QualitySettings:
excludedTargetPlatforms:
- Standalone
m_TextureMipmapLimitGroupNames: []
m_PerPlatformDefaultQuality: {}
m_PerPlatformDefaultQuality:
Android: 0
Standalone: 0
VisionOS: 0
iPhone: 0