clang-format on /apps/demos/bunnymark files

This commit is contained in:
veclav talica 2024-10-08 01:20:42 +03:00
parent 78034b69f5
commit 5c91423fbb
7 changed files with 70 additions and 71 deletions

View File

@ -180,7 +180,7 @@ function(give_options_without_warnings target)
-Bsymbolic-functions -Bsymbolic-functions
-Wl,--hash-style=gnu) -Wl,--hash-style=gnu)
target_compile_definitions(${target} PUBLIC target_compile_definitions(${target} PRIVATE
$<$<BOOL:${TWN_FEATURE_DYNLIB_GAME}>:TWN_FEATURE_DYNLIB_GAME>) $<$<BOOL:${TWN_FEATURE_DYNLIB_GAME}>:TWN_FEATURE_DYNLIB_GAME>)
endfunction() endfunction()

View File

@ -13,76 +13,74 @@
#define RIGHT_CLICK_ADD 500 #define RIGHT_CLICK_ADD 500
void handle_input(void){ void handle_input(void)
{
State *state = ctx.udata; State *state = ctx.udata;
if(ctx.input.mouse_state == 1 && ctx.input.mouse_window_position.y > 60){ // Left click if (ctx.input.mouse_state == 1 && ctx.input.mouse_window_position.y > 60)
{ // Left click
for (int i = 0; i < LEFT_CLICK_ADD; i++) for (int i = 0; i < LEFT_CLICK_ADD; i++)
{ {
if (state->bunniesCount < MAX_BUNNIES) if (state->bunniesCount < MAX_BUNNIES)
{ {
state->bunnies[state->bunniesCount].position = (Vec2){ state->bunnies[state->bunniesCount].position =
(float)ctx.input.mouse_window_position.x, (Vec2){(float)ctx.input.mouse_window_position.x, (float)ctx.input.mouse_window_position.y};
(float)ctx.input.mouse_window_position.y
};
state->bunnies[state->bunniesCount].speed.x = (float)(rand() % 500 - 250) / 60.0; state->bunnies[state->bunniesCount].speed.x = (float)(rand() % 500 - 250) / 60.0;
state->bunnies[state->bunniesCount].speed.y = (float)(rand() % 500 - 250) / 60.0; state->bunnies[state->bunniesCount].speed.y = (float)(rand() % 500 - 250) / 60.0;
state->bunnies[state->bunniesCount].color = (Color){ state->bunnies[state->bunniesCount].color =
rand() % 190 + 50, (Color){rand() % 190 + 50, rand() % 160 + 80, rand() % 140 + 100, 255};
rand() % 160 + 80,
rand() % 140 + 100,
255
};
state->bunniesCount++; state->bunniesCount++;
} }
} }
} }
if(ctx.input.mouse_state == 4){ // Right click
if (ctx.input.mouse_state == 4)
{ // Right click
for (int i = 0; i < RIGHT_CLICK_ADD; i++) for (int i = 0; i < RIGHT_CLICK_ADD; i++)
{ {
if (state->bunniesCount < MAX_BUNNIES) if (state->bunniesCount < MAX_BUNNIES)
{ {
state->bunnies[state->bunniesCount].position = (Vec2){ state->bunnies[state->bunniesCount].position =
(float)ctx.input.mouse_window_position.x, (Vec2){(float)ctx.input.mouse_window_position.x, (float)ctx.input.mouse_window_position.y};
(float)ctx.input.mouse_window_position.y
};
state->bunnies[state->bunniesCount].speed.x = (float)(rand() % 500 - 250) / 60.0; state->bunnies[state->bunniesCount].speed.x = (float)(rand() % 500 - 250) / 60.0;
state->bunnies[state->bunniesCount].speed.y = (float)(rand() % 500 - 250) / 60.0; state->bunnies[state->bunniesCount].speed.y = (float)(rand() % 500 - 250) / 60.0;
state->bunnies[state->bunniesCount].color = (Color){ state->bunnies[state->bunniesCount].color =
rand() % 190 + 50, (Color){rand() % 190 + 50, rand() % 160 + 80, rand() % 140 + 100, 255};
rand() % 160 + 80,
rand() % 140 + 100,
255
};
state->bunniesCount++; state->bunniesCount++;
} }
} }
} }
} }
void game_tick(void) { void game_tick(void)
{
static char bunny_count_text[64]; static char bunny_count_text[64];
static char bunny_path[64] = "wabbit_alpha.png"; static char bunny_path[64] = "wabbit_alpha.png";
// State *state = ctx.udata; // State *state = ctx.udata;
if (ctx.initialization_needed) { // First tick, initalizing data if (ctx.initialization_needed)
{ // First tick, initalizing data
// Allocating State struct to store data there // Allocating State struct to store data there
if (!ctx.udata) ctx.udata = ccalloc(1, sizeof(State)); if (!ctx.udata)
ctx.udata = ccalloc(1, sizeof(State));
((State *)ctx.udata)->bunniesCount = 0; ((State *)ctx.udata)->bunniesCount = 0;
} }
State *state = ctx.udata; State *state = ctx.udata;
const double delta = (double)(ctx.delta_time) / 1000.0; // Receiving floating point delta value (diving by 1000 based on vibe) const double delta =
(double)(ctx.delta_time) / 1000.0; // Receiving floating point delta value (diving by 1000 based on vibe)
for (int i = 0; i < state->bunniesCount; i++){ for (int i = 0; i < state->bunniesCount; i++)
{
state->bunnies[i].position.x += state->bunnies[i].speed.x; state->bunnies[i].position.x += state->bunnies[i].speed.x;
state->bunnies[i].position.y += state->bunnies[i].speed.y; state->bunnies[i].position.y += state->bunnies[i].speed.y;
if (((state->bunnies[i].position.x + BUNNY_W / 2) > ctx.window_w) || if (((state->bunnies[i].position.x + BUNNY_W / 2) > ctx.window_w) ||
((state->bunnies[i].position.x + BUNNY_W/2) < 0)) state->bunnies[i].speed.x *= -1; ((state->bunnies[i].position.x + BUNNY_W / 2) < 0))
state->bunnies[i].speed.x *= -1;
if (((state->bunnies[i].position.y + BUNNY_H / 2) > ctx.window_h) || if (((state->bunnies[i].position.y + BUNNY_H / 2) > ctx.window_h) ||
((state->bunnies[i].position.y + BUNNY_H/2 - 60) < 0)) state->bunnies[i].speed.y *= -1; ((state->bunnies[i].position.y + BUNNY_H / 2 - 60) < 0))
state->bunnies[i].speed.y *= -1;
} }
handle_input(); handle_input();
@ -90,15 +88,14 @@ void game_tick(void) {
// Clear window with Gray color (set the background color this way) // Clear window with Gray color (set the background color this way)
draw_rectangle((Rect){0, 0, ctx.window_w, ctx.window_h}, GRAY); draw_rectangle((Rect){0, 0, ctx.window_w, ctx.window_h}, GRAY);
for (int i = 0; i < state->bunniesCount; i++){ // Draw each bunny based on their position and color, also scale accordingly for (int i = 0; i < state->bunniesCount; i++)
m_sprite( { // Draw each bunny based on their position and color, also scale accordingly
m_set(path, bunny_path), m_sprite(m_set(path, bunny_path),
m_set(rect, ((Rect){ .x = (int)state->bunnies[i].position.x, .y = (int)state->bunnies[i].position.y, m_set(rect, ((Rect){.x = (int)state->bunnies[i].position.x,
.w = BUNNY_W * SPRITE_SCALE, .h = BUNNY_H * SPRITE_SCALE .y = (int)state->bunnies[i].position.y,
})), .w = BUNNY_W * SPRITE_SCALE,
m_opt(color, (state->bunnies[i].color)), .h = BUNNY_H * SPRITE_SCALE})),
m_opt(stretch, true), m_opt(color, (state->bunnies[i].color)), m_opt(stretch, true), );
);
} }
// Formatting text to display, might want to add FPS here too // Formatting text to display, might want to add FPS here too
snprintf(bunny_count_text, 64, "Bunnies: %d", state->bunniesCount); snprintf(bunny_count_text, 64, "Bunnies: %d", state->bunniesCount);
@ -106,8 +103,8 @@ void game_tick(void) {
draw_text(bunny_count_text, (Vec2){0, 0}, 40, BLACK, "/fonts/kenney-pixel.ttf"); draw_text(bunny_count_text, (Vec2){0, 0}, 40, BLACK, "/fonts/kenney-pixel.ttf");
} }
void game_end(void)
void game_end(void) { {
State *state = ctx.udata; State *state = ctx.udata;
// Free state when game ends // Free state when game ends

View File

@ -3,23 +3,23 @@
#include "twn_game_api.h" #include "twn_game_api.h"
#define MAX_BUNNIES 50000 // 50K bunnies limit #define MAX_BUNNIES 100000 // 100K bunnies limit
#define BUNNY_W 26 #define BUNNY_W 26
#define BUNNY_H 37 #define BUNNY_H 37
#define SPRITE_SCALE 1 #define SPRITE_SCALE 1
typedef struct Bunny { typedef struct Bunny
{
Vec2 position; Vec2 position;
Vec2 speed; Vec2 speed;
Color color; Color color;
} Bunny; } Bunny;
typedef struct State { typedef struct State
{
Bunny bunnies[MAX_BUNNIES]; Bunny bunnies[MAX_BUNNIES];
int bunniesCount; int bunniesCount;
InputState mouse_state; InputState mouse_state;
} State; } State;
#endif #endif

View File

@ -44,8 +44,8 @@ typedef struct ActionHashItem {
} ActionHashItem; } ActionHashItem;
/* TODO: don't assume SDL button mask */
typedef struct InputState { typedef struct InputState {
const uint8_t *keyboard_state; /* array of booleans indexed by scancode */
uint32_t mouse_state; /* SDL mouse button bitmask */ uint32_t mouse_state; /* SDL mouse button bitmask */
Vec2i mouse_window_position; Vec2i mouse_window_position;
Vec2i mouse_relative_position; Vec2i mouse_relative_position;
@ -54,6 +54,7 @@ typedef struct InputState {
/* engine state */ /* engine state */
ActionHashItem *action_hash; ActionHashItem *action_hash;
const uint8_t *keyboard_state; /* array of booleans indexed by scancode */
} InputState; } InputState;

View File

@ -245,6 +245,8 @@ void use_texture_mode(TextureMode mode) {
VertexBufferBuilder build_vertex_buffer(VertexBuffer buffer, size_t bytes) { VertexBufferBuilder build_vertex_buffer(VertexBuffer buffer, size_t bytes) {
glBindBuffer(GL_ARRAY_BUFFER, buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, bytes, NULL, GL_STREAM_DRAW); glBufferData(GL_ARRAY_BUFFER, bytes, NULL, GL_STREAM_DRAW);
if (bytes == 0)
SDL_TriggerBreakpoint();
void *mapping = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); void *mapping = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
if (!mapping) if (!mapping)
CRY("build_vertex_buffer", "Error mapping a vertex array buffer"); CRY("build_vertex_buffer", "Error mapping a vertex array buffer");
@ -282,7 +284,6 @@ void finally_render_sprites(const Primitive2D primitives[],
{ {
/* TODO: maybe do, dunno */ /* TODO: maybe do, dunno */
// glBindBuffer(GL_VERTEX_ARRAY, vertex_buffer); // glBindBuffer(GL_VERTEX_ARRAY, vertex_buffer);
(void)buffer;
GLsizei off; GLsizei off;
GLsizei voff; GLsizei voff;

View File

@ -70,7 +70,6 @@ void clear_draw_buffer(void) {
(1.0f / 255) * 230, (1.0f / 255) * 230,
(1.0f / 255) * 230, 1); (1.0f / 255) * 230, 1);
/* TODO: don't clear color when skybox is applied? */
glClear(GL_COLOR_BUFFER_BIT | glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT | GL_DEPTH_BUFFER_BIT |
GL_STENCIL_BUFFER_BIT); GL_STENCIL_BUFFER_BIT);

View File

@ -138,6 +138,7 @@ void render_sprites(const Primitive2D primitives[],
const size_t cur = batch.mode == TEXTURE_MODE_GHOSTLY ? i : batch.size - i - 1; const size_t cur = batch.mode == TEXTURE_MODE_GHOSTLY ? i : batch.size - i - 1;
const SpritePrimitive sprite = primitives[cur].sprite; const SpritePrimitive sprite = primitives[cur].sprite;
/* TODO: try caching it */
const Rect srcrect = const Rect srcrect =
textures_get_srcrect(&ctx.texture_cache, primitives[cur].sprite.texture_key); textures_get_srcrect(&ctx.texture_cache, primitives[cur].sprite.texture_key);