4coder/test_data/lots_of_files/cd_asset_manifest.h

98 lines
1.9 KiB
C

/*
Asset manifest data format definition
-Allen
06.06.2016
*/
// TOP
#ifndef CD_ASSET_MANIFEST_H
#define CD_ASSET_MANIFEST_H
#define ASSET_MANIFEST_VERSION 1
#define ASSET_MAX_NAME 32
// IMPORTANT(allen):
// If Asset_Node or Asset_Manifest are edited at all it will invalidate
// all CDmanifest files.
//
// If Asset_Flag or Asset_Type are rearranged it will invalidate all
// CDmanifest files.
//
// If we _have_ to invalidate CDmanifest files we will have to write a
// one time convert which is time consuming, so usually finding a method
// other that does not invalidate our data format will be best.
//
// If this turns into a big issue, I'll look into making a way to write
// these one time converts more quickly or to support a more flexible
// data format.
//
// Note we can insert enumeration values in Asset_Type right above
// AssetType_TypeCount safely, as that value is just meant to count how many
// asset types we have and should not actually be stored in CDmanifest.
//
struct Asset_Node{
rptr32 first_child;
rptr32 parent;
rptr32 next_sibling;
rptr32 prev_sibling;
char name[ASSET_MAX_NAME];
i32 image_id;
i32 type;
u64 flags;
char expansion_space[32];
};
enum Asset_Flag{
AssetFlag_None = 0x0,
};
enum Asset_Type{
AssetType_GenericFolder,
AssetType_Image,
AssetType_ObstacleType,
// this must be at the end
AssetType_TypeCount
};
struct Asset_Manifest{
Relative_Partition part;
i32 version;
Asset_Node free_sentinel;
rptr32 asset_nodes;
i32 asset_node_count;
i32 asset_free_count;
char expansion_space[1008];
};
struct Manifest_Setup{
rptr32 parents[32];
i32 count;
};
struct Asset_Walker_Entry{
rptr32 first, current;
i32 level;
};
struct Asset_Walker{
Asset_Walker_Entry stack[32];
i32 top;
i32 current_level;
};
#endif
// BOTTOM