rename basic shader to character
buildbot/windows Build done.
buildbot/linux Build done.

add character shadow
make animation play twice as fast when sprinting
This commit is contained in:
Sven Balzer
2026-08-03 13:32:20 +02:00
parent 4f4ec3cfd5
commit 6aa530daea
11 changed files with 475 additions and 11 deletions
+24 -3
View File
@@ -36,6 +36,7 @@ static SDL_Window *window;
static R_Texture framebuffer;
static R_Texture player_texture;
static R_Texture character_shadow_texture;
static R_Texture tile_textures_atlas;
static R_Texture tile_textures_atlas_imgui;
@@ -915,6 +916,12 @@ static bool init_resources() {
return false;
}
character_shadow_texture = create_texture("characters/shadow.png");
if (!character_shadow_texture) {
log_error("Failed to create shader texture.");
return false;
}
if (!recreate_tile_textures()) {
log_error("Failed to create tile textures.");
return false;
@@ -1438,7 +1445,7 @@ static void update_state_game() {
const bool *keyboard_state = SDL_GetKeyboardState(NULL);
if (player.is_moving) {
player.animation_time += delta_time;
player.animation_time += delta_time * (keyboard_state[SDL_SCANCODE_LSHIFT] ? 2 : 1);
vec2 leftover_movement = vec2(player.target_position) - player.visual_position;
vec2 movement = clamp(min(vec2(0, 0), leftover_movement), normalize(leftover_movement) * (delta_t * character_speed * (keyboard_state[SDL_SCANCODE_LSHIFT] ? 2.0f : 1.0f)), max(vec2(0, 0), leftover_movement));
@@ -1478,7 +1485,8 @@ static void render_game() {
{
ZoneScopedN("player_instance_buffer");
Uint64 variation_index = (player.animation_time / (100 * SDL_NS_PER_MS)) % 4;
Uint64 ns_per_variation = (1.0f / (character_speed * 2)) * SDL_NS_PER_SECOND;
Uint64 variation_index = (player.animation_time / (ns_per_variation)) % 4;
player_instance.pos = player.visual_position;
player_instance.sprite_selection = variation_index << 16 | player.direction;
@@ -1555,7 +1563,20 @@ static void render_game() {
{
ZoneScopedN("Draw Player");
renderer_frame_set_shader(R_SHADER_BASIC);
renderer_frame_set_shader(R_SHADER_CHARACTER_SHADOW);
renderer_frame_draw(vertex_buffer, index_buffer, player_instance_buffer, 6, 1, &(R_Draw_Resources){
.vertex_uniform_buffers = (R_Buffer[]){ view_projection_matrix_buffer },
.num_vertex_uniform_buffers = 1,
.fragment_sampled_textures = (R_Texture[]){ character_shadow_texture },
.fragment_uniform_buffers = (R_Buffer[]){ tint_color_buffer },
.num_fragment_sampled_textures = 1,
.num_fragment_uniform_buffers = 1,
});
renderer_frame_set_shader(R_SHADER_CHARACTER);
renderer_frame_draw(vertex_buffer, index_buffer, player_instance_buffer, 6, 1, &(R_Draw_Resources){
.vertex_uniform_buffers = (R_Buffer[]){ view_projection_matrix_buffer },