2023-07-02 13:23:07 +01:00
|
|
|
#include "cspt-state.h"
|
2023-07-06 00:22:59 +01:00
|
|
|
void updateInput(struct gameState * state, struct clientInput * message)
|
2023-07-02 23:08:59 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
if(message->clientNumber < 16 && message->clientNumber >= 0)
|
2023-07-02 23:08:59 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[message->clientNumber].leftAcceleration = message->left;
|
|
|
|
state->clients[message->clientNumber].rightAcceleration = message->right;
|
|
|
|
state->clients[message->clientNumber].upAcceleration = message->up;
|
|
|
|
state->clients[message->clientNumber].downAcceleration = message->down;
|
2023-07-02 23:08:59 +01:00
|
|
|
}
|
2023-07-06 00:22:59 +01:00
|
|
|
|
2023-07-02 23:08:59 +01:00
|
|
|
}
|
2023-07-02 13:23:07 +01:00
|
|
|
|
|
|
|
void doGameTick(struct gameState * state)
|
|
|
|
{
|
|
|
|
state->timestamp = time(NULL);
|
|
|
|
for (int index = 0; index < 16; index++)
|
|
|
|
{
|
|
|
|
if (state->clients[index].registered == true)
|
|
|
|
{
|
|
|
|
// Calculate acceleration:
|
|
|
|
if (state->clients[index].leftAcceleration)
|
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].xVelocity -= 0.5;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
|
|
|
if (state->clients[index].rightAcceleration)
|
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].xVelocity += 0.5;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
|
|
|
if (state->clients[index].upAcceleration)
|
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].yVelocity += 0.5;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
|
|
|
if (state->clients[index].downAcceleration)
|
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].yVelocity += 0.5;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
|
|
|
if (!state->clients[index].leftAcceleration && !state->clients[index].rightAcceleration)
|
|
|
|
{
|
|
|
|
state->clients[index].xVelocity *= 0.1;
|
|
|
|
}
|
|
|
|
if (!state->clients[index].upAcceleration && !state->clients[index].downAcceleration)
|
|
|
|
{
|
|
|
|
state->clients[index].yVelocity *= 0.1;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Clamp speed:
|
2023-07-06 00:22:59 +01:00
|
|
|
if (state->clients[index].xVelocity > 15)
|
2023-07-02 13:23:07 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].xVelocity = 15;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
2023-07-06 00:22:59 +01:00
|
|
|
if (state->clients[index].xVelocity < -15)
|
2023-07-02 13:23:07 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].xVelocity = -15;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
2023-07-06 00:22:59 +01:00
|
|
|
if (state->clients[index].yVelocity > 15)
|
2023-07-02 13:23:07 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].yVelocity = 15;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
2023-07-06 00:22:59 +01:00
|
|
|
if (state->clients[index].yVelocity < -15)
|
2023-07-02 13:23:07 +01:00
|
|
|
{
|
2023-07-06 00:22:59 +01:00
|
|
|
state->clients[index].yVelocity = -15;
|
2023-07-02 13:23:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// Do movement:
|
|
|
|
state->clients[index].xPosition += state->clients[index].xVelocity;
|
|
|
|
state->clients[index].yPosition += state->clients[index].yVelocity;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|