diff --git a/assets/shaders/frag.glsl b/assets/shaders/frag.glsl index 5cc9a12..024080a 100644 --- a/assets/shaders/frag.glsl +++ b/assets/shaders/frag.glsl @@ -38,16 +38,11 @@ float hash(vec2 p) { } vec2 fisheyeDistort(vec2 coord, float strength) { - // Scale down input coordinates to leave room for distortion - vec2 safeCoord = mix(vec2(0.5), coord, 0.85); // Scale down by 15% - - vec2 centered = safeCoord * 2.0 - 1.0; + strength = clamp(strength, 0.0, 1.0); + vec2 centered = coord * 2.0 - 1.0; + centered.xy *= 0.85; float distance = length(centered); - - // Reduce strength near edges - float adjustedStrength = (1 - strength) * (1.0 - smoothstep(0.7, 0.9, distance)); - - float distorted = distance * (1.0 + adjustedStrength * distance * distance); + float distorted = distance * pow((1.0 + (1 - strength) * distance * distance), 2.0); vec2 distortedCoord; if (distance < 0.001) { @@ -62,14 +57,15 @@ vec2 fisheyeDistort(vec2 coord, float strength) { } float calculateMask(vec2 coord, float fisheyeStrength, float maskThreshold, float softness) { - vec2 centered = coord * 2.0 - 1.0; + fisheyeStrength = clamp(fisheyeStrength, 0.0, 1.0); + vec2 centered = coord * 2.0 - 1.0; float distance = length(centered); if (distance == 0.0) { return 1.0; } - float distorted = distance * (1.0 + (1 - fisheyeStrength) * distance * distance); + float distorted = distance * pow((1 + (1 - fisheyeStrength) * distance * distance), 2.0); vec2 distortedCoord = centered * (distorted / distance); distortedCoord = distortedCoord * 0.5 + 0.5; float maxDistortion = max( @@ -127,7 +123,7 @@ void main() noise2 *= 0.9 + 0.1 * sin(uv.y * 400.0); noise3 *= 0.9 + 0.1 * sin(uv.y * 400.0); - distortedCoord = fisheyeDistort(TexCoord, u_battery * 1.2); + distortedCoord = fisheyeDistort(TexCoord, u_battery); float offset = 0.001 / (u_battery * u_battery + 0.001 ); offset = offset > .05 ? .05 : offset; @@ -151,7 +147,7 @@ void main() noiseColor *= vec4(vig) * vec4(1.0, inv_hit, inv_hit, 1.0); } - float mask = calculateMask(gl_FragCoord.xy / u_resolution, u_battery, 0.08f, 0.02f); + float mask = calculateMask(gl_FragCoord.xy / u_resolution, u_battery, 0.08f, 0.16f); FragColor = vec4(noiseColor.rgb * mask, noiseColor.a); } else { FragColor = texColor; diff --git a/inc/cub3d.h b/inc/cub3d.h index 4038a2e..fe7d84f 100644 --- a/inc/cub3d.h +++ b/inc/cub3d.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 12:22:29 by qmennen #+# #+# */ -/* Updated: 2025/06/11 16:29:00 by qmennen ### ########.fr */ +/* Updated: 2025/06/11 20:16:49 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,8 +21,10 @@ # define TITLE "Cub3D" # define ATTACK_DAMAGE 0.03f -# define INITIAL_BATTERY 1.0f +# define INITIAL_BATTERY 0.5f # define BATTERY_RATE 0.01f +# define BATTERY_CHARGE 0.5f +# define CHARGE_FRAMES 10 # define FLASH_BATTERY 0.05f # define SLIDESHOW_DURATION 3.0f diff --git a/inc/types.h b/inc/types.h index 9d9c3e5..579a4d1 100644 --- a/inc/types.h +++ b/inc/types.h @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 15:52:44 by qmennen #+# #+# */ -/* Updated: 2025/06/11 17:49:35 by qmennen ### ########.fr */ +/* Updated: 2025/06/11 20:14:51 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -67,6 +67,7 @@ typedef struct s_player double speed; int is_moving; float hit_timer; + float battery_charger; float battery; } t_player; diff --git a/src/game/collision.c b/src/game/collision.c index ec79411..849e892 100644 --- a/src/game/collision.c +++ b/src/game/collision.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* collision.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */ -/* Updated: 2025/06/10 19:34:32 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* collision.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */ +/* Updated: 2025/06/11 20:17:16 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,9 +17,7 @@ static void collect(t_game *game, t_sprite *sprite) t_player *player; player = game->player; - player->battery += 0.5f; - if (player->battery > 1.f) - player->battery = 1.f; + player->battery_charger += CHARGE_FRAMES; sprite->type = SPRITE_TYPE_COLLECTED; game->scoreboard->collectibles++; } diff --git a/src/game/game_hud.c b/src/game/game_hud.c index 2d7397a..8a6a601 100644 --- a/src/game/game_hud.c +++ b/src/game/game_hud.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ -/* :::::::: */ -/* game_hud.c :+: :+: */ -/* +:+ */ -/* By: qmennen +#+ */ -/* +#+ */ -/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */ -/* Updated: 2025/06/10 19:37:31 by whaffman ######## odam.nl */ +/* ::: :::::::: */ +/* game_hud.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: qmennen +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/05/28 14:26:29 by qmennen #+# #+# */ +/* Updated: 2025/06/11 20:19:25 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -53,6 +53,15 @@ static void draw_battery(mlx_image_t *img, float battery) void handle_battery(t_game *game) { + if (game->player->battery_charger > 0) + { + game->player->battery += (BATTERY_CHARGE / CHARGE_FRAMES); + game->player->battery_charger--; + } + if (game->player->battery > 1.0f) + { + game->player->battery = 1.0f; + } game->player->battery -= game->screen->mlx->delta_time * BATTERY_RATE; if (game->player->battery < 0) { diff --git a/src/game/player.c b/src/game/player.c index bb0d426..a52532e 100644 --- a/src/game/player.c +++ b/src/game/player.c @@ -6,7 +6,7 @@ /* By: qmennen +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/15 18:53:19 by qmennen #+# #+# */ -/* Updated: 2025/06/11 16:26:14 by qmennen ### ########.fr */ +/* Updated: 2025/06/11 20:15:21 by qmennen ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,6 +24,7 @@ int player_create(t_game **game) player->pos.y = -1; player->speed = 3.f; player->battery = INITIAL_BATTERY; + player->battery_charger = 5.f; player->hit_timer = 0.f; (*game)->player = player; return (SUCCESS);