replace state machine by HPWork

This commit is contained in:
NguyenVanDat
2025-12-03 18:14:10 +07:00
parent 832f268b41
commit 632f6b3813
19 changed files with 63 additions and 202 deletions
@@ -45,6 +45,11 @@ MonoBehaviour:
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: a81dab17b00ef4b4494a71ee88b10cc0
m_Address: "\u7A0B\u5E8F\u8054\u5165/\u89D2\u8272\u5347\u7EA7\u4EBA\u7C7B.gfx"
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
m_ReadOnly: 0
m_Settings: {fileID: 11400000, guid: 070edb522e6e54c14a99055900003890, type: 2}
m_SchemaSet:
@@ -1,6 +1,4 @@
using BrewMonster.Scripts.Player;
using CSNetwork.GPDataType;
using NUnit.Framework;
using PerfectWorld.Scripts.Player;
using System.Collections.Generic;
using System.Linq;
@@ -1,5 +1,4 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Player;
using System.Collections.Generic;
namespace BrewMonster.Scripts
@@ -479,11 +478,22 @@ namespace BrewMonster.Scripts
}
public void StartDelayedWork()
{
if (!HasDelayedWork()){
return;
}
CECHPWork pWork = m_Delayed.pWork;
m_Delayed.pWork = null;
// LOG_DEBUG_INFO(AString().Format("CECHPWork:: start delayed work %s, priority=%d", pWork->GetWorkName(), m_Delayed.iPriority));
InternallyStartWork(m_Delayed.iPriority, pWork);
}
public void ClearDelayedWork()
{
if (!HasDelayedWork()){
return;
}
// LOG_DEBUG_INFO(AString().Format("delayed CECHPWork::%s priority=%d cleared", m_Delayed.pWork->GetWorkName(), m_Delayed.iPriority));
// delete m_Delayed.pWork;
m_Delayed.pWork = null;
}
public CECHPWork GetDelayedWork()
{
@@ -742,6 +752,10 @@ namespace BrewMonster.Scripts
{
return IsWorkRunning(CECHPWork.Host_work_ID.WORK_PICKUP);
}
private bool HasDelayedWork()
{
return GetDelayedWork() != null;
}
}
public abstract class CECHPWorkPostTickCommand
{
@@ -1,5 +1,4 @@
using CSNetwork.GPDataType;
using BrewMonster.Scripts.Player;
using PerfectWorld.Scripts.Player;
namespace BrewMonster.Scripts
+1 -3
View File
@@ -1,6 +1,4 @@
using BrewMonster.Scripts.Ornament;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.World;
using BrewMonster.Scripts.World;
using CSNetwork.GPDataType;
using System;
using UnityEngine;
@@ -2,7 +2,6 @@
using BrewMonster.Assets.PerfectWorld.Scripts.UI;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.Skills;
using CSNetwork.C2SCommand;
using CSNetwork.GPDataType;
@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 9ef8d28320e272c47b341e1a2aca2ff5
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -1,28 +0,0 @@
using BrewMonster.Scripts.Player;
using UnityEngine;
using static CECPlayer;
namespace BrewMonster
{
public class PlayerIdleState : PlayerState
{
public PlayerIdleState(CECHostPlayer characterCtrl) : base(characterCtrl)
{
}
public override void Enter()
{
_characterCtrl.PlayAction((int)PLAYER_ACTION_TYPE.ACT_STAND, true, 1, false);
}
public override void Exit()
{
}
public override void Update()
{
_characterCtrl.HandleMovement();
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 89482cfe1c5315b4d833133e919eac40
@@ -1,29 +0,0 @@
using BrewMonster.Scripts.Player;
using UnityEngine;
using static CECPlayer;
namespace BrewMonster
{
public class PlayerMoveState : PlayerState
{
public PlayerMoveState(CECHostPlayer characterCtrl) : base(characterCtrl)
{
}
public override void Enter()
{
_characterCtrl.PlayAction((int)PLAYER_ACTION_TYPE.ACT_RUN, true, 1, false);
}
public override void Exit()
{
_characterCtrl.StopMovement();
}
public override void Update()
{
_characterCtrl.HandleMovement();
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 979df0dcb6a16cf47a77106a9c9ebb8f
@@ -1,16 +0,0 @@
using UnityEngine;
namespace BrewMonster
{
public abstract class PlayerState
{
protected readonly CECHostPlayer _characterCtrl;
public PlayerState(CECHostPlayer characterCtrl)
{
_characterCtrl = characterCtrl;
}
public abstract void Enter();
public abstract void Exit();
public abstract void Update();
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 1c3e8f4466ed88340aeb27f86dc0c172
@@ -1,11 +1,7 @@
using BrewMonster.Network;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Player;
using CSNetwork.GPDataType;
using PerfectWorld.Scripts.Task;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using CSNetwork;
using UnityEngine;
+40 -52
View File
@@ -1,11 +1,9 @@
using BrewMonster;
using BrewMonster.Assets.PerfectWorld.Scripts.Players;
using BrewMonster.Assets.PerfectWorld.Scripts.Players;
using BrewMonster.Managers;
using BrewMonster.Network;
using BrewMonster.PerfectWorld.Scripts.Vfx;
using BrewMonster.Scripts;
using BrewMonster.Scripts.Managers;
using BrewMonster.Scripts.Player;
using BrewMonster.Scripts.Skills;
using CSNetwork;
using CSNetwork.GPDataType;
@@ -33,9 +31,6 @@ namespace BrewMonster
[SerializeField] private Button btnJump;
[SerializeField] private Button btnRun;
private PlayerStateMachine _playerStateMachine;
private PlayerMoveState _moveState;
// private PlayerIdleState _idleState;
public CECHostMove m_MoveCtrl;
private CECHPWorkMan m_pWorkMan; // Host work manager
@@ -164,9 +159,6 @@ namespace BrewMonster
private void Awake()
{
base.Awake();
_moveState = new PlayerMoveState(this);
// _idleState = new PlayerIdleState(this);
_playerStateMachine = new PlayerStateMachine();
m_MoveCtrl = new CECHostMove(this);
// Cache: không bắt buộc, nhưng gọn tay và ít gọi property lặp.
@@ -240,8 +232,6 @@ namespace BrewMonster
{
mainCam = FindFirstObjectByType<Camera>();
}
// _playerStateMachine.InitState(_idleState);
// btnJump.onClick.AddListener(HandleJump);
// Cache input devices for better performance
@@ -263,8 +253,7 @@ namespace BrewMonster
m_MoveCtrl.Tick((ulong)(Time.deltaTime * 1000));
// Nếu có thay đổi runtime, có thể lấy lại mỗi vài giây/Start nếu bạn thích:
// ccRadius = controller.radius; ccSkin = controller.skinWidth;
_playerStateMachine.UpdateState();
OnKeyDown();
m_pWorkMan?.Tick(Time.deltaTime);
@@ -1079,49 +1068,48 @@ namespace BrewMonster
public void OnMsgHstGoto(in ECMSG Msg)
{
Debug.Log("HoangDev :OnMsgHstGoto");
PopupManager.Instance.OnPlayerRevived();
// p1 is a byte[] buffer; parse into cmd_notify_hostpos then set position
byte[] buf = (byte[])Msg.dwParam1;
cmd_notify_hostpos pCmd = GPDataTypeHelper.FromBytes<cmd_notify_hostpos>(buf);
SetPos(new Vector3(pCmd.vPos.x, pCmd.vPos.y, pCmd.vPos.z));
}
private void OnMsgHstStartAttack(in ECMSG Msg)
{
// cmd_host_start_attack pCmd = (cmd_host_start_attack*)Msg.dwParam1;
// ASSERT(pCmd);
//
// // test code...
// // g_pGame.GetRTDebug().OutputNotifyMessage(RTDCOL_WARNING, _AL("start attack !"));
//
// // Check whether target is the one that we have selected
// if (m_idSelTarget != pCmd.idTarget)
// g_pGame.RuntimeDebugInfo(RTDCOL_WARNING, _AL("Target has changed !"));
//
// // If target turn to be un-attackable, cancel action
// if (!AttackableJudge(pCmd.idTarget, true))
// {
// g_pGame.GetGameSession().c2s_CmdCancelAction();
// g_pGame.RuntimeDebugInfo(RTDCOL_WARNING, _AL("Cannel attacking !"));
// return;
// }
//
// // Synchronize ammo amount
// CECIvtrItem* pItem = m_pEquipPack.GetItem(EQUIPIVTR_PROJECTILE);
// if (pItem)
// {
// if (!pCmd.ammo_remain)
// m_pEquipPack.SetItem(EQUIPIVTR_PROJECTILE, NULL);
// else
// pItem.SetAmount(pCmd.ammo_remain);
// }
//
// CECHPWorkMelee* pWork = (CECHPWorkMelee*)m_pWorkMan.CreateWork(CECHPWork::WORK_HACKOBJECT);
// m_pWorkMan.StartWork_p1(pWork);
//
// m_bMelee = true;
cmd_host_start_attack pCmd = GPDataTypeHelper.FromBytes<cmd_host_start_attack>((byte[])Msg.dwParam1);
// ASSERT(pCmd);
// test code...
// g_pGame.GetRTDebug().OutputNotifyMessage(RTDCOL_WARNING, _AL("start attack !"));
// Check whether target is the one that we have selected
if (m_idSelTarget != pCmd.idTarget)
// g_pGame.RuntimeDebugInfo(RTDCOL_WARNING, _AL("Target has changed !"));
// If target turn to be un-attackable, cancel action
if (AttackableJudge(pCmd.idTarget, true)==0)
{
UnityGameSession.c2s_CmdCancelAction();
// g_pGame.RuntimeDebugInfo(RTDCOL_WARNING, _AL("Cannel attacking !"));
return;
}
// Synchronize ammo amount
// CECIvtrItem* pItem = m_pEquipPack.GetItem(EQUIPIVTR_PROJECTILE);
// if (pItem)
// {
// if (!pCmd.ammo_remain)
// m_pEquipPack.SetItem(EQUIPIVTR_PROJECTILE, NULL);
// else
// pItem.SetAmount(pCmd.ammo_remain);
// }
CECHPWorkMelee pWork = (CECHPWorkMelee)m_pWorkMan.CreateWork(Host_work_ID.WORK_HACKOBJECT);
m_pWorkMan.StartWork_p1(pWork);
m_bMelee = true;
// AP_ActionEvent(AP_EVENT_STARTMELEE);
}
@@ -1129,7 +1117,7 @@ namespace BrewMonster
{
// using namespace S2C;
//
// m_bMelee = false;
m_bMelee = false;
//
// // if there is an attack event currently, we should let it fire now.
ClearComActFlagAllRankNodes(true);
@@ -1774,12 +1762,12 @@ namespace BrewMonster
public bool IsPlayingAction(int iAction)
{
if (iAction == (int)PLAYER_ACTION_TYPE.ACT_WALK && _playerStateMachine.State is PlayerMoveState)
if (iAction == (int)PLAYER_ACTION_TYPE.ACT_WALK )//&& _playerStateMachine.State is PlayerMoveState
{
return true;
}
if (iAction == (int)PLAYER_ACTION_TYPE.ACT_STAND && _playerStateMachine.State is PlayerIdleState)
if (iAction == (int)PLAYER_ACTION_TYPE.ACT_STAND)// && _playerStateMachine.State is PlayerIdleState
{
return true;
}
@@ -2483,7 +2471,7 @@ namespace BrewMonster
case ActionCanDo.CANDO_TRADE:
if (IsDead() /*|| IsAboutToDie() || IsSitting() */ || IsJumping() /*|| IsMeleeing() ||
if (IsDead() || IsMeleeing() /*|| IsAboutToDie() || IsSitting() || IsJumping() ||
IsTrading() || IsUsingTrashBox() || IsTalkingWithNPC() || IsChangingFace() ||
IsSpellingMagic() || GetBoothState() != 0 || m_iBuddyId || IsOperatingPet() || IsRebuildingPet() ||
IsUsingItem() || IsInvisible() || IsPassiveMove()*/)
@@ -2493,7 +2481,7 @@ namespace BrewMonster
case ActionCanDo.CANDO_PLAYPOSE:
if (IsDead() /*|| IsAboutToDie() || IsSitting()*/ || IsJumping() || /* IsMeleeing() ||
if (IsDead() || IsMeleeing() || /*|| IsAboutToDie() || IsSitting() || IsJumping() || /* ||
IsTrading() || IsUsingTrashBox() || IsTalkingWithNPC() || IsChangingFace() ||
IsSpellingMagic() || IsShapeChanged() || IsReviving() ||*/
m_iMoveEnv != (int)MoveEnvironment.MOVEENV_GROUND /*||
-44
View File
@@ -1,44 +0,0 @@
using UnityEngine;
namespace BrewMonster.Scripts.Player
{
public class PlayerStateMachine
{
PlayerState _state;
CECHostPlayer _characterCtrl;
public PlayerState State { get => _state; }
public void InitState(PlayerState state)
{
if (_state != null)
{
Debug.LogWarning("_state is already inited");
return;
}
_state = state;
_state.Enter();
}
public void ChangeState(PlayerState state)
{
if (_state == null)
{
Debug.LogError("you need to init state first ");
return;
}
if (_state == state)
{
Debug.LogWarning("Unchanged state");
}
_state.Exit();
_state = state;
_state.Enter();
}
public void UpdateState()
{
// _state.Update();
}
}
}
@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 99f098b6660da2c4f8ff06b5043a254b
-2
View File
@@ -1,7 +1,5 @@
using Animancer;
using BrewMonster;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
@@ -1,5 +1,4 @@
using BrewMonster;
using BrewMonster.Scripts.Player;
using UnityEngine;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;