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

#ifndef __EntityDestructibleTile_H__
#define __EntityDestructibleTile_H__

typedef struct EntityDestructibleTile EntityDestructibleTile;
#define EntityDestructibleTile_superclass GameEntity

#include "PROJECT_NAME/EntityComponent_collidable.h"
#include "PROJECT_NAME/EntityComponent_position.h"
#include "PROJECT_NAME/EntityComponent_sprite.h"
#include "PROJECT_NAME/GameEntity.h"

#define EntityDestructibleTile_ivars \
	GameEntity_ivars \
	\
	bool destroyed; \
	EntityComponent_collidable collidableComponent; \
	EntityComponent_position positionComponent; \
	EntityComponent_sprite spriteComponent;

#define EntityDestructibleTile_vtable(self_type) \
	GameEntity_vtable(self_type)

stemobject_declare(EntityDestructibleTile)

EntityDestructibleTile * EntityDestructibleTile_create(Vector2i position, bool destroyed, struct RoomState * roomState);
bool EntityDestructibleTile_init(EntityDestructibleTile * self, Vector2i position, bool destroyed, struct RoomState * roomState);
EntityDestructibleTile * EntityDestructibleTile_createWithEncodedState(struct memreadContext * memreadContext, struct RoomState * roomState);
void EntityDestructibleTile_initWithEncodedState(EntityDestructibleTile * self, struct memreadContext * memreadContext, struct RoomState * roomState);
EntityDestructibleTile * EntityDestructibleTile_copy(EntityDestructibleTile * self, struct RoomState * roomState);
void EntityDestructibleTile_initCopy(EntityDestructibleTile * self, compat_type(EntityDestructibleTile *) original, struct RoomState * roomState);
void EntityDestructibleTile_dispose(EntityDestructibleTile * self);
compat_type(GameEntityComponent *) EntityDestructibleTile_getComponent(EntityDestructibleTile * self, ComponentType type);
bool EntityDestructibleTile_isEqual(EntityDestructibleTile * self, EntityDestructibleTile * compare);
void EntityDestructibleTile_enumerateProperties(EntityDestructibleTile * self, bool transient, GameEntity_enumeratePropertiesCallback callback, void * context);
void EntityDestructibleTile_undoActionPerformed(EntityDestructibleTile * self);

#endif
