/ fdf / fdf / srcs / hooks.c
hooks.c
  1  /* ************************************************************************** */
  2  /*                                                                            */
  3  /*                                                        :::      ::::::::   */
  4  /*   hooks.c                                            :+:      :+:    :+:   */
  5  /*                                                    +:+ +:+         +:+     */
  6  /*   By: gychoi <gychoi@student.42seoul.kr>         +#+  +:+       +#+        */
  7  /*                                                +#+#+#+#+#+   +#+           */
  8  /*   Created: 2022/12/24 18:43:31 by gychoi            #+#    #+#             */
  9  /*   Updated: 2023/01/05 18:56:22 by gychoi           ###   ########.fr       */
 10  /*                                                                            */
 11  /* ************************************************************************** */
 12  
 13  #include "fdf.h"
 14  
 15  int	close_hook(t_fdf *fdf)
 16  {
 17  	mlx_destroy_window(fdf->mlx, fdf->win);
 18  	exit(0);
 19  }
 20  
 21  static void	rotate_or_move(int keycode, t_fdf *fdf)
 22  {
 23  	if (keycode == KEY_W)
 24  		fdf->angle.alpha += -0.0314;
 25  	if (keycode == KEY_S)
 26  		fdf->angle.alpha += 0.0314;
 27  	if (keycode == KEY_A)
 28  		fdf->angle.beta += 0.0314;
 29  	if (keycode == KEY_D)
 30  		fdf->angle.beta += -0.0314;
 31  	if (keycode == KEY_Q)
 32  		fdf->angle.gamma += -0.0314;
 33  	if (keycode == KEY_E)
 34  		fdf->angle.gamma += 0.0314;
 35  	if (keycode == KEY_UP)
 36  		fdf->offset.y -= (2 + (int)fdf->offset.zoom);
 37  	if (keycode == KEY_DOWN)
 38  		fdf->offset.y += (2 + (int)fdf->offset.zoom);
 39  	if (keycode == KEY_LEFT)
 40  		fdf->offset.x -= (2 + (int)fdf->offset.zoom);
 41  	if (keycode == KEY_RIGHT)
 42  		fdf->offset.x += (2 + (int)fdf->offset.zoom);
 43  }
 44  
 45  static void	project_or_translate(int keycode, t_fdf *fdf)
 46  {
 47  	if (keycode == KEY_ISO)
 48  		isometric(fdf);
 49  	if (keycode == KEY_OTH)
 50  		orthographic(fdf);
 51  	if (keycode == KEY_RST)
 52  		reset_translation(fdf);
 53  	if (keycode == KEY_Z_UP)
 54  	{
 55  		if (fdf->offset.z < 100)
 56  			fdf->offset.z *= 1.2;
 57  	}
 58  	if (keycode == KEY_Z_DOWN)
 59  	{
 60  		if (fdf->offset.z > 0)
 61  			fdf->offset.z /= 1.2;
 62  	}
 63  }
 64  
 65  static void	zoom_or_bend(int keycode, t_fdf *fdf)
 66  {
 67  	if (keycode == KEY_ZOOM_IN)
 68  	{
 69  		if (fdf->offset.zoom < 100)
 70  			fdf->offset.zoom *= 1.2;
 71  	}
 72  	if (keycode == KEY_ZOOM_OUT)
 73  	{
 74  		if (fdf->offset.zoom > 0)
 75  			fdf->offset.zoom /= 1.2;
 76  		fdf->offset.y = 0;
 77  		fdf->offset.x = 0;
 78  	}
 79  	if (keycode == KEY_BEND_UP)
 80  	{
 81  		if (fdf->offset.bend < 0.01)
 82  			fdf->offset.bend += 0.000012;
 83  	}
 84  	if (keycode == KEY_BEND_DOWN)
 85  	{
 86  		if (fdf->offset.bend > -0.01)
 87  			fdf->offset.bend -= 0.000012;
 88  	}
 89  }
 90  
 91  int	key_hook(int keycode, t_fdf *fdf)
 92  {
 93  	if (keycode == KEY_ESC)
 94  	{
 95  		mlx_destroy_window(fdf->mlx, fdf->win);
 96  		exit(0);
 97  	}
 98  	if (keycode == KEY_W || keycode == KEY_S || keycode == KEY_A \
 99  	|| keycode == KEY_D || keycode == KEY_Q || keycode == KEY_E \
100  	|| keycode == KEY_UP || keycode == KEY_DOWN \
101  	|| keycode == KEY_LEFT || keycode == KEY_RIGHT)
102  		rotate_or_move(keycode, fdf);
103  	if (keycode == KEY_ISO || keycode == KEY_OTH || keycode == KEY_RST \
104  	|| keycode == KEY_Z_UP || keycode == KEY_Z_DOWN)
105  		project_or_translate(keycode, fdf);
106  	if (keycode == KEY_ZOOM_IN || keycode == KEY_ZOOM_OUT \
107  	|| keycode == KEY_BEND_UP || keycode == KEY_BEND_DOWN)
108  		zoom_or_bend(keycode, fdf);
109  	draw_frame(fdf);
110  	return (0);
111  }