battery fun

This commit is contained in:
Quinten Mennen 2025-06-11 20:24:32 +02:00
parent 280d1ac498
commit 300b867ef7
6 changed files with 41 additions and 34 deletions

View File

@ -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;

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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;

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* collision.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/22 14:40:59 by qmennen #+# #+# */
/* Updated: 2025/06/10 19:34:32 by whaffman ######## odam.nl */
/* ::: :::::::: */
/* collision.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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++;
}

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* game_hud.c :+: :+: */
/* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */
/* 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 <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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)
{

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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);