Files
WrldBox/src/world.c
2026-06-17 09:47:04 -04:00

141 lines
2.6 KiB
C

#include <stddef.h>
#include "world.h"
// the beeg one. hooooooooooooooooh boy
const float scale = 43.7445319335f;
const float g = 9.81f * scale;
const float PMV = 10000.0*scale; //Player Max Velocity
const int PLAYER_SPEED_FACTOR =2;
const float JUMP_FORCE = 300.0f*scale;
const float AIR_DRAG = 0.999f;
const float GROUND_FRICTION = 1200.0f;
const float MAX_PLAYER_SPEED = 300.0f;
const float BOUNCE = 0.45f;
const float ground_y = 550.0f;
Entity entities[MAX_ENTITIES];
Entity *player = NULL;
bool isSimulating = true;
float simTime = 0.0f;
void ApplyForce(Entity *e, Vector2 force)
{
if (!e || !e->active)
return;
e->force.x += force.x;
e->force.y += force.y;
}
bool IsGrounded(Entity *e)
{
if (!e)
return false;
return (
e->position.y +
e->size * 0.5f >=
ground_y - 2.0f
);
}
Entity *SpawnEntity(
float x,
float y,
float size,
float mass,
Color color)
{
for (int i = 0; i < MAX_ENTITIES; i++)
{
if (!entities[i].active)
{
Entity *e = &entities[i];
e->active = true;
e->isPlayer = false;
e->affectedByGravity = true;
e->mass = mass;
e->size = size;
e->position = (Vector2){x, y};
e->velocity = (Vector2){0, 0};
e->acceleration = (Vector2){0, 0};
e->force = (Vector2){0, 0};
e->color = color;
return e;
}
}
return NULL;
}
// say bye bye to EVERYTHINGGGG AHAHAHAHAHAAH
// im a little mad with power
// this is literally just a helper function to clear the entities and player
void ClearWorld(void)
{
for (int i = 0; i < MAX_ENTITIES; i++)
{
entities[i].active = false;
}
player = NULL;
}
// used in main.c to start the actual engine behaviors. spawns the player, and a few other boxes for funsies.
void InitWorld(void)
{
ClearWorld();
player = SpawnEntity(
120,
120,
40,
1.0f,
BLUE);
if (player)
{
player->isPlayer = true;
}
for (int i = 0; i < 8; i++)
{
SpawnEntity(
300 + i * 50,
50,
25,
1.0f,
RED);
}
simTime = 0.0f;
}
// helper function: count number of entities. Something somewhere uses this. I think it's probably for entity counting. Don't quote me on that.
int CountEntities(void)
{
int count = 0;
for (int i = 0; i < MAX_ENTITIES; i++)
{
if (entities[i].active)
count++;
}
return count;
}