#ifndef CMAPDOODADDEF_H
#define CMAPDOODADDEF_H

DECLARE_STRUCT(CMapDoodadDef);

#include "tempest/box.h"
#include "tempest/matrix.h"
#include "tempest/vector.h"
#include "tempest/sphere.h"
#include "m2/model.h"
#include "storm/list.h"
#include "map/CMapArea.h"

typedef struct CMapDoodadDefMapChunkLink CMapDoodadDefMapChunkLink;
STORM_TS_LIST(CMapDoodadDefMapChunkLink);
struct CMapDoodadDefMapChunkLink
{
    uint32_t objectIndex; //0x00
    CMapDoodadDef* owner; //0x04
    CMapBaseObj* ref; //0x08 //could be CMapChunk* or CMapObjDefGroup*
    TSLink_CMapDoodadDefMapChunkLink refLink; //0x0C - 0x14
    TSLink_CMapDoodadDefMapChunkLink ownerLink; //0x14 - 0x1C
};

struct CMapDoodadDef
{
    void** vtable; //0x00
    int32_t objectIndex; //0x04
    uint16_t type; //0x08
    uint16_t refCount; //0x0A
    int32_t unk_C; //0x0C
    CMapDoodadDef* prev; //0x10
    CMapDoodadDef* next; //0x14
    
    TSExplicitList_CMapDoodadDefMapChunkLink linkList;
    
    //CMapStaticEntity fields
    int32_t unk_024; //0x24
    uint32_t unkFlags_28; //0x28
    int32_t unkCounter; //0x2C    
    float unk_030; //0x30
    CM2Model* model;
    CAaSphere sphere;
    CAaBox bboxStaticEntity;
    C3Vector vec2;    
    C3Vector position;
    float scale; //0x78    
    int32_t unk_07C; //0x7C
    int32_t unk_080; //0x80    
    CImVector m2AmbietColor; //0x84    
    CImVector m2DiffuseColor; //0x88
    float unk_08C; //0x8C
    //end
    
    //CMapDoodadDef fields
    uint32_t unkFlags_090; //0x90    
    void* unk_094; //0x94
    void* unk_098; //0x98
    void* prevMapDoodadDef_09C; //0x9C
    void* nextMapDoodadDef_0A0; //0xA0    
    int32_t unk_0A4; //0xA4
    int32_t unk_0A8; //0xA8
    int32_t unk_0AC; //0xAC
    int32_t unk_0B0; //0xB0
    int32_t unk_0B4; //0xB4
    int32_t unk_0B8; //0xB8
    int32_t unk_0BC; //0xBC    
	CAaBox bboxDoodadDef;
	C44Matrix mat;	
    C44Matrix identity;	
    int32_t unk_158; //0x158 sound
    int32_t unk_15C; //0x15C
    int32_t unk_160; //0x160
    int32_t unk_164; //0x164
    int32_t unk_168; //0x168
    int32_t unk_16C; //0x16C
    //end
};

#endif