#ifndef FOX_MAP_H
#define FOX_MAP_H

#include "PR/ultratypes.h"
#include "sf64level.h"

typedef struct {
    /* 0x0 */ f32 angle;
    /* 0x4 */ f32 x;
    /* 0x8 */ f32 y;
    /* 0xC */ f32 scale;
} ObjPosition;

typedef enum {
    /* 0 */ PL_PATH_BLU,
    /* 1 */ PL_PATH_YLW,
    /* 2 */ PL_PATH_RED,
    /* 3 */ PL_WARP_YLW,
    /* 4 */ PL_WARP_RED,
} PathType;

typedef struct {
    /* 0x00 */ PathType type;
    /* 0x04 */ PlanetId start;
    /* 0x08 */ PlanetId end;
    /* 0x0C */ s32 length;
    /* 0x10 */ char pad10[0x4];
    /* 0x14 */ s32 unk_14;
    /* 0x18 */ s32 alpha;
} PlanetPath; // size = 0x1C

typedef enum {
    /* 0 */ PL_ANIM_STATIC,
    /* 1 */ PL_ANIM_BILLBOARD,
    /* 2 */ PL_ANIM_ROTATE_Y,
    /* 3 */ PL_ANIM_ROTATE_Z,
    /* 4 */ PL_ANIM_SPIN,
} PlanetAnim;

typedef struct {
    /* 0x0 */ f32 radius;
    /* 0x4 */ f32 incl;
    /* 0x8 */ f32 tilt;
} OrbitParams;

typedef struct {
    /* 0x00 */ PlanetId id;
    /* 0x04 */ OrbitParams orbit;
    /* 0x10 */ Vec3f pos;
    /* 0x1C */ f32 longitude;
    /* 0x20 */ f32 scale;
    /* 0x24 */ s32 alpha;
    /* 0x28 */ PlanetAnim anim;
    /* 0x2C */ PlanetId dest1;
    /* 0x30 */ PlanetId dest2;
    /* 0x34 */ PlanetId warp;
} Planet; // size = 0x38

typedef struct {
    /* 0x0 */ u8* texture;
    /* 0x4 */ s32 width;
    /* 0x8 */ s32 height;
    /* 0xC */ f32 xPos;
} TitleCard; // size = 0x10

#endif
