added command line, added basic character

This commit is contained in:
2025-06-12 00:17:59 +03:00
parent 64c0f41884
commit af4f0c3cad
65 changed files with 262985 additions and 304 deletions

View File

@@ -5,7 +5,7 @@
#include "tier1/commandline.h"
CUtlVector<CUtlString> client_CompiledFiles = {
"game/client/baseplayer.cpp",
"game/client/milmoba/player.cpp",
};
int client_build()

View File

@@ -1,55 +0,0 @@
#include "baseentity.h"
#include "cglm/affine-pre.h"
#include "cglm/mat4.h"
#include "physics.h"
class CBasePlayer: public CBaseEntity
{
public:
virtual void Precache ( void ) override;
virtual void Spawn( void ) override;
virtual void ReadParameter( const char *szName, const char *szValue ) override;
virtual void Destroy( void ) override;
virtual void Think( float fDelta ) override;
CPxBoxMesh m_Collider;
CPxRigidBody m_RigidBody;
};
class C_BasePlayer: public C_BaseEntity
{
public:
virtual void Precache ( void ) override;
virtual void Spawn( void ) override;
virtual void Destroy( void ) override;
virtual void Think( float fDelta ) override;
};
extern mat4 g_cameraView;
void C_BasePlayer::Precache()
{
}
void C_BasePlayer::Spawn()
{
};
void C_BasePlayer::Destroy()
{
}
void C_BasePlayer::Think( float fDelta )
{
CBasePlayer *pPlayer = (CBasePlayer*)pEntity;
glm_mat4_identity(g_cameraView);
V_memcpy(&g_cameraView[3][0], pPlayer->m_RigidBody.GetPosition().m, 12);
};
LINK_CLIENT_ENTITY(C_BasePlayer, CBasePlayer)

View File

@@ -0,0 +1,38 @@
#include "baseplayer.h"
#include "engine.h"
#include "rendering.h"
class C_MOBAPlayer: public C_BaseEntity
{
public:
virtual void Precache ( void ) override;
virtual void Spawn( void ) override;
virtual void Destroy( void ) override;
virtual void Think( float fDelta ) override;
};
void C_MOBAPlayer::Precache()
{
}
void C_MOBAPlayer::Spawn()
{
};
void C_MOBAPlayer::Destroy()
{
}
void C_MOBAPlayer::Think( float fDelta )
{
if (g_localClient.pBasePlayer == pEntity)
{
g_cameraView[3][0] = pEntity->m_position[0];
g_cameraView[3][1] = pEntity->m_position[1];
g_cameraView[3][2] = pEntity->m_position[2]+0.7;
}
};
LINK_CLIENT_ENTITY(C_MOBAPlayer, CMOBAPlayer)

View File

@@ -6,7 +6,7 @@
CUtlVector<CUtlString> server_CompiledFiles = {
"game/server/game.cpp",
"game/server/baseplayer.cpp",
"game/server/milmoba/player.cpp",
};
int server_build()

View File

@@ -1,57 +0,0 @@
#include "baseentity.h"
#include "physics.h"
class CBasePlayer: public CBaseEntity
{
public:
virtual void Precache ( void ) override;
virtual void Spawn( void ) override;
virtual void ReadParameter( const char *szName, const char *szValue ) override;
virtual void Destroy( void ) override;
virtual void Think( float fDelta ) override;
CPxBoxMesh m_Collider;
CPxRigidBody m_RigidBody;
};
void CBasePlayer::Precache()
{
}
void CBasePlayer::Spawn()
{
m_Collider.m_fRadius[0] = 1;
m_Collider.m_fRadius[1] = 1;
m_Collider.m_fRadius[2] = 1;
m_Collider.Spawn(0.0);
px_matrix matrix = {
.m = {
1,0,0,0,
0,1,0,0,
0,0,1,0,
5,0,0,1,
}
};
m_RigidBody.Spawn(&m_Collider, matrix, {
.gravity_scale = 1,
.lockrotx = 1,
.lockroty = 1,
.lockrotz = 1,
});
};
void CBasePlayer::ReadParameter( const char *szName, const char *szValue )
{
CBaseEntity::ReadParameter(szName, szValue);
}
void CBasePlayer::Destroy()
{
}
void CBasePlayer::Think( float fDelta )
{
};
DECLARE_ENTITY(player, CBasePlayer);

View File

@@ -1,12 +1,17 @@
#include "console.h"
#include "gamemode.h"
#include "tier0/platform.h"
#include "engine.h"
#include "level.h"
#include "stdio.h"
#include "tier0/lib.h"
CGameMode testMode;
DLL_EXPORT void IGame_Load()
{
ILevel::LoadLevel("maps/test_map");
IGameModeManager::StartGameMode(&testMode);
return;
};

View File

@@ -0,0 +1,168 @@
#include "baseentity.h"
#include "baseplayer.h"
#include "cglm/mat4.h"
#include "cglm/util.h"
#include "cglm/vec2.h"
#include "cglm/vec3.h"
#include "console.h"
#include "engine.h"
#include "physics.h"
#include "physics_gen.h"
class CMOBAPlayer: public CBasePlayer
{
public:
virtual void Precache() override;
virtual void Spawn( void ) override;
virtual void Destroy( void ) override;
virtual void ReadParameter( const char *szName, const char *szValue ) override;
virtual void Think( float fDelta ) override;
void AirAccelerate();
void Accelerate( float fDelta, vec2 wishDir, float fWishSpeed, float fAcceleration );
void Move( float fDelta );
bool bIsForward = 0;
bool bIsBack = 0;
bool bIsLeft = 0;
bool bIsRight = 0;
bool bIsJumping = 0;
bool bIsCrouching = 0;
bool bIsProning = 0;
bool bIsFiring = 0;
bool bIsFiring2 = 0;
float fPitch = 0;
float fYaw = 0;
vec3 m_velocity;
CPxBoxMesh mesh;
CPxRigidBody rigidbody;
};
void CMOBAPlayer::Precache()
{
}
void CMOBAPlayer::Spawn()
{
mesh.m_fRadius[0] = 0.3;
mesh.m_fRadius[1] = 0.3;
mesh.m_fRadius[2] = 0.8;
mesh.Spawn();
px_matrix m = {};
m.m[0] = 1;
m.m[5] = 1;
m.m[10] = 1;
m.m[15] = 1;
m.m[12] = m_position[0];
m.m[13] = m_position[1];
m.m[14] = m_position[2];
rigidbody.Spawn(&mesh, m, {
.gravity_scale = 1,
.continous = true,
.lockrotx = 1,
.lockroty = 1,
.lockrotz = 1,
.dominance = 127,
});
};
void CMOBAPlayer::ReadParameter( const char *szName, const char *szValue )
{
CBaseEntity::ReadParameter(szName, szValue);
}
void CMOBAPlayer::Destroy()
{
}
void CMOBAPlayer::AirAccelerate()
{
}
void CMOBAPlayer::Accelerate( float fDelta, vec2 wishDir, float fWishSpeed, float fAcceleration )
{
float fCurrentSpeed = glm_vec2_dot(wishDir, m_velocity);
float fAddSpeed = fWishSpeed - fCurrentSpeed;
if ( fAddSpeed < 0 )
return;
float fAccelSpeed = fAcceleration*fDelta*fWishSpeed;
if ( fAccelSpeed > fAddSpeed )
fAccelSpeed = fAddSpeed;
glm_vec2_scale(wishDir, fAccelSpeed, m_velocity);
}
void CMOBAPlayer::Move( float fDelta )
{
vec2 forward = {(float)bIsForward-(float)bIsBack,0};
vec2 right = {0,(float)bIsLeft-(float)bIsRight};
vec2 wishDir;
float fWishSpeed;
glm_vec2_rotate(forward, fYaw, forward);
glm_vec2_rotate(forward, fYaw, forward);
glm_vec2_add(forward, right, wishDir);
fWishSpeed = glm_vec2_distance(wishDir, (vec3){0,0,0});
if (fWishSpeed != 0)
{
glm_vec2_divs(wishDir, fWishSpeed, wishDir);
fWishSpeed = 10;
} else {
glm_vec2_zero(wishDir);
}
Accelerate(fDelta, wishDir, fWishSpeed, 5.5);
}
void CMOBAPlayer::Think( float fDelta )
{
m_position[0] = rigidbody.GetPosition().m[0];
m_position[1] = rigidbody.GetPosition().m[1];
m_position[2] = rigidbody.GetPosition().m[2];
px_vec3 v = rigidbody.GetVelocity();
px_vec3 p = rigidbody.GetPosition();
for (int i = 0; i < 3; i++)
m_velocity[i] = v.m[i];
px_cast_result r = px_box_cast(px, 0.3,0.3,0.01, {p.m[0],p.m[1],p.m[2]-0.79f}, {0,0,0}, {0,0,-1}, 1);
if (r.hit)
{
Move(fDelta);
}
for (int i = 0; i < 3; i++)
v.m[i] = m_velocity[i];
rigidbody.SetVelocity(v);
};
void PlayerForward(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsForward = true;};
void PlayerForwardUp(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsForward = false;};
void PlayerBack(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsBack = true;};
void PlayerBackUp(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsBack = false;};
void PlayerLeft(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsLeft = true;};
void PlayerLeftUp(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsLeft = false;};
void PlayerRight(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsRight = true;};
void PlayerRightUp(int argc, char **argv) {if (g_localClient.pBasePlayer) ((CMOBAPlayer*)g_localClient.pBasePlayer)->bIsRight = false;};
ConCommand moveForwardCmd("+forward", PlayerForward, 0);
ConCommand moveForwardUpCmd("-forward", PlayerForwardUp, 0);
ConCommand moveBackwardCmd("+back", PlayerBack, 0);
ConCommand moveBackwardUpCmd("-back", PlayerBackUp, 0);
ConCommand moveLeftCmd("+left", PlayerLeft, 0);
ConCommand moveLeftUpCmd("-left", PlayerLeftUp, 0);
ConCommand moveRightCmd("+right", PlayerRight, 0);
ConCommand moveRightUpCmd("-right", PlayerRightUp, 0);
DECLARE_ENTITY(player, CMOBAPlayer);