mirror of
https://github.com/pret/pokediamond.git
synced 2024-10-06 18:53:34 +00:00
96 lines
3.3 KiB
C
96 lines
3.3 KiB
C
#ifndef POKEDIAMOND_CAMERA_H
|
|
#define POKEDIAMOND_CAMERA_H
|
|
|
|
#include "global.h"
|
|
|
|
#include "fx.h"
|
|
#include "heap.h"
|
|
|
|
#define CAMERA_UPDATE_ENABLE_X 1
|
|
#define CAMERA_UPDATE_ENABLE_Y 2
|
|
#define CAMERA_UPDATE_ENABLE_Z 4
|
|
|
|
#define CAMERA_PERSPECTIVE_TYPE_PERSPECTIVE 0
|
|
#define CAMERA_PERSPECTIVE_TYPE_ORTHOGRAPHIC 1
|
|
|
|
typedef struct CameraHistory {
|
|
s32 count;
|
|
s32 readIdx;
|
|
s32 writeIdx;
|
|
s32 writeIdxInit;
|
|
BOOL overrideEnabled;
|
|
BOOL enableUpdateX;
|
|
BOOL enableUpdateY;
|
|
BOOL enableUpdateZ;
|
|
VecFx32 *vecs;
|
|
} CameraHistory;
|
|
|
|
typedef struct CameraAngle {
|
|
u16 x;
|
|
u16 y;
|
|
u16 z;
|
|
u16 unused;
|
|
} CameraAngle;
|
|
|
|
typedef struct CameraPerspective {
|
|
fx32 fovySin;
|
|
fx32 fovyCos;
|
|
fx32 aspect;
|
|
fx32 near;
|
|
fx32 far;
|
|
} CameraPerspective;
|
|
|
|
typedef struct CameraLookAt {
|
|
VecFx32 camPos;
|
|
VecFx32 camTarget;
|
|
VecFx32 camUp;
|
|
} CameraLookAt;
|
|
|
|
typedef struct Camera {
|
|
CameraPerspective perspective;
|
|
CameraLookAt lookAt;
|
|
fx32 distance;
|
|
CameraAngle angle;
|
|
u8 perspectiveType;
|
|
u16 perspectiveAngle;
|
|
VecFx32 lastTarget;
|
|
const VecFx32 *curTarget;
|
|
BOOL enableOffsetX;
|
|
BOOL enableOffsetY;
|
|
BOOL enableOffsetZ;
|
|
CameraHistory *history;
|
|
} Camera;
|
|
|
|
void Camera_History_New(s32 count, s32 initialWriteIdx, s32 updateEnableFlags, HeapID heapId, Camera *camera);
|
|
void Camera_History_Delete(Camera *camera);
|
|
Camera *Camera_New(HeapID heapId);
|
|
void Camera_Delete(Camera *camera);
|
|
void Camera_Copy(Camera *src, Camera *dest);
|
|
void Camera_SetStaticPtr(Camera *camera);
|
|
void Camera_UnsetStaticPtr(void);
|
|
void Camera_PushLookAtToNNSGlb(void);
|
|
void Camera_SetLookAtCamUp(VecFx32 *camUp, Camera *camera);
|
|
void Camera_SetFixedTarget(VecFx32 *target, Camera *camera);
|
|
void Camera_ClearFixedTarget(Camera *camera);
|
|
void Camera_SetPerspectiveClippingPlane(fx32 near, fx32 far, Camera *camera);
|
|
void Camera_Init_FromTargetDistanceAndAngle(VecFx32 *target, fx32 distance, CameraAngle *angle, u16 perspectiveAngle, u8 perspectiveType, BOOL setReference, Camera *camera);
|
|
void Camera_Init_FromPosDistanceAndAngle(VecFx32 *pos, fx32 distance, CameraAngle *angle, u16 perspectiveAngle, u8 perspectiveType, Camera *camera);
|
|
void Camera_Init_FromTargetAndPos(const VecFx32 *target, const VecFx32 *pos, u16 perspectiveAngle, u8 perspectiveType, BOOL setReference, Camera *camera);
|
|
void Camera_ApplyPerspectiveType(u8 perspectiveType, Camera *camera);
|
|
void Camera_SetPerspectiveAngle(u16 perspectiveAngle, Camera *camera);
|
|
void Camera_AdjustPerspectiveAngle(u16 rotation, Camera *camera);
|
|
void Camera_OffsetLookAtPosAndTarget(const VecFx32 *delta, Camera *camera);
|
|
void Camera_SetAnglePos(const CameraAngle *angle, Camera *camera);
|
|
void Camera_AdjustAngleTarget(const CameraAngle *delta, Camera *camera);
|
|
void Camera_SetDistance(fx32 distance, Camera *camera);
|
|
void Camera_SetLookAtTargetAndRecalcPos(const VecFx32 *target, Camera *camera);
|
|
u16 Camera_GetPerspectiveAngle(Camera *camera);
|
|
fx32 Camera_GetDistance(Camera *camera);
|
|
void Camera_GetAngle(CameraAngle *dest, Camera *camera);
|
|
void Camera_GetLookAtCamTarget(VecFx32 *dest, const Camera *camera);
|
|
void Camera_GetLookAtCamPos(VecFx32 *dest, const Camera *camera);
|
|
void Camera_SetLookAtCamTarget(const VecFx32 *target, Camera *camera);
|
|
void Camera_SetLookAtCamPos(const VecFx32 *pos, Camera *camera);
|
|
|
|
#endif // POKEDIAMOND_CAMERA_H
|