pokeplatinum/include/camera.h
2024-06-21 07:38:20 +02:00

91 lines
3.2 KiB
C

#ifndef POKEPLATINUM_CAMERA_H
#define POKEPLATINUM_CAMERA_H
#include "overlay115/camera_angle.h"
#include "constants/heap.h"
#include <nitro/fx/fx.h>
enum CameraProjection {
CAMERA_PROJECTION_PERSPECTIVE = 0,
CAMERA_PROJECTION_ORTHOGRAPHIC,
};
typedef struct {
VecFx32 position;
VecFx32 target;
VecFx32 up;
} CameraLookAt;
typedef struct {
fx32 sinFovY;
fx32 cosFovY;
fx32 aspectRatio;
fx32 nearClip;
fx32 farClip;
} CameraPerspectiveProjection;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
int unk_0C;
BOOL unk_10;
BOOL unk_14;
BOOL unk_18;
BOOL unk_1C;
VecFx32 * unk_20;
} UnkStruct_02020304;
typedef struct Camera {
CameraPerspectiveProjection perspective;
CameraLookAt lookAt;
fx32 distance;
CameraAngle angle;
u8 projection;
u16 fovY;
VecFx32 prevTargetPos;
const VecFx32 * targetPos;
BOOL trackTargetX;
BOOL trackTargetY;
BOOL trackTargetZ;
UnkStruct_02020304 * unk_64;
} Camera;
void sub_02020304(const int param0, const int param1, const int param2, const int param3, Camera *camera);
void sub_02020390(Camera *camera);
Camera *Camera_Alloc(const enum HeapId heapID);
void Camera_Delete(Camera *camera);
void Camera_Copy(Camera const *src, Camera *dst);
void Camera_SetAsActive(Camera *camera);
void Camera_ClearActive(void);
void Camera_ComputeViewMatrix();
void sub_0202049C(void);
void Camera_SetUp (const VecFx32 *up, Camera *camera);
void Camera_TrackTarget(const VecFx32 *target, Camera *camera);
void Camera_ReleaseTarget(Camera *camera);
void Camera_SetClipping(const fx32 nearClip, const fx32 farClip, Camera *camera);
void Camera_InitWithTarget(const VecFx32 * param0, const fx32 param1, const CameraAngle * cameraAngle, const u16 param3, const u8 param4, const BOOL param5, Camera *camera);
void Camera_InitWithPosition(const VecFx32 * param0, const fx32 param1, const CameraAngle * cameraAngle, const u16 param3, const u8 param4, Camera *camera);
void Camera_InitWithTargetAndPosition(const VecFx32 * param0, const VecFx32 * param1, const u16 param2, const u8 param3, const BOOL param4, Camera *camera);
void Camera_ComputeProjectionMatrix(const u8 projection, Camera *camera);
void Camera_SetFOV(const u16 fovY, Camera *camera);
void Camera_IncreaseFOV(const u16 amount, Camera *camera);
void Camera_Move(const VecFx32 *delta, Camera *camera);
void sub_020209B0(const CameraAngle * cameraAngle, Camera *camera);
void Camera_SetAngle(const CameraAngle * cameraAngle, Camera *camera);
void sub_020209F8(const CameraAngle * cameraAngle, Camera *camera);
void sub_02020A24(const CameraAngle * cameraAngle, Camera *camera);
void Camera_SetDistance(const fx32 distance, Camera *camera);
void sub_02020A5C(const VecFx32 * param0, Camera *camera);
void Camera_IncreaseDistance(const fx32 amount, Camera *camera);
u16 Camera_GetFOV(Camera const * param0);
fx32 Camera_GetDistance(Camera const * param0);
CameraAngle sub_02020A94(Camera const * param0);
VecFx32 sub_02020AAC(Camera const * param0);
VecFx32 sub_02020ABC(Camera const * param0);
void sub_02020ACC(const VecFx32 * param0, Camera *camera);
void sub_02020ADC(const VecFx32 * param0, Camera *camera);
#endif // POKEPLATINUM_CAMERA_H