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

#include "PROJECT_NAME/EntityComponent_facing.h"
#include "PROJECT_NAME/EntityComponent_facingSteering.h"
#include "PROJECT_NAME/GameEntity.h"
#include "PROJECT_NAME/Utilities.h"
#include <assert.h>

#define stemobject_implementation EntityComponent_facingSteering

stemobject_vtable_begin();
stemobject_vtable_entry(dispose);
stemobject_vtable_entry(getMoveVector);
stemobject_vtable_end();

EntityComponent_facingSteering * EntityComponent_facingSteering_create(void) {
	stemobject_create_implementation(init)
}

bool EntityComponent_facingSteering_init(EntityComponent_facingSteering * self) {
	call_super(init, self);
	return true;
}

void EntityComponent_facingSteering_dispose(EntityComponent_facingSteering * self) {
	call_super_virtual(dispose, self);
}

Vector2i EntityComponent_facingSteering_getMoveVector(EntityComponent_facingSteering * self, struct GameEntity * entity) {
	EntityComponent_facing * facingComponent = call_virtual(getComponent, entity, COMPONENT_FACING);
	if (facingComponent != NULL) {
		return facingToVector2i(facingComponent->facing);
	}
	return VECTOR2i_ZERO;
}
