Merge branch 'feature/HP_jump' into feature/else-jump-animation
This commit is contained in:
@@ -553,7 +553,7 @@ namespace BrewMonster.Scripts
|
||||
//case CECHPWork.Host_work_ID.WORK_DEAD: pWork = new CECHPWorkDead(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FOLLOW: pWork = new CECHPWorkFollow(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FLYOFF: pWork = new CECHPWorkFly(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_FREEFALL: pWork = new CECHPWorkFall(this); break;
|
||||
case CECHPWork.Host_work_ID.WORK_FREEFALL: pWork = new CECHPWorkFall(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_SIT: pWork = new CECHPWorkSit(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_PICKUP: pWork = new CECHPWorkPick(this); break;
|
||||
//case CECHPWork.Host_work_ID.WORK_CONCENTRATE: pWork = new CECHPWorkConcentrate(this); break;
|
||||
|
||||
@@ -0,0 +1,317 @@
|
||||
|
||||
using CSNetwork.GPDataType;
|
||||
using System;
|
||||
using System.Runtime.ConstrainedExecution;
|
||||
using UnityEngine;
|
||||
using static CECPlayer;
|
||||
|
||||
namespace BrewMonster.Scripts
|
||||
{
|
||||
public class CECHPWorkFall : CECHPWork
|
||||
{
|
||||
protected A3DVECTOR3 m_vDirH;
|
||||
protected float m_fSpeedH;
|
||||
protected bool m_bEnterWater;
|
||||
protected int m_iFallMode;
|
||||
protected int m_nCurStage;
|
||||
protected int m_iFallType;
|
||||
protected bool m_fForceDown;
|
||||
|
||||
Vector3 g_vOrigin = Vector3.zero;
|
||||
public static class FlyFallStage
|
||||
{
|
||||
public const int enumStageNone = 0,
|
||||
enumStageUpperAir = 1,
|
||||
enumStageLowerAir = 2,
|
||||
enumStageShallowWater = 3,
|
||||
enumStageDeepWater = 4,
|
||||
enumStageLandOn = 5;
|
||||
};
|
||||
|
||||
// Fall type
|
||||
public static class Fall_type
|
||||
{
|
||||
public const int TYPE_FREEFALL = 0,
|
||||
TYPE_FLYFALL = 1;
|
||||
};
|
||||
|
||||
// This work is do player moving ?
|
||||
public override bool IsMoving() { return true; }
|
||||
// Copy work data
|
||||
|
||||
// Set fall type
|
||||
public void SetFallType(int iType) { m_iFallType = iType; }
|
||||
public int GetFallType() { return m_iFallType; }
|
||||
|
||||
public CECHPWorkFall(CECHPWorkMan pWorkMan) : base(Host_work_ID.WORK_FREEFALL, pWorkMan)
|
||||
{
|
||||
m_dwMask = Work_mask.MASK_FREEFALL;
|
||||
m_dwTransMask = Work_mask.MASK_STAND;
|
||||
|
||||
Reset();
|
||||
}
|
||||
|
||||
// Reset work
|
||||
public override void Reset()
|
||||
{
|
||||
base.Reset();
|
||||
|
||||
m_bEnterWater = false;
|
||||
m_nCurStage = FlyFallStage.enumStageNone;
|
||||
m_iFallType = Fall_type.TYPE_FREEFALL;
|
||||
m_fForceDown = false;
|
||||
}
|
||||
|
||||
// Copy work data
|
||||
public override bool CopyData(CECHPWork pWork)
|
||||
{
|
||||
if (!base.CopyData(pWork))
|
||||
return false;
|
||||
|
||||
CECHPWorkFall pSrc = (CECHPWorkFall)pWork;
|
||||
|
||||
m_bEnterWater = pSrc.m_bEnterWater;
|
||||
m_nCurStage = pSrc.m_nCurStage;
|
||||
m_iFallType = pSrc.m_iFallType;
|
||||
m_fForceDown = pSrc.m_fForceDown;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// On first tick
|
||||
protected override void OnFirstTick()
|
||||
{
|
||||
m_pHost.m_iMoveEnv = (int)MoveEnvironment.MOVEENV_GROUND;
|
||||
m_pHost.m_iMoveMode = (int)MoveMode.MOVE_FREEFALL;
|
||||
|
||||
m_vDirH = m_pHost.m_vVelocity;
|
||||
m_vDirH.y = 0.0f;
|
||||
m_fSpeedH = m_vDirH.Normalize();
|
||||
|
||||
if (m_fSpeedH > m_pHost.GetGroundSpeed())
|
||||
m_fSpeedH = m_pHost.GetGroundSpeed();
|
||||
|
||||
// Clear N
|
||||
m_pHost.m_CDRInfo.vTPNormal = Vector3.zero;
|
||||
}
|
||||
|
||||
// Work is cancel
|
||||
public override void Cancel()
|
||||
{
|
||||
m_pHost.m_CDRInfo.vAbsVelocity = Vector3.zero;
|
||||
if (m_pHost.m_CDRInfo.vTPNormal == Vector3.zero)
|
||||
m_pHost.m_CDRInfo.fYVel = 0.0f;
|
||||
base.Cancel();
|
||||
}
|
||||
|
||||
// Tick routine
|
||||
public override bool Tick(float dwDeltaTime)
|
||||
{
|
||||
base.Tick(dwDeltaTime);
|
||||
var m_pEquipPack = m_pHost.GetInventory(InventoryConst.IVTRTYPE_EQUIPPACK);
|
||||
if (m_pEquipPack.GetItem(InventoryConst.EQUIPIVTR_FLYSWORD, false) == null)
|
||||
m_iFallMode = (int)GPMoveMode.GP_MOVE_FALL;
|
||||
else
|
||||
m_iFallMode = (int)GPMoveMode.GP_MOVE_FLYFALL;
|
||||
|
||||
if (m_pHost.IsDead())
|
||||
m_iFallMode |= (int)GPMoveMode.GP_MOVE_DEAD;
|
||||
|
||||
if (!m_pHost.IsRooting())
|
||||
{
|
||||
float fDeltaTime = dwDeltaTime * 0.001f;
|
||||
|
||||
if (m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_GROUND ||
|
||||
m_pHost.m_iMoveEnv == (int)MoveEnvironment.MOVEENV_AIR)
|
||||
{
|
||||
if (m_iFallType == Fall_type.TYPE_FLYFALL)
|
||||
Fall_Air(fDeltaTime);
|
||||
else
|
||||
FreeFall_Air(fDeltaTime);
|
||||
}
|
||||
//else // m_pHost.m_iMoveEnv == CECPlayer::MOVEENV_WATER
|
||||
//{
|
||||
// if (m_iFallType == Fall_type.TYPE_FLYFALL)
|
||||
// Fall_Water(fDeltaTime);
|
||||
// else
|
||||
// FreeFall_Water(fDeltaTime);
|
||||
//}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Free fall in air
|
||||
public bool Fall_Air(float fDeltaTime)
|
||||
{
|
||||
A3DVECTOR3 vCurPos = m_pHost.GetPos();
|
||||
// A3DVECTOR3 vCurVel = m_pHost.m_vVelocity;
|
||||
CDR_INFO cdr = m_pHost.m_CDRInfo;
|
||||
|
||||
bool bWorkEnd = false;
|
||||
|
||||
if (m_pHost.m_GndInfo.bOnGround)
|
||||
{
|
||||
bWorkEnd = true;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON_SWORD, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vDirH, m_fSpeedH, fDeltaTime);
|
||||
|
||||
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
|
||||
{
|
||||
bWorkEnd = true;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON_SWORD, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
float fHei = vCurPos.y - m_pHost.m_GndInfo.fGndHei;
|
||||
|
||||
if (fHei > 25f)
|
||||
{
|
||||
if (m_nCurStage == FlyFallStage.enumStageNone)
|
||||
{
|
||||
m_nCurStage = FlyFallStage.enumStageUpperAir;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN_SWORD_HIGH, false);
|
||||
}
|
||||
}
|
||||
else if (fHei > 20f)
|
||||
{
|
||||
if (m_nCurStage == FlyFallStage.enumStageNone)
|
||||
{
|
||||
m_nCurStage = FlyFallStage.enumStageLowerAir;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN_WING_LOW, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN_SWORD_LOW, false);
|
||||
}
|
||||
}
|
||||
else if (fHei > 3.0f)
|
||||
{
|
||||
if (m_nCurStage == FlyFallStage.enumStageNone
|
||||
|| m_nCurStage == FlyFallStage.enumStageUpperAir)
|
||||
{
|
||||
m_nCurStage = FlyFallStage.enumStageLowerAir;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN_WING_LOW, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_FLYDOWN_SWORD_LOW, false);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_nCurStage != FlyFallStage.enumStageLandOn)
|
||||
{
|
||||
m_nCurStage = FlyFallStage.enumStageLandOn;
|
||||
//if (m_pHost.UsingWing())
|
||||
if (m_pHost.GetWingType() == enumWingType.WINGTYPE_WING)
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON, false);
|
||||
else
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_LANDON_SWORD, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
}
|
||||
|
||||
if (bWorkEnd)
|
||||
{
|
||||
Finish();
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
|
||||
float fSpeed = cdr.vAbsVelocity.magnitude;
|
||||
if (Math.Abs(fSpeed - 0) < float.Epsilon)
|
||||
fSpeed = m_pHost.GetFlySpeed();
|
||||
|
||||
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, m_iFallMode);
|
||||
m_pHost.m_vVelocity.Clear();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 2, EC_Utility.ToA3DVECTOR3(g_vOrigin), EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), m_iFallMode);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Free fall in air
|
||||
public bool FreeFall_Air(float fDeltaTime)
|
||||
{
|
||||
A3DVECTOR3 vCurPos = m_pHost.GetPos();
|
||||
// A3DVECTOR3 vCurVel = m_pHost.m_vVelocity;
|
||||
CDR_INFO cdr = m_pHost.m_CDRInfo;
|
||||
|
||||
if (m_pHost.m_GndInfo.bOnGround)
|
||||
{
|
||||
Finish();
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
|
||||
float fSpeed = cdr.vAbsVelocity.magnitude;
|
||||
if (Math.Abs(fSpeed - 0) < float.Epsilon)
|
||||
fSpeed = m_pHost.GetFlySpeed();
|
||||
|
||||
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), fSpeed, m_iFallMode);
|
||||
m_pHost.m_vVelocity.Clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
vCurPos = m_pHost.m_MoveCtrl.GroundMove(m_vDirH, m_fSpeedH, fDeltaTime);
|
||||
|
||||
// If player is blocked, add disturb speed at random direction
|
||||
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
|
||||
{
|
||||
cdr.fYVel = 0.0f;
|
||||
|
||||
Finish();
|
||||
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
m_pHost.m_MoveCtrl.SendStopMoveCmd(EC_Utility.ToVector3(vCurPos), 5.0f, m_iFallMode);
|
||||
}
|
||||
/* {
|
||||
m_fSpeedH = 3.0f;
|
||||
m_vDirH = glb_RandomVectorH();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_fSpeedH = 0.0f;
|
||||
m_vDirH.Clear();
|
||||
} */
|
||||
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
m_pHost.m_MoveCtrl.SendMoveCmd(vCurPos, 2, EC_Utility.ToA3DVECTOR3(g_vOrigin), EC_Utility.ToA3DVECTOR3(cdr.vAbsVelocity), m_iFallMode);
|
||||
|
||||
m_pHost.PlayAction((int)PLAYER_ACTION_TYPE.ACT_JUMP_LOOP, false);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Finish
|
||||
public void Finish()
|
||||
{
|
||||
m_bFinished = true;
|
||||
m_pHost.m_CDRInfo.vAbsVelocity = Vector3.zero;
|
||||
// m_pHost.m_CDRInfo.fYVel = 0.0f;
|
||||
|
||||
//if (m_iFallType == Fall_type.TYPE_FLYFALL)
|
||||
// m_pHost.ShowWing(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a85280d3ca5f703449ffa56b24ca7e47
|
||||
@@ -615,6 +615,7 @@ namespace BrewMonster.Scripts
|
||||
else
|
||||
{
|
||||
vCurPos = m_pHost.m_MoveCtrl.GroundMove(GPDataTypeHelper.g_vOrigin, 0.0f, fDeltaTime, m_pHost.m_fVertSpeed);
|
||||
Debug.LogError("vCurPos = " + vCurPos + " m_pHost.m_fVertSpeed = " + m_pHost.m_fVertSpeed);
|
||||
m_pHost.SetPos(EC_Utility.ToVector3(vCurPos));
|
||||
|
||||
if (m_pHost.m_MoveCtrl.MoveBlocked() >= 3)
|
||||
|
||||
@@ -139,11 +139,12 @@ namespace BrewMonster.Scripts
|
||||
}
|
||||
else if (iMoveReason == 2)
|
||||
{
|
||||
// var pWork = (CECHPWorkFall)m_pWorkMan.CreateWork(Host_work_ID.WORK_FREEFALL);
|
||||
// if (pWork != null) {
|
||||
// pWork.SetFallType(CECHPWorkFall.TYPE_FREEFALL);
|
||||
// m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(pWork));
|
||||
// }
|
||||
var pWork = (CECHPWorkFall)m_pWorkMan.CreateWork(Host_work_ID.WORK_FREEFALL);
|
||||
if (pWork != null)
|
||||
{
|
||||
pWork.SetFallType(CECHPWorkFall.Fall_type.TYPE_FREEFALL);
|
||||
m_pWorkMan.SetPostTickCommand(new CECHPWorkPostTickRunWorkCommand(pWork));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -64,7 +64,7 @@ public abstract partial class CECPlayer : CECObject
|
||||
private QueueActionEvent queueActionEvent;
|
||||
protected static PLAYER_LEVELEXP_CONFIG _player_levelup_exp;
|
||||
private CECPlayerActionController m_pActionController;
|
||||
private enumWingType m_wingType;
|
||||
private enumWingType m_wingType = enumWingType.WINGTYPE_FLYSWORD;
|
||||
protected int m_idCurSkillTarget;
|
||||
protected CECSkill m_pCurSkill;
|
||||
|
||||
@@ -1561,6 +1561,8 @@ public abstract partial class CECPlayer : CECObject
|
||||
{
|
||||
return m_strName;
|
||||
}
|
||||
|
||||
public enumWingType GetWingType() { return m_wingType; }
|
||||
}
|
||||
|
||||
public struct PlayActionEvent
|
||||
|
||||
@@ -212,7 +212,7 @@ namespace BrewMonster.Scripts
|
||||
{
|
||||
vDelta = vVelocity * fTime;
|
||||
float fDeltaDist = vDelta.magnitude;
|
||||
//if (fDeltaDist < DIST_EPSILON) break;
|
||||
if (fDeltaDist < DIST_EPSILON) break;
|
||||
|
||||
// TO DO: fix later beacuse logic in CollideWithEnv_BoxCast is wrong
|
||||
//bool hasHit = CollideWithEnv_BoxCast(vStart, vDelta, vExt, mask,
|
||||
@@ -227,7 +227,7 @@ namespace BrewMonster.Scripts
|
||||
CDRInfo.fMoveDist += fDeltaDist;
|
||||
break;
|
||||
}
|
||||
//if (bStartSolid)
|
||||
//if (trcInfo.bStartSolid)
|
||||
//{
|
||||
// CDRInfo.fMoveDist = 0f;
|
||||
// if (CDRInfo.vTPNormal.y < CDRInfo.fSlopeThresh) CDRInfo.vTPNormal = Vector3.up;
|
||||
@@ -273,35 +273,35 @@ namespace BrewMonster.Scripts
|
||||
bTryPull = true;
|
||||
}
|
||||
|
||||
//if (!bPull)
|
||||
//{
|
||||
// if (vVelocity.sqrMagnitude > 1e-12f)
|
||||
// {
|
||||
// vVelDir = vVelocity.normalized;
|
||||
// fVelSpeed = vVelocity.magnitude * (1f - nTry * 0.1f);
|
||||
if (!bPull)
|
||||
{
|
||||
if (vVelocity.sqrMagnitude > 1e-12f)
|
||||
{
|
||||
vVelDir = vVelocity.normalized;
|
||||
fVelSpeed = vVelocity.magnitude * (1f - nTry * 0.1f);
|
||||
|
||||
// dtp = Vector3.Dot(vNormal, vVelDir);
|
||||
// float fRelSpeed = Mathf.Min(fVelSpeed, 5.0f);
|
||||
dtp = Vector3.Dot(vNormal, vVelDir);
|
||||
float fRelSpeed = Mathf.Min(fVelSpeed, 5.0f);
|
||||
|
||||
// if (dtp >= 0f && dtp < 1e-4f)
|
||||
// {
|
||||
// vVelocity += vNormal * VEL_REFLECT * fRelSpeed;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// vVelocity = (vVelDir - vNormal * dtp) * fVelSpeed - vNormal * dtp * VEL_REFLECT * fRelSpeed;
|
||||
// }
|
||||
// }
|
||||
if (dtp >= 0f && dtp < 1e-4f)
|
||||
{
|
||||
vVelocity += vNormal * VEL_REFLECT * fRelSpeed;
|
||||
}
|
||||
else
|
||||
{
|
||||
vVelocity = (vVelDir - vNormal * dtp) * fVelSpeed - vNormal * dtp * VEL_REFLECT * fRelSpeed;
|
||||
}
|
||||
}
|
||||
|
||||
// if (fYVel > VEL_EPSILON)
|
||||
// {
|
||||
// if (vNormal.y >= CDRInfo.fSlopeThresh || vNormal.y < -NORMAL_EPSILON) fYVel = 0f;
|
||||
// }
|
||||
// else if (fYVel < -VEL_EPSILON)
|
||||
// {
|
||||
// if (vNormal.y >= CDRInfo.fSlopeThresh) fYVel = 0f;
|
||||
// }
|
||||
//}
|
||||
if (fYVel > VEL_EPSILON)
|
||||
{
|
||||
if (vNormal.y >= CDRInfo.fSlopeThresh || vNormal.y < -NORMAL_EPSILON) fYVel = 0f;
|
||||
}
|
||||
else if (fYVel < -VEL_EPSILON)
|
||||
{
|
||||
if (vNormal.y >= CDRInfo.fSlopeThresh) fYVel = 0f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// “vertical ground trace” – thay RetrieveSupportPlane
|
||||
|
||||
@@ -85,6 +85,7 @@ namespace BrewMonster
|
||||
private float m_fPrayDistancePlus;
|
||||
private A3DVECTOR3 g_vOrigin = new A3DVECTOR3(0f);
|
||||
private Transform playerTransform;
|
||||
private float EC_SLOPE_Y = 0.5f;
|
||||
|
||||
// ====== Ground cast config ======
|
||||
[Header("Ground Cast")]
|
||||
@@ -1245,9 +1246,13 @@ namespace BrewMonster
|
||||
m_aabbServer = m_aabb;
|
||||
CalcPlayerAABB();
|
||||
SetPos(pos);
|
||||
m_CDRInfo.fStepHeight = 0.8f;
|
||||
|
||||
//m_CDRInfo.vTPNormal = GroundCheck(out RaycastHit hit) ? hit.normal : Vector3.zero;
|
||||
m_CDRInfo.vExtent = EC_Utility.ToVector3(m_aabbServer.Extents);
|
||||
m_CDRInfo.vTPNormal = EC_Utility.ToVector3(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));
|
||||
@@ -1276,7 +1281,7 @@ namespace BrewMonster
|
||||
pWork.SetBeSittingFlag(true);
|
||||
m_pWorkMan.StartWork_p1(pWork);
|
||||
}*/
|
||||
|
||||
m_GndInfo.bOnGround = GroundCheck(out lastGroundHit);
|
||||
LoadResources();
|
||||
if (m_pWorkMan == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user