// Copyright (c) 2023 Alex Diener. All rights reserved. #include "gamemath/Vector2i.h" #include "PROJECT_NAME/EntityComponent_position.h" #define stemobject_implementation EntityComponent_position stemobject_vtable_begin(); stemobject_vtable_entry(dispose); stemobject_vtable_entry(initCopy); stemobject_vtable_entry(update); stemobject_vtable_entry(moveTo); stemobject_vtable_entry(teleportTo); stemobject_vtable_end(); bool EntityComponent_position_init(EntityComponent_position * self, Vector2i position) { call_super(init, self); self->position = self->lastPosition = position; self->lastBumpDirection = VECTOR2i_ZERO; return true; } void EntityComponent_position_dispose(EntityComponent_position * self) { call_super_virtual(dispose, self); } void EntityComponent_position_initCopy(EntityComponent_position * self, compat_type(GameEntityComponent *) originalUntyped) { call_super_virtual(initCopy, self, originalUntyped); EntityComponent_position * original = originalUntyped; self->position = original->position; self->lastPosition = original->lastPosition; self->lastBumpDirection = original->lastBumpDirection; } void EntityComponent_position_update(EntityComponent_position * self, struct GameEntity * entity) { self->lastPosition = self->position; self->lastBumpDirection = VECTOR2i_ZERO; } void EntityComponent_position_moveTo(EntityComponent_position * self, Vector2i newPosition) { self->position = newPosition; } void EntityComponent_position_teleportTo(EntityComponent_position * self, Vector2i newPosition) { self->position = self->lastPosition = newPosition; }