fix after merge
This commit is contained in:
@@ -386,7 +386,7 @@ namespace BrewMonster
|
||||
{
|
||||
string name = sgcFile.Replace(".sgc", "");
|
||||
GFX = Resources.Load<GameObject>("GFX/"+name);
|
||||
BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + name);
|
||||
//BMLogger.LogError("HoangDev: Load A3DSkillGfxComposer GFX name: " + name);
|
||||
if (GFX == null)
|
||||
{
|
||||
GFX = Resources.Load<GameObject>("GFX/" + "PlaceHolder");
|
||||
|
||||
@@ -609,6 +609,10 @@ public class CECNPC : CECObject
|
||||
|
||||
Vector3 dir = m_vMoveDir.normalized;
|
||||
Vector3 moveDelta = dir * m_fMoveSpeed * deltaTime;
|
||||
if(_characterController == null)
|
||||
{
|
||||
BMLogger.LogError(" CECNPC.MovingTo _characterController == null " + gameObject.name);
|
||||
}
|
||||
_characterController.Move(moveDelta);
|
||||
// Thêm xoay theo trục Y
|
||||
FaceDirectionSmooth(dir, 10f, deltaTime);
|
||||
|
||||
@@ -12,6 +12,7 @@ GameObject:
|
||||
- component: {fileID: 1882963580244400679}
|
||||
- component: {fileID: -5899287755522118344}
|
||||
- component: {fileID: 1637622316711963511}
|
||||
- component: {fileID: -1360397627327243963}
|
||||
m_Layer: 0
|
||||
m_Name: NPCServer
|
||||
m_TagString: Untagged
|
||||
@@ -66,7 +67,7 @@ MonoBehaviour:
|
||||
m_idAttackTarget: 0
|
||||
m_npcUI: {fileID: 0}
|
||||
m_fMoveSpeed: 0
|
||||
_characterController: {fileID: 0}
|
||||
_characterController: {fileID: -1360397627327243963}
|
||||
--- !u!136 &1637622316711963511
|
||||
CapsuleCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -90,6 +91,31 @@ CapsuleCollider:
|
||||
m_Height: 2
|
||||
m_Direction: 1
|
||||
m_Center: {x: 0, y: 1, z: 0}
|
||||
--- !u!143 &-1360397627327243963
|
||||
CharacterController:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 2426933851766496167}
|
||||
m_Material: {fileID: 0}
|
||||
m_IncludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_ExcludeLayers:
|
||||
serializedVersion: 2
|
||||
m_Bits: 0
|
||||
m_LayerOverridePriority: 0
|
||||
m_ProvidesContacts: 0
|
||||
m_Enabled: 1
|
||||
serializedVersion: 3
|
||||
m_Height: 2
|
||||
m_Radius: 0.5
|
||||
m_SlopeLimit: 45
|
||||
m_StepOffset: 0.3
|
||||
m_SkinWidth: 0.08
|
||||
m_MinMoveDistance: 0.001
|
||||
m_Center: {x: 0, y: 0, z: 0}
|
||||
--- !u!1 &3297168817873124018
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -253,6 +279,8 @@ MonoBehaviour:
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
_nameText: {fileID: 606418994916995261}
|
||||
_healthText: {fileID: 0}
|
||||
_healthImage: {fileID: 0}
|
||||
--- !u!1 &6510845919681767284
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
|
||||
+251
-277
@@ -10,21 +10,17 @@ using CSNetwork;
|
||||
using CSNetwork.GPDataType;
|
||||
using CSNetwork.Protocols.RPCData;
|
||||
using ModelRenderer.Scripts.GameData;
|
||||
using PerfectWorld.Scripts.Managers;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEditor.Experimental.GraphView;
|
||||
using BrewMonster.PerfectWorld.Scripts.Vfx;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
using UnityEngine.UI;
|
||||
using static BrewMonster.CECCastSkillWhenMove;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
using static Unity.Cinemachine.CinemachineFreeLookModifier;
|
||||
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
|
||||
using Trace_reason = BrewMonster.CECHPWorkTrace.Trace_reason;
|
||||
using Host_work_ID = BrewMonster.Scripts.CECHPWork.Host_work_ID;
|
||||
using PerfectWorld.Scripts.Managers;
|
||||
|
||||
namespace BrewMonster
|
||||
{
|
||||
@@ -275,7 +271,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;
|
||||
|
||||
|
||||
OnKeyDown();
|
||||
|
||||
m_pWorkMan?.Tick(Time.deltaTime);
|
||||
@@ -1604,24 +1600,24 @@ namespace BrewMonster
|
||||
private void OnMsgHstStartAttack(in ECMSG Msg)
|
||||
{
|
||||
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 !"));
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
// 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)
|
||||
@@ -1631,10 +1627,10 @@ namespace BrewMonster
|
||||
// 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);
|
||||
}
|
||||
@@ -1801,10 +1797,6 @@ namespace BrewMonster
|
||||
|
||||
//m_CDRInfo.vTPNormal = GroundCheck(out RaycastHit hit) ? hit.normal : Vector3.zero;
|
||||
m_CDRInfo.vExtent = m_aabbServer.Extents;
|
||||
m_CDRInfo.vTPNormal = g_vOrigin;
|
||||
m_CDRInfo.fYVel = 0.0f;
|
||||
m_CDRInfo.fSlopeThresh = EC_SLOPE_Y;
|
||||
m_CDRInfo.fStepHeight = 0.8f;
|
||||
// Create work manager
|
||||
m_pWorkMan = new CECHPWorkMan(this);
|
||||
m_pWorkMan.StartWork_p0(m_pWorkMan.CreateWork(Host_work_ID.WORK_STAND));
|
||||
@@ -2319,7 +2311,7 @@ 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;
|
||||
}
|
||||
@@ -2349,7 +2341,7 @@ namespace BrewMonster
|
||||
return m_ExtProps.mv.swim_speed;
|
||||
}
|
||||
public bool ApplySkillShortcut(int idSkill, bool bCombo = false /* false */,
|
||||
int idSelTarget = 0/* 0 */, int iForceAtk = -1/* -1 */)
|
||||
int idSelTarget = 0/* 0 */, int iForceAtk = -1/* -1 */)
|
||||
{
|
||||
//StackChecker::ACTrace(4);
|
||||
|
||||
@@ -2617,6 +2609,11 @@ namespace BrewMonster
|
||||
}
|
||||
return true;
|
||||
}
|
||||
public CECSkill GetPrepSkill() { return m_pPrepSkill; }
|
||||
bool IsSpellingMagic()
|
||||
{
|
||||
return m_pWorkMan.IsSpellingMagic();
|
||||
}
|
||||
public void PrepareNPCService(int idSev)
|
||||
{
|
||||
if (!GPDataTypeHelper.ISNPCID(m_idSevNPC))
|
||||
@@ -3019,7 +3016,24 @@ namespace BrewMonster
|
||||
|
||||
return true;
|
||||
}
|
||||
bool IsTooNear(A3DVECTOR3 vTarget,ref float fNearDist)
|
||||
public A3DVECTOR3 GetDir()
|
||||
{
|
||||
// Return forward direction from transform
|
||||
return EC_Utility.ToA3DVECTOR3(transform.forward);
|
||||
}
|
||||
public A3DVECTOR3 A3d_RotatePosAroundY(A3DVECTOR3 vDir, float fAngle)
|
||||
{
|
||||
float cos = Mathf.Cos(fAngle);
|
||||
float sin = Mathf.Sin(fAngle);
|
||||
|
||||
A3DVECTOR3 result = new A3DVECTOR3();
|
||||
result.x = vDir.x * cos + vDir.z * sin;
|
||||
result.y = vDir.y;
|
||||
result.z = -vDir.x * sin + vDir.z * cos;
|
||||
|
||||
return result;
|
||||
}
|
||||
bool IsTooNear(A3DVECTOR3 vTarget, ref float fNearDist)
|
||||
{
|
||||
// ¸ù¾Ý¿Õ¼äÇé¿ö£¬¼ÆËãÏà½ü 3D ¿Õ¼äÉÏÓ¦±£³ÖµÄ½ÏС¾àÀ룬±ÜÃâÒÆ¶¯ºÜ½üÉõÖÁÖØºÏµÄÇé¿ö
|
||||
// ·µ»Ø true ±íÃ÷µ±Ç°¾àÀëСÓÚ¼ÆËã³öµÄ×îС¾àÀë
|
||||
@@ -3574,6 +3588,213 @@ namespace BrewMonster
|
||||
|
||||
return bRet;
|
||||
}
|
||||
public bool GetPushDir(ref Vector3 vPushDir, uint dwMask, float deltaTime)
|
||||
{
|
||||
Vector3 vRight = Vector3.zero;
|
||||
vRight.x = joystick.Horizontal;
|
||||
vRight.z = joystick.Vertical;
|
||||
vRight.y = 0f;
|
||||
vRight.Normalize();
|
||||
if (vRight == Vector3.zero)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
vPushDir = vRight;
|
||||
/* // reset
|
||||
vPushDir = Vector3.zero;
|
||||
Vector3 vRight = Vector3.zero;
|
||||
bool bMove = false;
|
||||
|
||||
// Không bấm gì → không có hướng
|
||||
if (m_dwMoveRelDir == 0)
|
||||
return false;
|
||||
|
||||
// ===== LEFT =====
|
||||
if ((m_dwMoveRelDir & MD_LEFT) != 0)
|
||||
{
|
||||
// Nếu trên không → xoay camera thay vì di chuyển
|
||||
if (m_iMoveEnv == MOVEENV_AIR)
|
||||
{
|
||||
// giữ nguyên logic PW
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)(_yaw_vel_air * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO: bạn map hàm này sang Unity
|
||||
}
|
||||
else if (m_iMoveEnv == MOVEENV_WATER)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)(_yaw_vel * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mặt đất → di chuyển sang trái theo camera
|
||||
// C++: vRight = -m_CameraCoord.GetRight();
|
||||
Vector3 camRight = m_CameraCoord.GetRight(); // TODO: map sang Unity Camera?
|
||||
vRight = -camRight;
|
||||
vRight.y = 0;
|
||||
vRight.Normalize();
|
||||
|
||||
vPushDir = vRight;
|
||||
bMove = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ===== RIGHT =====
|
||||
else if ((m_dwMoveRelDir & MD_RIGHT) != 0)
|
||||
{
|
||||
if (m_iMoveEnv == MOVEENV_AIR)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)((-_yaw_vel_air) * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else if (m_iMoveEnv == MOVEENV_WATER)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)((-_yaw_vel) * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mặt đất → di chuyển sang phải theo camera
|
||||
Vector3 camRight = m_CameraCoord.GetRight(); // TODO
|
||||
vRight = camRight;
|
||||
vRight.y = 0;
|
||||
vRight.Normalize();
|
||||
|
||||
vPushDir = vRight;
|
||||
bMove = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ===== FORWARD =====
|
||||
if ((m_dwMoveRelDir & MD_FORWARD) != 0)
|
||||
{
|
||||
Vector3 forward = m_CameraCoord.GetDir(); // TODO
|
||||
forward.y = 0;
|
||||
forward.Normalize();
|
||||
|
||||
vPushDir = forward;
|
||||
|
||||
if (bMove)
|
||||
{
|
||||
vPushDir += vRight;
|
||||
vPushDir.Normalize();
|
||||
}
|
||||
}
|
||||
// ===== BACK =====
|
||||
else if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
{
|
||||
Vector3 back = -m_CameraCoord.GetDir(); // TODO
|
||||
back.y = 0;
|
||||
back.Normalize();
|
||||
|
||||
vPushDir = back;
|
||||
|
||||
if (bMove)
|
||||
{
|
||||
vPushDir += vRight;
|
||||
vPushDir.Normalize();
|
||||
}
|
||||
}
|
||||
// ===== ABS UP (nếu mask cho phép) =====
|
||||
else if (((m_dwMoveRelDir & MD_ABSUP) != 0) && ((dwMask & MD_ABSUP) != 0))
|
||||
{
|
||||
vPushDir = Vector3.up;
|
||||
}*/
|
||||
|
||||
return true;
|
||||
}
|
||||
bool IsJumpInWater() { return m_bJumpInWater; }
|
||||
// Is under water
|
||||
bool IsUnderWater() { return m_iMoveEnv == Move_environment.MOVEENV_WATER ? true : false; }
|
||||
bool CanTakeOffWater()
|
||||
{
|
||||
return true;
|
||||
//A3DVECTOR3 vPos = GetPos();
|
||||
//if (vPos.y < EC_Game.GetGameRun().GetWorld().GetWaterHeight(vPos) - m_MoveConst.fShoreDepth)
|
||||
// return false;
|
||||
//else
|
||||
// return true;
|
||||
}
|
||||
|
||||
bool IsSitting() { return (m_dwStates & PlayerNPCState.GP_STATE_SITDOWN) != 0 ? true : false; }
|
||||
// Is host player open trash box ?
|
||||
bool IsUsingTrashBox() { return m_bUsingTrashBox; }
|
||||
// Is host player talking with NPC ?
|
||||
bool IsTalkingWithNPC() { return m_bTalkWithNPC; }
|
||||
// Is reviving
|
||||
bool IsReviving()
|
||||
{
|
||||
return m_pWorkMan.IsReviving();
|
||||
}
|
||||
// Is spelling magic
|
||||
// Is picking up something
|
||||
bool IsPicking()
|
||||
{
|
||||
return false;
|
||||
// TODO: fix later
|
||||
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
|
||||
//if (pWork != null)
|
||||
//{
|
||||
// return !(pWork as CECHPWorkPick).IsGather();
|
||||
//}
|
||||
//else
|
||||
// return false;
|
||||
}
|
||||
|
||||
// Is gathering resources
|
||||
bool IsGathering()
|
||||
{
|
||||
return false;
|
||||
// TODO: fix later
|
||||
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
|
||||
//if (pWork != null)
|
||||
// return (pWork as CECHPWorkPick).IsGather();
|
||||
//else
|
||||
// return false;
|
||||
}
|
||||
// Is using item ?
|
||||
bool IsUsingItem()
|
||||
{
|
||||
return m_pWorkMan.IsUsingItem();
|
||||
}
|
||||
bool IsPassiveMove()
|
||||
{
|
||||
return m_pWorkMan.IsPassiveMoving();
|
||||
}
|
||||
public void SetGroundInfoClient()
|
||||
{
|
||||
isGrounded = GroundCheck(out lastGroundHit);
|
||||
m_GndInfo.bOnGround = isGrounded;
|
||||
}
|
||||
public void SetRotationHP(Vector3 dir)
|
||||
{
|
||||
transform.rotation = Quaternion.LookRotation(dir);
|
||||
}
|
||||
void SetJumpInWater(bool b) { m_bJumpInWater = b; }
|
||||
// Is host in sliding state (in the state, host is sliding on slope) ?
|
||||
public int GetProfession()
|
||||
{
|
||||
return m_iProfession;
|
||||
@@ -3840,144 +4061,6 @@ namespace BrewMonster
|
||||
m_bIsInKingService = false;
|
||||
//m_pOffShopCtrl.SetNPCSevFlag(COfflineShopCtrl::NPCSEV_NULL);
|
||||
}
|
||||
public bool GetPushDir(ref Vector3 vPushDir, uint dwMask, float deltaTime)
|
||||
{
|
||||
Vector3 vRight = Vector3.zero;
|
||||
vRight.x = joystick.Horizontal;
|
||||
vRight.z = joystick.Vertical;
|
||||
vRight.y = 0f;
|
||||
vRight.Normalize();
|
||||
if(vRight == Vector3.zero)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
vPushDir = vRight;
|
||||
/* // reset
|
||||
vPushDir = Vector3.zero;
|
||||
Vector3 vRight = Vector3.zero;
|
||||
bool bMove = false;
|
||||
|
||||
// Không bấm gì → không có hướng
|
||||
if (m_dwMoveRelDir == 0)
|
||||
return false;
|
||||
|
||||
// ===== LEFT =====
|
||||
if ((m_dwMoveRelDir & MD_LEFT) != 0)
|
||||
{
|
||||
// Nếu trên không → xoay camera thay vì di chuyển
|
||||
if (m_iMoveEnv == MOVEENV_AIR)
|
||||
{
|
||||
// giữ nguyên logic PW
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)(_yaw_vel_air * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO: bạn map hàm này sang Unity
|
||||
}
|
||||
else if (m_iMoveEnv == MOVEENV_WATER)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)(_yaw_vel * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mặt đất → di chuyển sang trái theo camera
|
||||
// C++: vRight = -m_CameraCoord.GetRight();
|
||||
Vector3 camRight = m_CameraCoord.GetRight(); // TODO: map sang Unity Camera?
|
||||
vRight = -camRight;
|
||||
vRight.y = 0;
|
||||
vRight.Normalize();
|
||||
|
||||
vPushDir = vRight;
|
||||
bMove = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ===== RIGHT =====
|
||||
else if ((m_dwMoveRelDir & MD_RIGHT) != 0)
|
||||
{
|
||||
if (m_iMoveEnv == MOVEENV_AIR)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)((-_yaw_vel_air) * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else if (m_iMoveEnv == MOVEENV_WATER)
|
||||
{
|
||||
ECMSG msg = new ECMSG();
|
||||
msg.dwParam2 = 0;
|
||||
msg.dwParam1 = (uint)((-_yaw_vel) * deltaTime);
|
||||
|
||||
if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
msg.dwParam1 = (uint)(-(int)msg.dwParam1);
|
||||
|
||||
OnMsgHstYaw(msg); // TODO
|
||||
}
|
||||
else
|
||||
{
|
||||
// Mặt đất → di chuyển sang phải theo camera
|
||||
Vector3 camRight = m_CameraCoord.GetRight(); // TODO
|
||||
vRight = camRight;
|
||||
vRight.y = 0;
|
||||
vRight.Normalize();
|
||||
|
||||
vPushDir = vRight;
|
||||
bMove = true;
|
||||
}
|
||||
}
|
||||
|
||||
// ===== FORWARD =====
|
||||
if ((m_dwMoveRelDir & MD_FORWARD) != 0)
|
||||
{
|
||||
Vector3 forward = m_CameraCoord.GetDir(); // TODO
|
||||
forward.y = 0;
|
||||
forward.Normalize();
|
||||
|
||||
vPushDir = forward;
|
||||
|
||||
if (bMove)
|
||||
{
|
||||
vPushDir += vRight;
|
||||
vPushDir.Normalize();
|
||||
}
|
||||
}
|
||||
// ===== BACK =====
|
||||
else if ((m_dwMoveRelDir & MD_BACK) != 0)
|
||||
{
|
||||
Vector3 back = -m_CameraCoord.GetDir(); // TODO
|
||||
back.y = 0;
|
||||
back.Normalize();
|
||||
|
||||
vPushDir = back;
|
||||
|
||||
if (bMove)
|
||||
{
|
||||
vPushDir += vRight;
|
||||
vPushDir.Normalize();
|
||||
}
|
||||
}
|
||||
// ===== ABS UP (nếu mask cho phép) =====
|
||||
else if (((m_dwMoveRelDir & MD_ABSUP) != 0) && ((dwMask & MD_ABSUP) != 0))
|
||||
{
|
||||
vPushDir = Vector3.up;
|
||||
}*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void UpdateGFXs(float dwDeltaTime)
|
||||
{
|
||||
@@ -4242,115 +4325,6 @@ namespace BrewMonster
|
||||
|
||||
return NormalAttackObject(idTarget, bForceAttack, bMoreClose);
|
||||
}
|
||||
|
||||
bool IsJumpInWater() { return m_bJumpInWater; }
|
||||
// Is under water
|
||||
bool IsUnderWater() { return m_iMoveEnv == Move_environment.MOVEENV_WATER ? true : false; }
|
||||
// Can jump or take off in water ?
|
||||
bool CanTakeOffWater()
|
||||
{
|
||||
return true;
|
||||
//A3DVECTOR3 vPos = GetPos();
|
||||
//if (vPos.y < EC_Game.GetGameRun().GetWorld().GetWaterHeight(vPos) - m_MoveConst.fShoreDepth)
|
||||
// return false;
|
||||
//else
|
||||
// return true;
|
||||
}
|
||||
|
||||
bool IsSitting() { return (m_dwStates & PlayerNPCState.GP_STATE_SITDOWN) != 0 ? true : false; }
|
||||
// Is host player open trash box ?
|
||||
bool IsUsingTrashBox() { return m_bUsingTrashBox; }
|
||||
// Is host player talking with NPC ?
|
||||
bool IsTalkingWithNPC() { return m_bTalkWithNPC; }
|
||||
// Is reviving
|
||||
bool IsReviving()
|
||||
{
|
||||
return m_pWorkMan.IsReviving();
|
||||
}
|
||||
// Is spelling magic
|
||||
bool IsSpellingMagic()
|
||||
{
|
||||
return m_pWorkMan.IsSpellingMagic();
|
||||
}
|
||||
// Is picking up something
|
||||
bool IsPicking()
|
||||
{
|
||||
return false;
|
||||
// TODO: fix later
|
||||
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
|
||||
//if (pWork != null)
|
||||
//{
|
||||
// return !(pWork as CECHPWorkPick).IsGather();
|
||||
//}
|
||||
//else
|
||||
// return false;
|
||||
}
|
||||
|
||||
// Is gathering resources
|
||||
bool IsGathering()
|
||||
{
|
||||
return false;
|
||||
// TODO: fix later
|
||||
//CECHPWork pWork = m_pWorkMan.GetRunningWork(Host_work_ID.WORK_PICKUP);
|
||||
//if (pWork != null)
|
||||
// return (pWork as CECHPWorkPick).IsGather();
|
||||
//else
|
||||
// return false;
|
||||
}
|
||||
// Is using item ?
|
||||
bool IsUsingItem()
|
||||
{
|
||||
return m_pWorkMan.IsUsingItem();
|
||||
}
|
||||
bool IsPassiveMove()
|
||||
{
|
||||
return m_pWorkMan.IsPassiveMoving();
|
||||
}
|
||||
void SetJumpInWater(bool b) { m_bJumpInWater = b; }
|
||||
// Is host in sliding state (in the state, host is sliding on slope) ?
|
||||
public void SetGroundInfoClient()
|
||||
{
|
||||
isGrounded = GroundCheck(out lastGroundHit);
|
||||
m_GndInfo.bOnGround = isGrounded;
|
||||
}
|
||||
|
||||
public void SetRotationHP(Vector3 dir)
|
||||
{
|
||||
transform.rotation = Quaternion.LookRotation(dir);
|
||||
}
|
||||
|
||||
|
||||
// Get prepared skill - 获取准备施放的技能 / Get prepared skill
|
||||
public CECSkill GetPrepSkill()
|
||||
{
|
||||
return m_pPrepSkill;
|
||||
}
|
||||
|
||||
// Get player direction vector
|
||||
public A3DVECTOR3 GetDir()
|
||||
{
|
||||
// Return forward direction from transform
|
||||
return EC_Utility.ToA3DVECTOR3(transform.forward);
|
||||
}
|
||||
|
||||
// Get pray distance plus (distance bonus)
|
||||
// TODO: Implement proper calculation based on player buffs/items
|
||||
|
||||
// Rotate a position vector around Y axis
|
||||
// vDir: direction vector to rotate
|
||||
// fAngle: angle in radians
|
||||
public A3DVECTOR3 A3d_RotatePosAroundY(A3DVECTOR3 vDir, float fAngle)
|
||||
{
|
||||
float cos = Mathf.Cos(fAngle);
|
||||
float sin = Mathf.Sin(fAngle);
|
||||
|
||||
A3DVECTOR3 result = new A3DVECTOR3();
|
||||
result.x = vDir.x * cos + vDir.z * sin;
|
||||
result.y = vDir.y;
|
||||
result.z = -vDir.x * sin + vDir.z * cos;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
public enum StateAnim
|
||||
|
||||
+195
-10
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user