Add options for speed, detail and colorfulness
authorLukas Jiriste <ljiriste@student.42prague.com>
Thu, 25 Apr 2024 09:48:56 +0000 (11:48 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Thu, 25 Apr 2024 09:51:05 +0000 (11:51 +0200)
Add color change speed, maximum iterations (detail) and
color change density (colorfulness) as fractol options.
Change defaults.

main.c

diff --git a/main.c b/main.c
index a3433edf8d9f7492e7a415acd8782188b14ba926..b0e25ebfe1c246965b8371ba13016409980e5b31 100644 (file)
--- a/main.c
+++ b/main.c
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/10/27 14:29:26 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/04/25 09:42:33 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/04/25 11:44:39 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -212,17 +212,17 @@ static void       init_view(t_session *s)
 
 void   set_default(t_session *s)
 {
+       s->img.width = 1920;
+       s->img.height = 1011;
+       s->img.undersample_max = 5;
+       s->set.detail = 1000;
        s->view.fractal = mandelbrot;
        s->view.palette = tri_color;
+       s->view.color_shift_speed = -0.001;
+       s->set.color_stability = 100;
        s->view.pixel_size.x = 0.01;
        s->view.pixel_size.y = 0.01;
-       s->view.color_shift = 0.7;
-       s->view.color_shift_speed = 0.01;
-       s->set.detail = 1000;
-       s->set.color_stability = 100;
-       s->img.width = 1000;
-       s->img.height = 1000;
-       s->img.undersample_max = 5;
+       s->view.color_shift = 0;
        return ;
 }
 
@@ -236,6 +236,27 @@ t_fractal  to_fractal(const char *name)
                return (NULL);
 }
 
+int    parse_arg(char **argv, t_session *s, int *i)
+{
+               if (!ft_strcmp(argv[*i], "-w") && ft_isint(argv[*i + 1]) && ft_atoi(argv[*i + 1]) > 0)
+                       s->img.width = ft_atoi(argv[++*i]);
+               else if (!ft_strcmp(argv[*i], "-h") && ft_isint(argv[*i + 1]) && ft_atoi(argv[*i + 1]) > 0)
+                       s->img.height = ft_atoi(argv[++*i]);
+               else if (!ft_strcmp(argv[*i], "-u") && ft_isint(argv[*i + 1]) && ft_atoi(argv[*i]) >= 0 )
+                       s->img.undersample_max = ft_atoi(argv[++*i]);
+               else if (!ft_strcmp(argv[*i], "-d") && ft_isint(argv[*i + 1]))
+                       s->set.detail = ft_atoi(argv[++*i]);
+               else if (!ft_strcmp(argv[*i], "-f") && to_fractal(argv[*i + 1]) != NULL)
+                       s->view.fractal = to_fractal(argv[*i + 1]);
+               else if (!ft_strcmp(argv[*i], "-s") && ft_isint(argv[*i + 1]))
+                       s->view.color_shift_speed = ft_atoi(argv[++*i]) / 1000.;
+               else if (!ft_strcmp(argv[*i], "-c") && ft_isint(argv[*i + 1]))
+                       s->set.color_stability = 10000 / ft_atoi(argv[++*i]);
+               else
+                       return (1);
+               return (0);
+}
+
 int    parse_args(int argc, char **argv, t_session *s)
 {
        int                     i;
@@ -246,17 +267,7 @@ int        parse_args(int argc, char **argv, t_session *s)
        i = 1;
        while (i + 1 < argc)
        {
-               if (!ft_strcmp(argv[i], "-w") && ft_isint(argv[i + 1]))
-                       s->img.width = ft_atoi(argv[++i]);
-               else if (!ft_strcmp(argv[i], "-h") && ft_isint(argv[i + 1]))
-                       s->img.height = ft_atoi(argv[++i]);
-               else if (!ft_strcmp(argv[i], "-u") && ft_isint(argv[i + 1]))
-                       s->img.undersample_max = ft_atoi(argv[++i]);
-               else if (!ft_strcmp(argv[i], "-d") && ft_isint(argv[i + 1]))
-                       s->set.detail = ft_atoi(argv[++i]);
-               else if (!ft_strcmp(argv[i], "-f") && to_fractal(argv[i + 1]) != NULL)
-                       s->view.fractal = to_fractal(argv[i + 1]);
-               else
+               if (parse_arg(argv, s, &i))
                        return (1);
                ++i;
        }