diff --git a/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll b/Assets/NetworkLib/Debug/netstandard2.1/CSNetwork.dll index d89d040b14..a171dd6bd4 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 d1e85fbf39..6f2ce3dc11 100644 --- a/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs +++ b/Assets/PerfectWorld/Scripts/Managers/EC_ManPlayer.cs @@ -2,6 +2,7 @@ using BrewMonster.Network; using CSNetwork; using CSNetwork.GPDataType; +using CSNetwork.Protocols.RPCData; using PerfectWorld.Scripts.Player; using System; using System.Collections; @@ -76,7 +77,8 @@ namespace PerfectWorld.Scripts.Managers if (cid != iHostID) { info_player_1 info_Player_1 = GPDataTypeHelper.FromBytes((byte[])Msg.dwParam1); - ElsePlayerEnter(info_Player_1, commandID); + RoleInfo roleInfo = (RoleInfo)Msg.dwParam4; + ElsePlayerEnter(info_Player_1, commandID, roleInfo); GameController.Instance.Log("ElsePlayer has join"); } break; @@ -131,7 +133,7 @@ namespace PerfectWorld.Scripts.Managers return true; } - public EC_ElsePlayer ElsePlayerEnter(info_player_1 info, int iCmd) + public EC_ElsePlayer ElsePlayerEnter(info_player_1 info, int iCmd, RoleInfo roleInfo) { // If this player's id is in unknown table, remove it because this player // won't be unknown anymore @@ -152,12 +154,12 @@ namespace PerfectWorld.Scripts.Managers { // This player has existed in player table, call special initial function // TODO: fix after pPlayer init - //pPlayer.Init(Info, iAppearFlag, true); + pPlayer.Init(roleInfo, info); return pPlayer; } // Create a new player - if (!(pPlayer = CreateElsePlayer(info, iAppearFlag))) + if (!(pPlayer = CreateElsePlayer(roleInfo, info, iAppearFlag))) { return null; } @@ -175,12 +177,13 @@ namespace PerfectWorld.Scripts.Managers return pPlayer; } - private EC_ElsePlayer CreateElsePlayer(info_player_1 info, int iAppearFlag) + private EC_ElsePlayer CreateElsePlayer(RoleInfo roleInfo, info_player_1 info, int iAppearFlag) { var ob = GameController.Instance.InitCharacter(info); EC_ElsePlayer elsePlayer = ob.AddComponent(); elsePlayer.GetComponent().enabled = false; //init + elsePlayer.Init(roleInfo, info); return elsePlayer; } diff --git a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs index 5d350c43a4..e3d9caf3b6 100644 --- a/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs +++ b/Assets/PerfectWorld/Scripts/Players/EC_ElsePlayer.cs @@ -1,6 +1,7 @@ using BrewMonster; using CSNetwork; using CSNetwork.GPDataType; +using CSNetwork.Protocols.RPCData; using System; using UnityEngine; @@ -23,6 +24,111 @@ namespace PerfectWorld.Scripts.Player OtherPlayer_Move_Info m_cdr = new OtherPlayer_Move_Info(); // 和服务器提供的 aabb,无法影响朝向 = The AABB provided by the server cannot affect the facing/orientation A3DAABB m_aabbServer = new A3DAABB(); + A3DAABB m_aabb = new A3DAABB(); // Player's aabb£¬ÓÃÓÚÏÔʾµÄaabb£¬ÊÜËõ·ÅÓ°Ïì + string m_strName; // Player name + int m_iProfession; // Profession + int m_iGender; // Gender + float m_fScaleBySkill = 1f; + MOVECONST m_MoveConst; // Const used when moving control + + public MOVECONST[] aMoveConsts = new MOVECONST[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER] + { + // ÎäÏÀ + // fStepHei fMinAirHei fMinWaterHei fShoreDepth fWaterSurf + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ·¨Ê¦ + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // Î×ʦ + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // Ñý¾« + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ÑýÊÞ + new MOVECONST(0.8f, 1.6f, 0.3f, 1.8f, 0.7f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + // ´Ì¿Í + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // Óðâ + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ÓðÁé + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ½£Áé + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ÷ÈÁé + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // Ò¹Ó° + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + // ÔÂÏÉ + new MOVECONST(0.8f, 1.6f, 0.3f, 1.6f, 0.6f), + new MOVECONST(0.8f, 1.6f, 0.3f, 1.5f, 0.55f), + }; + + public A3DVECTOR3[] aExts = new A3DVECTOR3[PROFESSION.NUM_PROFESSION * GENDER.NUM_GENDER] + { + new A3DVECTOR3(0.4f, 0.9f, 0.4f), // ÎäÏÀ + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ·¨Ê¦ + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Î×ʦ + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ñý¾« + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.5f, 1.05f, 0.5f), // ÑýÊÞ + new A3DVECTOR3(0.3f, 0.9f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ´Ì¿Í + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Óðâ + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÓðÁé + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ½£Áé + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÷ÈÁé + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // Ò¹Ó° + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + new A3DVECTOR3(0.3f, 0.9f, 0.3f), // ÔÂÏÉ + new A3DVECTOR3(0.3f, 0.85f, 0.3f), + }; + + public void Init(RoleInfo roleInfo, info_player_1 Info) + { + m_iProfession = roleInfo.occupation; + m_iGender = roleInfo.gender; + + CalcPlayerAABB(); + + SetServerPos(Info.pos); + SetPos(Info.pos); + + m_cdr.fStepHeight = m_MoveConst.fStepHei; + m_cdr.vExts = m_aabbServer.Extents; + m_cdr.vVelocity.Clear(); + + A3DVECTOR3 vPos = GetPos(); + m_aabb.Center = vPos + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f); + m_aabb.CompleteMinsMaxs(); + m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f); + m_aabbServer.CompleteMinsMaxs(); + } + + void CalcPlayerAABB() + { + int iIndex = m_iProfession * GENDER.NUM_GENDER + m_iGender; + + m_aabb.Extents = aExts[iIndex] * m_fScaleBySkill; + m_aabbServer.Extents = aExts[iIndex]; + m_MoveConst = aMoveConsts[iIndex]; + } public void MoveTo(cmd_object_move Cmd) { @@ -56,7 +162,7 @@ namespace PerfectWorld.Scripts.Player } - public bool MovingTo(long dwDeltaTime) + public bool MovingTo(float dwDeltaTime) { bool bRet = false; @@ -73,13 +179,11 @@ namespace PerfectWorld.Scripts.Player if (Math.Abs(fMoveDelta - 0f) <= float.Epsilon || fMoveDelta >= fDist) //!fMoveDelta <=> (Math.Abs(fMoveDelta - 0f) <= float.Epsilon) Compare with 0 { SetPos(m_vServerPos); - //.LogError("m_vServerPos 1= " + m_vServerPos); bRet = true; } else { SetPos(vPos); - //Debug.LogError("vPos 1= " + vPos); } } else // Just move on @@ -91,7 +195,6 @@ namespace PerfectWorld.Scripts.Player if (fDist >= MAX_LAGDIST) { SetPos(m_vServerPos); - //Debug.LogError("m_vServerPos 2= " + m_vServerPos); return true; } @@ -99,7 +202,6 @@ namespace PerfectWorld.Scripts.Player vDir.Normalize(); vPos = MoveStep(vDir, m_fMoveSpeed, fDeltaTime); SetPos(vPos); - //Debug.LogError("vPos 2= " + vPos); } return bRet; @@ -150,19 +252,21 @@ namespace PerfectWorld.Scripts.Player fSpeed = -fSpeed; } m_cdr.vCenter = m_aabbServer.Center; - Debug.LogError("m_aabbServer.Center = " + m_aabbServer.Center.x + "," + m_aabbServer.Center.y + ","+ m_aabbServer.Center.z); + //Debug.LogError("m_aabbServer.Center = " + m_aabbServer.Center.x + "," + m_aabbServer.Center.y + ","+ m_aabbServer.Center.z); m_cdr.vVelocity = vRealDir * fSpeed; //Debug.LogError("vVelocity = " + m_cdr.vVelocity.x + "," + m_cdr.vVelocity.y + "," + m_cdr.vVelocity.z); m_cdr.t = fTime; m_cdr.bTestTrnOnly = false; - OtherPlayerMove(m_cdr); + //OtherPlayerMove(m_cdr); + A3DVECTOR3 vDelta = m_cdr.t * m_cdr.vVelocity; + m_cdr.vCenter += vDelta; + m_cdr.vecGroundNormal = g_vAxisY; //if (m_cdr.bTraceGround) // SetGroundNormal(m_cdr.vecGroundNormal); //else // SetGroundNormal(g_vAxisY); - Debug.LogError("g_vAxisY = " + g_vAxisY.x + "," + g_vAxisY.y + "," + g_vAxisY.z); - Debug.LogError("m_cdr.vExts.y = " + m_cdr.vExts.y); + return m_cdr.vCenter - g_vAxisY * m_cdr.vExts.y; } @@ -222,16 +326,21 @@ namespace PerfectWorld.Scripts.Player private void Update() { - MovingTo((long)(Time.deltaTime)); + MovingTo(Time.deltaTime); } private void SetPos(A3DVECTOR3 vPos) { - Vector3 vector = new Vector3(); + Vector3 vector = new Vector3(); vector.x = vPos.x; vector.y = vPos.y; vector.z = vPos.z; transform.position = vector; + + m_aabb.Center = vPos + new A3DVECTOR3(0.0f, m_aabb.Extents.y, 0.0f); + m_aabb.CompleteMinsMaxs(); + m_aabbServer.Center = vPos + new A3DVECTOR3(0.0f, m_aabbServer.Extents.y, 0.0f); + m_aabbServer.CompleteMinsMaxs(); } private A3DVECTOR3 GetPos()