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

#ifndef __EntityComponent_sprite_H__
#define __EntityComponent_sprite_H__

typedef struct EntityComponent_sprite EntityComponent_sprite;
#define EntityComponent_sprite_superclass GameEntityComponent

#include "PROJECT_NAME/GameEntityComponent.h"
#include "tileset/SpriteCollection.h"

#define EntityComponent_sprite_ivars \
	GameEntityComponent_ivars \
	\
	SpriteID spriteID; \
	int drawLayer; \
	int drawPriority;

#define EntityComponent_sprite_vtable(self_type) \
	GameEntityComponent_vtable(self_type) \
	\
	unsigned int (* getAnimationTime)(self_type * self, double referenceTime);

stemobject_declare(EntityComponent_sprite)

bool EntityComponent_sprite_init(EntityComponent_sprite * self, SpriteID spriteID, int drawLayer, int drawPriority);
void EntityComponent_sprite_dispose(EntityComponent_sprite * self);
void EntityComponent_sprite_initCopy(EntityComponent_sprite * self, compat_type(GameEntityComponent *) original);
unsigned int EntityComponent_sprite_getAnimationTime(EntityComponent_sprite * self, double referenceTime);

#endif
