X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=entity.h;h=25fd63ff55a85134ea295c5ed4c2b95b92a32b52;hb=1b522daa02f28128498b04def4d60b63e590d1f3;hp=5b0d4a73bb82842d63959434e4e86eb882b8cf55;hpb=5f01e7ab4aad052faad262b55404819dac3d25ce;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/entity.h b/entity.h index 5b0d4a7..25fd63f 100644 --- a/entity.h +++ b/entity.h @@ -17,17 +17,36 @@ typedef struct volume_trigger volume_trigger; typedef struct ent_volume ent_volume; typedef struct ent_audio ent_audio; typedef struct ent_index ent_index; +typedef struct ent_marker ent_marker; +typedef struct ent_font ent_font; +typedef struct ent_font_variant ent_font_variant; +typedef struct ent_glyph ent_glyph; enum entity_alias{ - k_ent_gate = 1, - k_ent_spawn = 2, - k_ent_route_node = 3, - k_ent_route = 4, - k_ent_water = 5, - k_ent_volume = 6, - k_ent_audio = 7 + k_ent_none = 0, + k_ent_gate = 1, + k_ent_spawn = 2, + k_ent_route_node = 3, + k_ent_route = 4, + k_ent_water = 5, + k_ent_volume = 6, + k_ent_audio = 7, + k_ent_marker = 8, + k_ent_font = 9, + k_ent_font_variant= 10, + k_ent_traffic = 11 }; +static u32 mdl_entity_id_type( u32 entity_id ) +{ + return (entity_id & 0xffff0000) >> 16; +} + +static u32 mdl_entity_id_id( u32 entity_id ) +{ + return entity_id & 0x0000ffff; +} + struct ent_index{ u32 type, index; @@ -64,15 +83,14 @@ struct ent_light{ enum gate_type{ k_gate_type_unlinked = 0, k_gate_type_teleport = 1, - k_gate_type_nonlocal = 2 + k_gate_type_nonlocal_unlinked = 2, + k_gate_type_nonlocel = 3 }; struct ent_gate{ u32 type, target; - /* TODO: World index */ - v3f dimensions, co[2]; @@ -85,12 +103,13 @@ struct ent_gate{ u32 timing_version; struct{ - u8 ref_count, ref_total; + u8 ref_count; }; }; double timing_time; u16 routes[4]; /* routes that pass through this gate */ + u8 route_count; }; struct ent_route_node{ @@ -122,11 +141,13 @@ struct ent_route{ v4f colour; /* runtime */ - u32 active_checkpoint; + u16 active_checkpoint, + valid_checkpoints; + float factive; m4x3f board_transform; mdl_submesh sm; - double latest_pass; + double timing_base; }; struct ent_water{ @@ -182,6 +203,25 @@ struct ent_audio{ max_channels; }; +struct ent_marker{ + mdl_transform transform; + u32 pstr_alias; +}; + +VG_STATIC ent_marker *ent_find_marker( mdl_context *mdl, + mdl_array_ptr *arr, const char *alias ) +{ + for( u32 i=0; ipstr_alias ), alias ) ){ + return marker; + } + } + + return NULL; +} + enum channel_behaviour{ k_channel_behaviour_unlimited = 0, k_channel_behaviour_discard_if_full = 1, @@ -194,4 +234,24 @@ enum probability_curve{ k_probability_curve_wildlife_night = 2 }; +struct ent_font{ + u32 alias, + variant_start, + variant_count, + glyph_start, + glyph_count, + glyph_utf32_base; +}; + +struct ent_font_variant{ + u32 name, + material_id; +}; + +struct ent_glyph{ + v2f size; + u32 indice_start, + indice_count; +}; + #endif /* ENTITY_H */