diff --git a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll index f79f6e0391..076b7ab755 100644 Binary files a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll and b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll differ diff --git a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs index 4a745fae9f..825d93d228 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs @@ -26,6 +26,7 @@ namespace PerfectWorld.Scripts.Managers public int HandlerId => (int)MANAGER_INDEX.MAN_PLAYER; public bool ProcessMessage(ECMSG Msg) { + Debug.Log("HoangDev: ProcessMessageManPlayer :"); if (Msg.iSubID == 0) { if (GameController.Instance == null) return true; diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs index e3d9caf3b6..6e6c41f383 100644 --- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs +++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs @@ -7,7 +7,7 @@ using UnityEngine; namespace PerfectWorld.Scripts.Player { - public class EC_ElsePlayer : MonoBehaviour + public class EC_ElsePlayer : EC_Player { A3DVECTOR3 m_vMoveDir; // Player's velocity A3DVECTOR3 m_vServerPos; // Player's real position on server @@ -119,6 +119,11 @@ namespace PerfectWorld.Scripts.Player m_aabb.CompleteMinsMaxs(); m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f); m_aabbServer.CompleteMinsMaxs(); + + if (TryGetComponent(out var visual)) + { + visual.InitHostPlayerEventDoneHandler(); + } } void CalcPlayerAABB() @@ -160,6 +165,10 @@ namespace PerfectWorld.Scripts.Player m_fMoveSpeed = fDist / (dwDeltaTime * 0.001f); Mathf.Clamp(m_fMoveSpeed, 0.0f, fSpeed * 1.2f); + //if (!m_pPlayerModel) return; + //if (!IsValidAction(iCurAction)) return; + BrewMonster.Logger.Log("HoangDev : MoveToMoveTo"); + PlayAction((int)PLAYER_ACTION_TYPE.ACT_RUN, true, 1, false); } public bool MovingTo(float dwDeltaTime) @@ -202,6 +211,12 @@ namespace PerfectWorld.Scripts.Player vDir.Normalize(); vPos = MoveStep(vDir, m_fMoveSpeed, fDeltaTime); SetPos(vPos); + Quaternion targetRotation = Quaternion.LookRotation(EC_Utility.ToVector3(vDir)); + transform.rotation = Quaternion.Slerp( + transform.rotation, + targetRotation, + rotationSpeed * Time.deltaTime + ); } return bRet; @@ -266,7 +281,7 @@ namespace PerfectWorld.Scripts.Player // SetGroundNormal(m_cdr.vecGroundNormal); //else // SetGroundNormal(g_vAxisY); - + return m_cdr.vCenter - g_vAxisY * m_cdr.vExts.y; } @@ -314,7 +329,7 @@ namespace PerfectWorld.Scripts.Player // Set server position public void SetServerPos(A3DVECTOR3 vPos) { - m_vServerPos = vPos; + m_vServerPos = vPos; // If this player is a mule, change it's rider's server pos too. if (m_iBuddyId != 0 && !m_bHangerOn) { @@ -341,7 +356,7 @@ namespace PerfectWorld.Scripts.Player m_aabb.CompleteMinsMaxs(); m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f); m_aabbServer.CompleteMinsMaxs(); - } + } private A3DVECTOR3 GetPos() { @@ -350,7 +365,7 @@ namespace PerfectWorld.Scripts.Player result.y = transform.position.y; result.z = transform.position.z; return result; - } + } } // Player appear flag diff --git a/Assets/Scenes/NPCRender.unity b/Assets/Scenes/NPCRender.unity index 9140121acd..d906b29987 100644 --- a/Assets/Scenes/NPCRender.unity +++ b/Assets/Scenes/NPCRender.unity @@ -77450,7 +77450,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &960760104 Transform: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/CECHostPlayer.cs b/Assets/Scripts/CECHostPlayer.cs index c04a0d2f18..914e5802c4 100644 --- a/Assets/Scripts/CECHostPlayer.cs +++ b/Assets/Scripts/CECHostPlayer.cs @@ -39,7 +39,6 @@ public class CECHostPlayer : EC_Player Vector3 playerVelocity; bool isGrounded = false; bool isRun = false; - GameObject modle; Vector3 m_vLastSevPos; // ====== Ground cast config ====== @@ -76,16 +75,16 @@ public class CECHostPlayer : EC_Player public void SetModelHostPlayer() { - modle = NPCManager.Instance.GetModelPlayer(); + m_pPlayerModel = NPCManager.Instance.GetModelPlayer(); Scene scene = SceneManager.GetSceneByName("WorldRender"); - SceneManager.MoveGameObjectToScene(modle, scene); - modle.transform.SetParent(parentModel); - modle.transform.localPosition = Vector3.zero; - modle.SetActive(true); + SceneManager.MoveGameObjectToScene(m_pPlayerModel, scene); + m_pPlayerModel.transform.SetParent(parentModel); + m_pPlayerModel.transform.localPosition = Vector3.zero; + m_pPlayerModel.SetActive(true); } private void Start() { - _playerStateMachine.InitState(_moveState); + _playerStateMachine.InitState(_idleState); // btnJump.onClick.AddListener(HandleJump); } @@ -301,6 +300,7 @@ public class CECHostPlayer : EC_Player //{ // roleName = Encoding.UTF8.GetString(role.name.ByteArray, 0, role.name.Length); //} + SetPlayerInfor(new INFO(role.cid, role.crc_e, role.crc_c)); Vector3 pos = new Vector3(role.pos.x, role.pos.y, role.pos.z); if (txtName != null) txtName.text = roleName; transform.position = pos; @@ -309,7 +309,10 @@ public class CECHostPlayer : EC_Player joystick = FindAnyObjectByType(); EventBus.Subscribe(JoystickRelease); EventBus.Subscribe(JoystickStartDrag); - EventBus.Publish(new InitHostPlayerEventDone()) ; + if (TryGetComponent(out var visual)) + { + visual.InitHostPlayerEventDoneHandler(); + } } private void JoystickStartDrag(JoystickPressEvent joystickPressEvent) @@ -343,7 +346,3 @@ public enum StateAnim Run = 3, Jump = 4 } -public struct InitHostPlayerEventDone -{ - -} diff --git a/Assets/Scripts/CECStringTab.cs b/Assets/Scripts/CECStringTab.cs index 063c9594ff..badb1b4243 100644 --- a/Assets/Scripts/CECStringTab.cs +++ b/Assets/Scripts/CECStringTab.cs @@ -25,10 +25,6 @@ public class CECStringTab { bool ok = bUnicode ? LoadWideStrings(szFile) : LoadANSIStrings(szFile); m_bInit = ok; - foreach(var str in m_AStrTab.Values) - { - BrewMonster.Logger.Log("HoangDev: m_AStrTab.Values" + str); - } return ok; } catch (Exception e) diff --git a/Assets/Scripts/EC_Utility.cs b/Assets/Scripts/EC_Utility.cs index c73501799b..7417d80a68 100644 --- a/Assets/Scripts/EC_Utility.cs +++ b/Assets/Scripts/EC_Utility.cs @@ -1,4 +1,5 @@ using BrewMonster; +using CSNetwork.GPDataType; using System; using System.Collections; using UnityEngine; @@ -33,6 +34,10 @@ public static class EC_Utility { return new System.Numerics.Vector3(v.x, v.y, v.z); } + public static Vector3 ToVector3(A3DVECTOR3 a3DVECTOR3) + { + return new Vector3(a3DVECTOR3.x, a3DVECTOR3.y, a3DVECTOR3.z); + } public static float MagnitudeH(this Vector3 v) { return Mathf.Sqrt(v.x * v.x + v.z * v.z); diff --git a/Assets/Scripts/Move/EC_Player.cs b/Assets/Scripts/Move/EC_Player.cs index e7d9de0f77..44f3eb1b64 100644 --- a/Assets/Scripts/Move/EC_Player.cs +++ b/Assets/Scripts/Move/EC_Player.cs @@ -1,24 +1,37 @@ using BrewMonster; using ModelRenderer.Scripts.GameData; using Mono.Cecil; +using System; using System.Collections.Generic; using UnityEngine; -public class EC_Player : MonoBehaviour +public abstract class EC_Player : MonoBehaviour { private static PLAYER_ACTION[] _default_actions; private static PLAYER_ACTION[] _turning_actions; PLAYER_ACTION[] m_PlayerActions; + [SerializeField] protected INFO m_PlayerInfo; + protected GameObject m_pPlayerModel; + protected float rotationSpeed = 5; protected void Awake() { m_PlayerActions = _default_actions; } + public void SetPlayerInfor(INFO playinfo) + { + m_PlayerInfo = playinfo; + } + public INFO GetPlayInfo() + { + return m_PlayerInfo; + } public static void InitStaticRes() { BuildActionList(); } + public bool IsValidAction(int iIndex) { return (iIndex >= 0 && iIndex < (int)PLAYER_ACTION_TYPE.ACT_MAX) ? true : false; } private static void BuildActionList() { if (_default_actions == null) @@ -98,6 +111,7 @@ public class EC_Player : MonoBehaviour } else { + } } return PlayActionWithConfig(iAction, m_PlayerActions[iAction], bRestart, iTransTime, bQueue); @@ -108,7 +122,8 @@ public class EC_Player : MonoBehaviour PLAYER_ACTION action = actionConfig; var szAct = EC_Utility.BuildActionName(action, 0); - EventBus.Publish(new PlayActionEvent(szAct)); + BrewMonster.Logger.Log("HoangDev szActszAct: " + szAct); + EventBus.PublishChannel(m_PlayerInfo.cid, new PlayActionEvent(szAct)); return true; } public static void Dispose() @@ -260,9 +275,22 @@ public class EC_Player : MonoBehaviour } public struct PlayActionEvent { - public string AnimationName; + public string AnimationName; public PlayActionEvent(string animationName) { this.AnimationName = animationName; } } +[Serializable] +public struct INFO +{ + public int cid; // Character ID + public int crc_c; // customized data crc + public int crc_e; // Equipment data crc + public INFO(int cid, int crc_c, int crc_) + { + this.cid = cid; + this.crc_c = crc_c; + this.crc_e = crc_; + } +}; \ No newline at end of file diff --git a/Assets/Scripts/PlayerVisual.cs b/Assets/Scripts/PlayerVisual.cs index 033d084ff8..3524d2b318 100644 --- a/Assets/Scripts/PlayerVisual.cs +++ b/Assets/Scripts/PlayerVisual.cs @@ -5,11 +5,9 @@ using UnityEngine; public class PlayerVisual : MonoBehaviour { [SerializeField] NamedAnimancerComponent animancer; - private void Awake() - { - EventBus.Subscribe(InitHostPlayerEventDoneHandler); - EventBus.Subscribe(PlayActionEventHandler); - } + + [SerializeField] private INFO _playerInfo; + private void PlayActionEventHandler(PlayActionEvent @event) { @@ -17,17 +15,25 @@ public class PlayerVisual : MonoBehaviour animancer.TryPlay(@event.AnimationName); } - private void InitHostPlayerEventDoneHandler(InitHostPlayerEventDone done) + public void InitHostPlayerEventDoneHandler() { animancer = GetComponentInChildren(); if(animancer == null) { - BrewMonster.Logger.Log("animancer == null"); + BrewMonster.Logger.LogError("animancer == null"); + return; } + var player = GetComponentInParent(); + if(player == null) + { + BrewMonster.Logger.LogError("player == null"); + return; + } + _playerInfo = player.GetPlayInfo(); + EventBus.SubscribeChannel(_playerInfo.cid, PlayActionEventHandler); } private void OnDestroy() { - EventBus.Unsubscribe(InitHostPlayerEventDoneHandler); - EventBus.Unsubscribe(PlayActionEventHandler); + EventBus.UnsubscribeAllInChannel(_playerInfo.cid); } }