+++ /dev/null
-#ifndef ENTITY_H
-#define ENTITY_H
-
-#include "model.h"
-
-typedef struct ent_spawn ent_spawn;
-typedef struct ent_light ent_light;
-typedef struct ent_gate ent_gate;
-typedef struct ent_route_node ent_route_node;
-typedef struct ent_path_index ent_path_index;
-typedef struct ent_checkpoint ent_checkpoint;
-typedef struct ent_route ent_route;
-typedef struct ent_water ent_water;
-typedef struct ent_audio_clip ent_audio_clip;
-typedef struct volume_particles volume_particles;
-typedef struct volume_trigger volume_trigger;
-typedef struct ent_volume ent_volume;
-typedef struct ent_audio ent_audio;
-typedef struct ent_marker ent_marker;
-typedef struct ent_traffic ent_traffic;
-typedef struct ent_font ent_font;
-typedef struct ent_font_variant ent_font_variant;
-typedef struct ent_glyph ent_glyph;
-typedef struct ent_skateshop ent_skateshop;
-typedef struct ent_camera ent_camera;
-typedef struct ent_swspreview ent_swspreview;
-typedef struct ent_worldinfo ent_worldinfo;
-typedef struct ent_ccmd ent_ccmd;
-typedef struct ent_objective ent_objective;
-typedef struct ent_challenge ent_challenge;
-typedef struct ent_relay ent_relay;
-typedef struct ent_cubemap ent_cubemap;
-typedef struct ent_miniworld ent_miniworld;
-typedef struct ent_prop ent_prop;
-typedef struct ent_region ent_region;
-
-enum entity_alias{
- 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,
- k_ent_skateshop = 12,
- k_ent_camera = 13,
- k_ent_swspreview = 14,
- k_ent_menuitem = 15,
- k_ent_worldinfo = 16,
- k_ent_ccmd = 17,
- k_ent_objective = 18,
- k_ent_challenge = 19,
- k_ent_relay = 20,
- k_ent_cubemap = 21,
- k_ent_miniworld = 22,
- k_ent_prop = 23,
- k_ent_list = 24,
- k_ent_region = 25
-};
-
-static u32 mdl_entity_id_type( u32 entity_id ){
- return (entity_id & 0x0fff0000) >> 16;
-}
-
-static u32 mdl_entity_id_id( u32 entity_id ){
- return entity_id & 0x0000ffff;
-}
-
-static u32 mdl_entity_id( u32 type, u32 index ){
- return (type & 0xfffff)<<16 | (index & 0xfffff);
-}
-
-enum entity_function{
- k_ent_function_trigger,
- k_ent_function_particle_spawn,
- k_ent_function_trigger_leave
-};
-
-struct ent_spawn{
- mdl_transform transform;
- u32 pstr_name;
-};
-
-enum light_type{
- k_light_type_point = 0,
- k_light_type_spot = 1
-};
-
-struct ent_light{
- mdl_transform transform;
- u32 daytime,
- type;
-
- v4f colour;
- float angle,
- range;
-
- m4x3f inverse_world;
- v2f angle_sin_cos;
-};
-
-/* v101 */
-#if 0
-enum gate_type{
- k_gate_type_unlinked = 0,
- k_gate_type_teleport = 1,
- k_gate_type_nonlocal_unlinked = 2,
- k_gate_type_nonlocel = 3
-};
-#endif
-
-/* v102+ */
-enum ent_gate_flag{
- k_ent_gate_linked = 0x1, /* this is a working portal */
- k_ent_gate_nonlocal = 0x2, /* use the key string to link this portal.
- NOTE: if set, it adds the flip flag. */
- k_ent_gate_flip = 0x4, /* flip direction 180* for exiting portal */
- k_ent_gate_custom_mesh = 0x8, /* use a custom submesh instead of default */
- k_ent_gate_locked = 0x10,/* has to be unlocked to be useful */
-
- k_ent_gate_clean_pass = 0x20,/* player didn't rewind while getting here */
-};
-
-struct ent_gate{
- u32 flags,
- target,
- key;
-
- v3f dimensions,
- co[2];
-
- v4f q[2];
-
- /* runtime */
- m4x3f to_world, transport;
-
- union{
- u32 timing_version;
-
- struct{
- u8 ref_count;
- };
- };
-
- double timing_time;
- u16 routes[4]; /* routes that pass through this gate */
- u8 route_count;
-
- /* v102+ */
- u32 submesh_start, submesh_count;
-};
-
-struct ent_route_node{
- v3f co;
- u8 ref_count, ref_total;
-};
-
-struct ent_path_index{
- u16 index;
-};
-
-struct ent_checkpoint{
- u16 gate_index,
- path_start,
- path_count;
-
- /* EXTENSION */
- f32 best_time;
-};
-
-enum ent_route_flag {
- k_ent_route_flag_achieve_silver = 0x1,
- k_ent_route_flag_achieve_gold = 0x2,
-
- k_ent_route_flag_out_of_zone = 0x10
-};
-
-struct ent_route{
- union{
- mdl_transform transform;
- u32 official_track_id; /* TODO: remove this */
- }
- anon;
-
- u32 pstr_name;
- u16 checkpoints_start,
- checkpoints_count;
-
- v4f colour;
-
- /* runtime */
- u16 active_checkpoint,
- valid_checkpoints;
-
- f32 factive;
- m4x3f board_transform;
- mdl_submesh sm;
- f64 timing_base;
-
- u32 id_camera; /* v103+ */
-
- /* v104+, but always accessible */
- u32 flags;
- f64 best_laptime;
- f32 ui_stopper, ui_residual;
-
- ui_px ui_first_block_width, ui_residual_block_w;
-};
-
-struct ent_water{
- mdl_transform transform;
- float max_dist;
- u32 reserved0, reserved1;
-};
-
-struct ent_audio_clip{
- union{
- mdl_file file;
- audio_clip clip;
- }_;
-
- float probability;
-};
-
-struct volume_particles{
- u32 blank, blank2;
-};
-
-struct volume_trigger{
- u32 event, event_leave;
-};
-
-enum ent_volume_flag {
- k_ent_volume_flag_particles = 0x1,
- k_ent_volume_flag_disabled = 0x2
-};
-
-struct ent_volume{
- mdl_transform transform;
- m4x3f to_world, to_local;
- u32 flags;
-
- u32 target;
- union{
- volume_trigger trigger;
- volume_particles particles;
- };
-};
-
-struct ent_audio{
- mdl_transform transform;
- u32 flags,
- clip_start,
- clip_count;
- float volume, crossfade;
- u32 behaviour,
- group,
- probability_curve,
- max_channels;
-};
-
-struct ent_marker{
- mdl_transform transform;
- u32 pstr_alias;
-};
-
-enum skateshop_type{
- k_skateshop_type_boardshop = 0,
- k_skateshop_type_charshop = 1,
- k_skateshop_type_worldshop = 2,
- k_skateshop_type_DELETED = 3,
- k_skateshop_type_server = 4
-};
-
-struct ent_skateshop{
- mdl_transform transform;
- u32 type, id_camera;
-
- union{
- struct{
- u32 id_display,
- id_info,
- id_rack;
- }
- boards;
-
- struct{
- u32 id_display,
- id_info;
- }
- character;
-
- struct{
- u32 id_display,
- id_info;
- }
- worlds;
-
- struct{
- u32 id_lever;
- }
- server;
- };
-};
-
-struct ent_swspreview{
- u32 id_camera, id_display, id_display1;
-};
-
-struct ent_traffic{
- mdl_transform transform;
- u32 submesh_start,
- submesh_count,
- start_node,
- node_count;
- float speed,
- t;
- u32 index; /* into the path */
-};
-
-struct ent_camera{
- mdl_transform transform;
- float fov;
-};
-
-enum ent_menuitem_type{
- k_ent_menuitem_type_visual = 0,
- k_ent_menuitem_type_event_button = 1,
- k_ent_menuitem_type_page_button = 2,
- k_ent_menuitem_type_toggle = 3,
- k_ent_menuitem_type_slider = 4,
- k_ent_menuitem_type_page = 5,
- k_ent_menuitem_type_binding = 6,
- k_ent_menuitem_type_visual_nocol = 7,
- k_ent_menuitem_type_disabled = 90
-};
-
-enum ent_menuitem_stack_behaviour{
- k_ent_menuitem_stack_append = 0,
- k_ent_menuitem_stack_replace = 1
-};
-
-typedef struct ent_menuitem ent_menuitem;
-struct ent_menuitem{
- u32 type, groups,
- id_links[4]; /* ent_menuitem */
- f32 factive, fvisible;
-
- mdl_transform transform;
- u32 submesh_start, submesh_count;
-
- union{ u64 _u64; /* force storage for 64bit pointers */
- i32 *pi32;
- f32 *pf32;
- void *pvoid;
- };
-
- union{
- struct{
- u32 pstr_name;
- }
- visual;
-
- struct{
- u32 id_min, /* ent_marker */
- id_max, /* . */
- id_handle, /* ent_menuitem */
- pstr_data;
- }
- slider;
-
- struct{
- u32 pstr,
- stack_behaviour;
- }
- button;
-
- struct{
- u32 id_check, /* ent_menuitem */
- pstr_data;
- v3f offset; /* relative to parent */
- }
- checkmark;
-
- struct{
- u32 pstr_name,
- id_entrypoint, /* ent_menuitem */
- id_viewpoint; /* ent_camera */
- }
- page;
-
- struct{
- u32 pstr_bind,
- font_variant;
- }
- binding;
- };
-};
-
-struct ent_worldinfo{
- u32 pstr_name, pstr_author, pstr_desc;
- f32 timezone;
- u32 pstr_skybox;
-};
-
-static ent_marker *ent_find_marker( mdl_context *mdl,
- mdl_array_ptr *arr, const char *alias )
-{
- for( u32 i=0; i<mdl_arrcount(arr); i++ ){
- ent_marker *marker = mdl_arritm( arr, i );
-
- if( !strcmp( mdl_pstr( mdl, marker->pstr_alias ), alias ) ){
- return marker;
- }
- }
-
- return NULL;
-}
-
-enum channel_behaviour{
- k_channel_behaviour_unlimited = 0,
- k_channel_behaviour_discard_if_full = 1,
- k_channel_behaviour_crossfade_if_full = 2
-};
-
-enum probability_curve{
- k_probability_curve_constant = 0,
- k_probability_curve_wildlife_day = 1,
- 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;
-};
-
-struct ent_ccmd{
- u32 pstr_command;
-};
-
-enum ent_objective_filter{
- k_ent_objective_filter_none = 0x00000000,
- k_ent_objective_filter_trick_shuvit = 0x00000001,
- k_ent_objective_filter_trick_kickflip = 0x00000002,
- k_ent_objective_filter_trick_treflip = 0x00000004,
- k_ent_objective_filter_trick_any =
- k_ent_objective_filter_trick_shuvit|
- k_ent_objective_filter_trick_treflip|
- k_ent_objective_filter_trick_kickflip,
- k_ent_objective_filter_flip_back = 0x00000008,
- k_ent_objective_filter_flip_front = 0x00000010,
- k_ent_objective_filter_flip_any =
- k_ent_objective_filter_flip_back|
- k_ent_objective_filter_flip_front,
- k_ent_objective_filter_grind_truck_any = 0x00000020,
- k_ent_objective_filter_grind_board_any = 0x00000040,
- k_ent_objective_filter_grind_any =
- k_ent_objective_filter_grind_truck_any|
- k_ent_objective_filter_grind_board_any,
- k_ent_objective_filter_footplant = 0x00000080,
- k_ent_objective_filter_passthrough = 0x00000100
-};
-
-enum ent_objective_flag {
- k_ent_objective_hidden = 0x1,
- k_ent_objective_passed = 0x2
-};
-
-struct ent_objective{
- mdl_transform transform;
- u32 submesh_start,
- submesh_count,
- flags,
- id_next,
- filter,filter2,
- id_win,
- win_event;
- f32 time_limit;
-};
-
-enum ent_challenge_flag {
- k_ent_challenge_timelimit = 0x1
-};
-
-struct ent_challenge{
- mdl_transform transform;
- u32 pstr_alias,
- flags,
- target,
- target_event,
- reset,
- reset_event,
- first,
- camera,
- status;
-};
-
-struct ent_relay {
- u32 targets[4][2];
- u32 targets_events[4];
-};
-
-struct ent_cubemap {
- v3f co;
- u32 resolution, live, texture_id,
- framebuffer_id, renderbuffer_id, placeholder[2];
-};
-
-typedef struct ent_call ent_call;
-struct ent_call{
- u32 id, function;
- void *data;
-};
-
-struct ent_miniworld {
- mdl_transform transform;
- u32 pstr_world;
- u32 camera;
- u32 proxy;
-};
-
-struct ent_prop {
- mdl_transform transform;
- u32 submesh_start, submesh_count, flags;
-};
-
-struct ent_region {
- mdl_transform transform;
- u32 submesh_start, submesh_count, pstr_title, flags, zone_volume;
-};
-
-#include "world.h"
-static void entity_call( world_instance *world, ent_call *call );
-
-#endif /* ENTITY_H */