/* ************************************************************************** */
/*                                                                            */
/*                                                        :::      ::::::::   */
/*   cub3d_defines.h                                    :+:      :+:    :+:   */
/*                                                    +:+ +:+         +:+     */
/*   By: rbousset <marvin@42.fr>                    +#+  +:+       +#+        */
/*                                                +#+#+#+#+#+   +#+           */
/*   Created: 2020/02/15 15:40:25 by rbousset          #+#    #+#             */
/*   Updated: 2020/02/15 15:40:27 by rbousset         ###   ########lyon.fr   */
/*                                                                            */
/* ************************************************************************** */

#	ifndef CUB3D_DEFINES_H
#	define CUB3D_DEFINES_H

/*
** ====== RETURN VALUES ======
*/
enum
{
	FT_RET_FINE,
	FT_RET_BAD_ARGV,
	FT_RET_ALLOC_ERR,
	FT_RET_FAILED_STRUCTS,
	FT_RET_FAILED_MLX,
	FT_RET_MAP_ERR,
	FT_RET_NO_MAP,
	FT_RET_READ_ERR,
	FT_RET_BMP_ERR,
	FT_ERR_MISSING
}	retvals;

/*
** ret vals:
** 1: no argv[1]
** 2: failed structs init
** 3: failed mlx init
** 4: map error
** 5: no map
** 6: read error
*/

/*
** ====== OS ======
*/

/*
** 1: Darwin
** 2: Linux
*/

#	ifndef FT_OS
#	define FT_OS 1
#	endif

/*
** ====== KEYS ======
*/

#	if FT_OS == 1
#		define FT_W_KEY		13
#		define FT_A_KEY		0
#		define FT_S_KEY		1
#		define FT_D_KEY		2
#		define FT_L_ARR_KEY	123
#		define FT_R_ARR_KEY	124
#		define FT_F1_KEY	122
#		define FT_TAB_KEY	48
#		define FT_ESC_KEY	53
/* TODO macOS return key */
#	else
#		define FT_W_KEY		119
#		define FT_A_KEY		97
#		define FT_S_KEY		115
#		define FT_D_KEY		100
#		define FT_L_ARR_KEY	65361
#		define FT_R_ARR_KEY	65363
#		define FT_TAB_KEY	65289
#		define FT_F1_KEY	65470
#		define FT_ESC_KEY	65307
#		define FT_RET_KEY	65293
#	endif

/*
** ====== NEEDED PATHS ======
*/

#	define FT_SFX_DEATH_PATH	"./media/sound/sfx/death_screen.wav"
#   define FT_SFX_N_LVL_PATH	"./media/sound/sfx/next_lvl.wav"
#   define FT_SFX_SCR_ONE_PATH	"./media/sound/sfx/scream_one.wav"
#   define FT_SFX_SCR_TWO_PATH	"./media/sound/sfx/scream_two.wav"
#   define FT_SFX_TRAP_PATH		"./media/sound/sfx/trap.wav"
#   define FT_DEATH_SCREEN_PATH	"./media/img/death_screen.xpm"

/*
** ====== SOUNDS ======
*/

#	if FT_OS == 1
#		define FT_SND_CMD		"/usr/bin/afplay --volume 0.2 %s"
#	else
#		define FT_SND_CMD		"/usr/bin/aplay -f cd -t wav -q %s"
#	endif

/*
** ====== MOVE SPEED ======
*/

#	define FT_MOVE_SPEED	0.28
#	define FT_STRAFE_SPEED	0.28
#	define FT_ROT_SPEED		0.28

/*
** ====== COLLISION ======
*/

#	define FT_COLL_MULT		0.225

/*
** ====== SCREEN ======
*/

#	ifndef FT_SCR_SIZE
#	define FT_SCR_SIZE "1920x1080"
#	endif

/*
** ====== CHARSET ======
*/

#	define FT_CHRST_VALID_PARSE		"RNSEWFCLMT"
#	define FT_CHRST_MAP_ENTRY		"0123456789NSEWLT "
#	define FT_CHRST_SPRITES			"23456789"
#	define FT_CHRST_SPAWN			"NSEW"
#	define FT_CHRST_MAP_NON_WALL	"023456789NESWLT"
#	define FT_CHRST_COLLISION		"123456789 "
#	define FT_CHRST_DETECT			"1L"

/*
** ====== BMP ======
*/

#	ifndef FT_BMP_SAVE_DIR
#	define FT_BMP_SAVE_DIR "./"
#	endif

/*
** ====== MAP ERROR MSG ======
*/

#	define FT_ERR_ALLOCATE		"Allocation error"
#	define FT_ERR_READ			"read error"
#	define FT_ERR_ARGS			"too many or to few arguments"
#	define FT_ERR_ARGV			"Bad arguments"
#	define FT_ERR_RES_SMALL		"resolution is too small, 50x50 minimum pls"
#	define FT_ERR_RES_ALPHA		"resolution should be digits only"
#	define FT_ERR_SH_ALPHA		"shadow amount should be digits only"
#	define FT_ERR_SH_RANGE		"shadow should be set between 0 - 20"
#	define FT_ERR_NOT_A_CUB		"given map is not a .cub"
#	define FT_ERR_NOT_A_XPM		"given texture is not a .xpm"
#	define FT_ERR_NOT_A_WAV		"given sound file is not a .wav"
#	define FT_ERR_COLOR_ALPHA	"colors should be digits only"
#	define FT_ERR_COLOR_MAX		"colors should be maximum 255"
#	define FT_ERR_COLOR_ARGS	"colors should be three numbers with commas"
#	define FT_ERR_SPRITE_DUMB	"bad sprite order"
#	define FT_ERR_UNFINISHED	"no map"
#	define FT_ERR_MAP_LEN		"map length inconsistency"
#	define FT_ERR_ILL_ENTRY		"illegal map entry"
#	define FT_ERR_ALR_SET		"duplicate entry"
#	define FT_ERR_ILL_MAP		"map contains illegal char"
#	define FT_ERR_MULT_SPAWN	"multiple spawn points"
#	define FT_ERR_MULT_NLVL		"multiple spawn new level access points"
#	define FT_ERR_NO_MAP		"No map"
#	define FT_ERR_MAP_WALLS		"bad space or map is not surrounded by walls"
#	define FT_ERR_MAP_EMPL		"empty line in map"
#	define FT_ERR_MAP_L_L		"last line is invalid"
#	define FT_ERR_RD_NO			"could not find north side texture file"
#	define FT_ERR_RD_SO			"could not find south side texture file"
#	define FT_ERR_RD_EA			"could not find east side texture file"
#	define FT_ERR_RD_WE			"could not find west side texture file"
#	define FT_ERR_RD_SP			"could not find sprite texture file"
#	define FT_ERR_RD_SB			"could not find skybox file"
#	define FT_ERR_RD_NL_TEX		"could not find next level texture file"
#	define FT_ERR_RD_NL_MAP		"could not find next level map file"
#	define FT_ERR_RD_MUSIC		"could not find music file"
#	define FT_ERR_RD_TRAP		"could not find trap texture file"
#	define FT_ERR_WR_BMP		"could not export to bmp"

/*
** ====== MISSING ERROR MSG ======
*/

#	define FT_ERR_MISS_ELEMENT		"Missing element:"
#	define FT_ERR_MISS_NORTH		"north side texture"
#	define FT_ERR_MISS_SOUTH		"south side texture"
#	define FT_ERR_MISS_EAST			"east side texture"
#	define FT_ERR_MISS_WEST			"west side texture"
#	define FT_ERR_MISS_SPRITE		"sprite texture"
#	define FT_ERR_MISS_NLVL_PATH	"next level path"
#	define FT_ERR_MISS_NLVL			"next level texture"
#	define FT_ERR_MISS_RESOLUTION	"resolution"
#	define FT_ERR_MISS_FLOOR_C		"floor color"
#	define FT_ERR_MISS_CEIL_C		"ceiling color"
#	define FT_ERR_MISS_PLAYER_SPAWN	"player spawn"
#	define FT_ERR_MISS_TRAP			"traps"
#	define FT_ERR_MISS_SFX_DEATH	"missing sound effect death"
#	define FT_ERR_MISS_SFX_N_LVL	"missing sound effect new level"
#	define FT_ERR_MISS_SFX_SCR_ONE	"missing sound effect scream one"
#	define FT_ERR_MISS_SFX_SCR_TWO	"missing sound effect scream two"
#	define FT_ERR_MISS_SFX_TRAP		"missing sound effect trap"
#	define FT_ERR_MISS_DEATH_SCREEN	"missing death screen image"

/*
** ====== OTHER ======
*/

#	define FT_PARSE_END_RET 25

#	endif