pokeplatinum/include/screen_scroll_manager.h
2024-07-06 14:40:34 -07:00

41 lines
1.7 KiB
C

#ifndef POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
#define POKEPLATINUM_SCREEN_SCROLL_MANAGER_H
#include "constants/heap.h"
#include "sys_task_manager.h"
// #include "buffer_manager.h"
#define SCREEN_SCROLL_MANAGER_BUFFER_SIZE 192
#define SCREEN_SCROLL_MANAGER_SCALING_FACTOR 100
#define SCREEN_SCROLL_MANAGER_MAX_SCROLL (SCREEN_SCROLL_MANAGER_BUFFER_SIZE * SCREEN_SCROLL_MANAGER_SCALING_FACTOR)
struct BufferManager;
typedef struct ScreenScrollManager {
u32 buffer1[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u32 buffer2[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
struct BufferManager *bufferManager;
SysTask *scrollTask;
BOOL unused;
s16 sineTable[SCREEN_SCROLL_MANAGER_BUFFER_SIZE];
u8 start;
u8 end;
u32 offsetRegisterAddr;
u32 initValue;
s16 scrollPos;
s16 scrollSpeed;
} ScreenScrollManager;
ScreenScrollManager *ScreenScrollManager_New(enum HeapId heapID);
void ScreenScrollManager_ScrollX(ScreenScrollManager *screenScrollMgr, u8 start, u8 end, u16 angleIncrement, fx32 amplitude, s16 speed, u32 bg, u32 initValue, u32 priority);
void ScreenScrollManager_ScrollY(ScreenScrollManager *screenScrollMgr, u8 start, u8 end, u16 angleIncrement, fx32 amplitude, s16 speed, u32 bg, u32 initValue, u32 priority);
void ScreenScrollManager_Stop(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_Delete(ScreenScrollManager *screenScrollMgr);
void *ScreenScrollManager_GetWriteBuffer(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_SwapBuffers(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_RestartDMA(ScreenScrollManager *screenScrollMgr);
void ScreenScrollManager_CreateSineTable(s16 *dest, u32 entryCount, u16 angleIncrement, fx32 amplitude);
#endif // POKEPLATINUM_SCREEN_SCROLL_MANAGER_H