Files
funnygame/game/server/milmoba/player.cpp
2026-06-15 16:11:55 +03:00

91 lines
1.9 KiB
C++

#include "player.h"
#include "game.h"
#include "entitysystem.h"
CMOBAPlayer::CMOBAPlayer()
{
m_hCuboid = g_pPhysics->CreateCube({1,1,1});
}
CMOBAPlayer::~CMOBAPlayer()
{
}
void CMOBAPlayer::Spawn()
{
CBaseEntity::Spawn();
SetModel("game/core/models/sphere.fmdl");
SetAbsOrigin({0,-11.5, 0});
SetThink(Think);
m_pLeftHand = EntitySystem()->CreateByClassname("player_hand_controller", &m_leftHandId);
m_pRightHand = EntitySystem()->CreateByClassname("player_hand_controller", &m_rightHandId);
m_pLeftHand->Spawn();
m_pRightHand->Spawn();
};
bool CMOBAPlayer::CheckMask( HCollider hCollider )
{
return true;
};
void CMOBAPlayer::Think( float fDelta )
{
BaseClass::Think(fDelta);
Vector vPosition = GetAbsOrigin();
// player might lie to us
m_vMovementVector.x = glm_clamp(m_vMovementVector.x, -1, 1);
m_vMovementVector.y = glm_clamp(m_vMovementVector.y, -1, 1);
vPosition.x += m_vMovementVector.x*fDelta*5;
vPosition.z += m_vMovementVector.z*fDelta*5;
CastResult_t result = g_pPhysicsWorld->ShapeCast(m_hCuboid, {0,0,0,1}, vPosition, {vPosition.x, vPosition.y, -100}, CheckMask);
if (result.m_bIsHit)
SetAbsOrigin(result.m_vCollisionPoint);
else
SetAbsOrigin(vPosition);
};
LINK_ENTITY_TO_CLASS(player, CMOBAPlayer)
BEGIN_DATADESC(CMOBAPlayer)
END_DATADESC()
IMPLEMENT_SEND_DT(CMOBAPlayer)
NetPropInt(m_leftHandId),
NetPropInt(m_rightHandId),
END_SEND_DT()
IMPLEMENT_RECV_DT(CMOBAPlayer)
NetPropFloat3(m_vMovementVector),
END_RECV_DT()
CMOBAPlayerHandController::CMOBAPlayerHandController()
{
}
void CMOBAPlayerHandController::Spawn()
{
CBaseEntity::Spawn();
SetScale(0.03);
SetThink(Think);
}
void CMOBAPlayerHandController::Think( float fDelta )
{
}
LINK_ENTITY_TO_CLASS(player_hand_controller, CMOBAPlayerHandController)
BEGIN_DATADESC(CMOBAPlayerHandController)
END_DATADESC()
IMPLEMENT_SEND_DT(CMOBAPlayerHandController)
END_SEND_DT()
IMPLEMENT_RECV_DT(CMOBAPlayerHandController)
END_RECV_DT()