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

#include "PROJECT_NAME/EntityDestructibleTile.h"
#include "PROJECT_NAME/EntityPlayer.h"
#include "PROJECT_NAME/EntityPushBlock.h"
#include "PROJECT_NAME/EntityToken.h"
#include "PROJECT_NAME/EntityWallCrawler.h"
#include "PROJECT_NAME/GameEntities.h"
#include "PROJECT_NAME/GameEntity.h"

GameEntityTypeID getEntityTypeFromVtable(compat_type(GameEntity *) entityUntyped) {
	GameEntity * entity = entityUntyped;
#define DEFINE_ENTITY(data_id, entity_class) \
	if (entity->vtable == (struct GameEntity_vtableStruct *) &entity_class##_class) { \
		return data_id; \
	}
#include "GameEntity_list.h"
#undef DEFINE_ENTITY
	return GameEntityType_unknown;
}

struct GameEntity_vtableStruct * getVtableFromEntityType(GameEntityTypeID typeID) {
#define DEFINE_ENTITY(data_id, entity_class) \
	if (typeID == data_id) { \
		return (struct GameEntity_vtableStruct *) &entity_class##_class; \
	}
#include "GameEntity_list.h"
#undef DEFINE_ENTITY
	return NULL;
}
