#pragma once

#include "../../ecs_component.h"
#include "../../component/component_game_object.h"
#include "../../component/action/component_action_return.h"
#include "../../component/action/component_action_redirect.h"
#include "../../component/action/component_action_on_delete_give_ammo.h"
#include "../../component/action/component_action_lock.h"
#include "../../component/action/component_action_damage.h"
#include "../../component/action/component_action_grip.h"
#include "../../component/stat/component_game_entity_type.h"

#define SNAKE_SPEED 1
#define SNAKE_FRICTION 1
#define SNAKE_VELOCITY_MAX 50
#define SNAKE_ACTION_RETURN_SPEED 1
#define SNAKE_ACTION_RETURN_VELOCITY_MAX 20
#define SNAKE_ACTION_RETURN_LIFETIME 25
#define SNAKE_ACTION_DAMAGE_VALUE 1
#define SNAKE_ACTION_DAMAGE_TIMER 60
#define SNAKE_ACTION_RETURN_MULTIPLIER 1.15
#define SNAKE_ACTION_ON_DELETE_GIVE_AMMO_VALUE 1
#define SNAKE_ACTION_REDIRECT_MULTIPLIER 1.05
#define SNAKE_ALLEGIANCE ALLEGIANCE_PLAYER
#define SNAKE_ACTION_DAMAGE_TYPE ALLEGIANCE_PLAYER
#define SNAKE_ACTION_DAMAGE_ATTACK_TYPE ALLEGIANCE_ENEMY
#define SNAKE_ACTION_LOCK_SELECT_RADIUS 100.0f
#define SNAKE_ACTION_LOCK_COOLDOWN 300
#define SNAKE_GAME_OBJECT_IS_AFFECTED_BY_GRAVITY false
#define SNAKE_GAME_OBJECT_IS_BOUNCE false
#define SNAKE_GAME_OBJECT_IS_SOLID false

static const vec2 SNAKE_SIZE = {75.0f, 75.0f};
static const vec2 SNAKE_PHYSICS_SIZE = {60.0f, 20.0f};

void entity_snake_init(ECS* ecs, u32 id, vec3 position, u32 sender);
