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

#include "PROJECT_NAME/EntityComponent_sprite.h"
#include "PROJECT_NAME/SharedDefinitions.h"

#define stemobject_implementation EntityComponent_sprite

stemobject_vtable_begin();
stemobject_vtable_entry(dispose);
stemobject_vtable_entry(initCopy);
stemobject_vtable_entry(getAnimationTime);
stemobject_vtable_end();

bool EntityComponent_sprite_init(EntityComponent_sprite * self, SpriteID spriteID, int drawLayer, int drawPriority) {
	call_super(init, self);
	self->spriteID = spriteID;
	self->drawLayer = drawLayer;
	self->drawPriority = drawPriority;
	return true;
}

void EntityComponent_sprite_dispose(EntityComponent_sprite * self) {
	call_super_virtual(dispose, self);
}

void EntityComponent_sprite_initCopy(EntityComponent_sprite * self, compat_type(GameEntityComponent *) originalUntyped) {
	call_super_virtual(initCopy, self, originalUntyped);
	EntityComponent_sprite * original = originalUntyped;
	self->spriteID = original->spriteID;
	self->drawLayer = original->drawLayer;
	self->drawPriority = original->drawPriority;
}

unsigned int EntityComponent_sprite_getAnimationTime(EntityComponent_sprite * self, double referenceTime) {
	return referenceTime * ANIMATION_FRAME_RATE;
}
