work on the stuff on client
This commit is contained in:
@@ -1,21 +1,15 @@
|
||||
#include "baseplayer.h"
|
||||
#include "cglm/affine-pre.h"
|
||||
#include "cglm/mat4.h"
|
||||
#include "engine.h"
|
||||
#include "rendering.h"
|
||||
#include "input.h"
|
||||
#include "fgui/widget.h"
|
||||
#include "fgui/rect.h"
|
||||
#include "fgui/label.h"
|
||||
#include "mesh.h"
|
||||
#include "../baseentity.h"
|
||||
#include "../worldrender.h"
|
||||
#include "materialsystem/imaterialsystem.h"
|
||||
#include "game.h"
|
||||
|
||||
class C_MOBAPlayer: public C_BaseEntity
|
||||
{
|
||||
public:
|
||||
DECLARE_CLASS(C_MOBAPlayer, C_BaseEntity)
|
||||
virtual void Precache ( void ) override;
|
||||
virtual void Spawn( void ) override;
|
||||
virtual void Destroy( void ) override;
|
||||
virtual void Think( float fDelta ) override;
|
||||
virtual void Think( float fDelta );
|
||||
|
||||
IMesh *m_pMesh;
|
||||
IMeshInstance *m_pMeshInstance;
|
||||
@@ -23,95 +17,56 @@ public:
|
||||
|
||||
void C_MOBAPlayer::Precache()
|
||||
{
|
||||
IVertexBuffer *pBuffer;
|
||||
IBuffer *pDataBuffer;
|
||||
IShader *pShader;
|
||||
IMaterial *pMaterial;
|
||||
g_pWorldRenderer->Init();
|
||||
pShader = g_pRenderContext->CreateShader("game/core/shaders/mesh_raster.shader_c");
|
||||
|
||||
IFileHandle *pHandle = filesystem->Open("game/core/meshes/spot.fmesh_c", FILEMODE_READ);
|
||||
float *pData = (float*)V_malloc(filesystem->Size(pHandle));
|
||||
filesystem->Read(pHandle, pData, filesystem->Size(pHandle));
|
||||
pBuffer = g_pRenderContext->CreateVertexBuffer(filesystem->Size(pHandle));
|
||||
pBuffer->Lock();
|
||||
void *pMapped = pBuffer->Map();
|
||||
V_memcpy(pMapped, pData, filesystem->Size(pHandle));
|
||||
pBuffer->Unmap();
|
||||
pBuffer->Unlock();
|
||||
V_free(pData);
|
||||
filesystem->Close(pHandle);
|
||||
|
||||
|
||||
m_pMesh = g_pWorldRenderer->CreateMesh("game/core/meshes/spot.fmesh_c");
|
||||
g_pWorldRenderer->SetCameraPosition((Vector){0,0,-20});
|
||||
g_pWorldRenderer->SetCameraRotation((Quat){1,0,0,0});
|
||||
|
||||
m_pMesh->ConfigureShader(pShader);
|
||||
pShader->Build();
|
||||
pMaterial = g_pRenderContext->CreateMaterial(pShader);
|
||||
|
||||
m_pMesh->SetVertices(pBuffer);
|
||||
m_pMesh->SetMaterial(pMaterial);
|
||||
m_pMeshInstance = g_pWorldRenderer->CreateInstance(m_pMesh);
|
||||
m_pMeshInstance->SetScale({5, 5, 5});
|
||||
m_pMeshInstance->SetPosition({0,0,0});
|
||||
m_pMeshInstance->SetRotation({1,0,0,0});
|
||||
}
|
||||
|
||||
|
||||
void C_MOBAPlayer::Spawn()
|
||||
{
|
||||
float cubeVertices[] = {
|
||||
// Front face
|
||||
-0.1f, -0.1f, 0.1f, 0, 0,
|
||||
0.1f, -0.1f, 0.1f, 1, 0,
|
||||
0.1f, 0.1f, 0.1f, 1, 1,
|
||||
-0.1f, -0.1f, 0.1f, 0, 0,
|
||||
0.1f, 0.1f, 0.1f, 1, 1,
|
||||
-0.1f, 0.1f, 0.1f, 0, 1,
|
||||
|
||||
// Back face
|
||||
0.1f, -0.1f, -0.1f, 0, 0,
|
||||
-0.1f, -0.1f, -0.1f, 1, 0,
|
||||
-0.1f, 0.1f, -0.1f, 1, 1,
|
||||
0.1f, -0.1f, -0.1f, 0, 0,
|
||||
-0.1f, 0.1f, -0.1f, 1, 1,
|
||||
0.1f, 0.1f, -0.1f, 0, 1,
|
||||
|
||||
// Left face
|
||||
-0.1f, -0.1f, -0.1f, 0, 0,
|
||||
-0.1f, -0.1f, 0.1f, 1, 0,
|
||||
-0.1f, 0.1f, 0.1f, 1, 1,
|
||||
-0.1f, -0.1f, -0.1f, 0, 0,
|
||||
-0.1f, 0.1f, 0.1f, 1, 1,
|
||||
-0.1f, 0.1f, -0.1f, 0, 1,
|
||||
|
||||
// Right face
|
||||
0.1f, -0.1f, 0.1f, 0, 0,
|
||||
0.1f, -0.1f, -0.1f, 1, 0,
|
||||
0.1f, 0.1f, -0.1f, 1, 1,
|
||||
0.1f, -0.1f, 0.1f, 0, 0,
|
||||
0.1f, 0.1f, -0.1f, 1, 1,
|
||||
0.1f, 0.1f, 0.1f, 0, 1,
|
||||
|
||||
// Top face
|
||||
-0.1f, 0.1f, 0.1f, 0, 0,
|
||||
0.1f, 0.1f, 0.1f, 1, 0,
|
||||
0.1f, 0.1f, -0.1f, 1, 1,
|
||||
-0.1f, 0.1f, 0.1f, 0, 0,
|
||||
0.1f, 0.1f, -0.1f, 1, 1,
|
||||
-0.1f, 0.1f, -0.1f, 0, 1,
|
||||
|
||||
// Bottom face
|
||||
-0.1f, -0.1f, -0.1f, 0, 0,
|
||||
0.1f, -0.1f, -0.1f, 1, 0,
|
||||
0.1f, -0.1f, 0.1f, 1, 1,
|
||||
-0.1f, -0.1f, -0.1f, 0, 0,
|
||||
0.1f, -0.1f, 0.1f, 1, 1,
|
||||
-0.1f, -0.1f, 0.1f, 0, 1
|
||||
};
|
||||
|
||||
IVertexBuffer *pVertexBuffer = Renderer()->CreateVertexBuffer(sizeof(cubeVertices));
|
||||
void *pMapping = pVertexBuffer->Map();
|
||||
V_memcpy(pMapping, cubeVertices, sizeof(cubeVertices));
|
||||
pVertexBuffer->Unmap();
|
||||
|
||||
m_pMesh = IMeshRendering::CreateMesh();
|
||||
m_pMesh->SetVertexBuffer(0, pVertexBuffer);
|
||||
m_pMeshInstance = m_pMesh->CreateInstance();
|
||||
|
||||
Precache();
|
||||
SetThink(Think);
|
||||
};
|
||||
|
||||
void C_MOBAPlayer::Destroy()
|
||||
{
|
||||
|
||||
}
|
||||
void C_MOBAPlayer::Think( float fDelta )
|
||||
{
|
||||
float x = g_fAxisValues[AXIS_MOUSE_X];
|
||||
float y = g_fAxisValues[AXIS_MOUSE_Y];
|
||||
float fPitch = glm_rad(x);
|
||||
float fYaw = glm_rad(y);
|
||||
if (g_localClient->pBasePlayer == pEntity)
|
||||
{
|
||||
glm_mat4_identity(g_cameraView);
|
||||
glm_rotate_z(g_cameraView, fYaw, g_cameraView);
|
||||
glm_rotate_y(g_cameraView, fPitch, g_cameraView);
|
||||
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;
|
||||
}
|
||||
mat4 m;
|
||||
glm_mat4_identity(m);
|
||||
m_pMeshInstance->SetMatrix(m);
|
||||
m_pMeshInstance->SetPosition(pEntity->m_position);
|
||||
m_pMeshInstance->Draw();
|
||||
m_pMeshInstance->SetPosition({0,0,-(float)g_pEngineVars->m_fTime});
|
||||
versor v;
|
||||
glm_euler_zxy_quat((vec3){(float)g_pEngineVars->m_fTime,0,0}, v);
|
||||
m_pMeshInstance->SetRotation({v[0], v[1], v[2], v[3]});
|
||||
};
|
||||
|
||||
LINK_CLIENT_ENTITY(C_MOBAPlayer, CMOBAPlayer)
|
||||
LINK_ENTITY_TO_CLASS(player, C_MOBAPlayer)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user