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

#ifndef __EntityComponent_movement_H__
#define __EntityComponent_movement_H__

typedef struct EntityComponent_movement EntityComponent_movement;
#define EntityComponent_movement_superclass GameEntityComponent

#include "PROJECT_NAME/GameEntityComponent.h"

typedef enum EntityComponent_movement_moveResult {
	MOVE_RESULT_IDLE,
	MOVE_RESULT_MOVED,
	MOVE_RESULT_REFUSED,
	MOVE_RESULT_BLOCKED
} EntityComponent_movement_moveResult;

#define EntityComponent_movement_ivars \
	GameEntityComponent_ivars \
	\
	EntityComponent_movement_moveResult lastMoveResult; \
	bool canExitRoom;

#define EntityComponent_movement_vtable(self_type) \
	GameEntityComponent_vtable(self_type)

stemobject_declare(EntityComponent_movement)

EntityComponent_movement * EntityComponent_movement_create(bool canExitRoom);
bool EntityComponent_movement_init(EntityComponent_movement * self, bool canExitRoom);
void EntityComponent_movement_dispose(EntityComponent_movement * self);
void EntityComponent_movement_initCopy(EntityComponent_movement * self, compat_type(GameEntityComponent *) original);
void EntityComponent_movement_update(EntityComponent_movement * self, struct GameEntity * entity);

#endif
