// Copyright (c) 2023 Alex Diener. All rights reserved.

#ifndef __SharedDefinitions_H__
#define __SharedDefinitions_H__

#include <stdint.h>
#include <stddef.h>

#define TILE_WIDTH 16
#define TILE_HEIGHT 16
#define TILE_MAP_WIDTH 16
#define TILE_MAP_HEIGHT 12
#define DISPLAY_WIDTH (TILE_WIDTH * TILE_MAP_WIDTH)
#define DISPLAY_HEIGHT (TILE_HEIGHT * TILE_MAP_HEIGHT)
#define FRAME_INTERVAL (1.0 / 60.0)
#define ANIMATION_FRAME_RATE 60.0

#define AUDIO_CATEGORY_SOUND 0
#define AUDIO_CATEGORY_MUSIC 1
#define AUDIO_CATEGORY_COUNT 2
#define AUDIO_MUSIC_LANE_COUNT 1
#define AUDIO_SOURCE_COUNT_MAX 64
#define AUDIO_STREAM_COUNT_MAX 8
#define AUDIO_DEFAULT_SAMPLE_RATE 48000

#define MENU_ACTION_ACCEPT 0
#define MENU_ACTION_CANCEL 1
#define MENU_ACTION_ALTERNATE 2

#define ACTION_WAIT 0
#define ACTION_INTERACT 1

#define DRAW_LAYER_FLOOR 0
#define DRAW_LAYER_ENTITY 1
#define DRAW_LAYER_WALL 2

#define PREFERENCES_FILE_NAME "PROJECT_NAME_preferences.json"
#define PREFERENCES_LATEST_VERSION 1
#define SUPPORT_SUBDIRECTORY_NAME "PROJECT_NAME"

typedef uint8_t FacingDirection;
enum {
	FACING_NORTH = 0,
	FACING_EAST = 1,
	FACING_SOUTH = 2,
	FACING_WEST = 3
};

typedef enum ComponentType {
	COMPONENT_ATTACK,
	COMPONENT_COLLIDABLE,
	COMPONENT_FACING,
	COMPONENT_MOVEMENT,
	COMPONENT_PICKUP,
	COMPONENT_POSITION,
	COMPONENT_PUSHABLE,
	COMPONENT_PUSHER,
	COMPONENT_SPRITE,
	COMPONENT_STEERING
} ComponentType;

typedef enum AttackType {
	ATTACK_DESTROY_WALL       = 0x1,
	ATTACK_OVERRIDE_COLLISION = 0x2,
	ATTACK_HURT_PLAYER        = 0x4,
	ATTACK_HURT_ENEMY         = 0x8
} AttackType;

#endif
