// Copyright (c) 2023 Alex Diener. All rights reserved. #ifndef __RoomTransition_H__ #define __RoomTransition_H__ typedef struct RoomTransition RoomTransition; #define RoomTransition_superclass StemObject #include "gamemath/Interpolation.h" #include "gamemath/Vector2f.h" #include "stemobject/StemObject.h" #include "PROJECT_NAME/RoomVisual.h" #define RoomTransition_ivars \ StemObject_ivars \ \ RoomVisual * oldRoomVisual; \ RoomVisual * newRoomVisual; \ Vector2f offsetFromOldToNew; \ Vector2f oldRoomCameraPosition; \ Vector2f newRoomCameraPosition; \ struct interpolationContext interpolation; \ float speedMultiplier; #define RoomTransition_vtable(self_type) \ StemObject_vtable(self_type) stemobject_declare(RoomTransition) // Takes ownership of oldRoomVisual RoomTransition * RoomTransition_create(RoomVisual * oldRoomVisual, RoomVisual * newRoomVisual, Vector2f offsetFromOldToNew, Vector2f oldRoomCameraPosition, Vector2f newRoomCameraPosition, float interpolationStart); bool RoomTransition_init(RoomTransition * self, RoomVisual * oldRoomVisual, RoomVisual * newRoomVisual, Vector2f offsetFromOldToNew, Vector2f oldRoomCameraPosition, Vector2f newRoomCameraPosition, float interpolationStart); void RoomTransition_dispose(RoomTransition * self); Vector2f RoomTransition_getCameraOffset(RoomTransition * self); Vector2f RoomTransition_getInverseCameraOffset(RoomTransition * self); void RoomTransition_advance(RoomTransition * self, double deltaTime); void RoomTransition_draw(RoomTransition * self, Vector2f offset, VertexIO * vertexIO); bool RoomTransition_allowMovement(RoomTransition * self); bool RoomTransition_isDone(RoomTransition * self); #endif