X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=world.h;h=49d1aaea690849f6fb32bfb3e645901940d9d33d;hb=8d336ea2cde7c596296dbaf0d3ce27a82c6c6cf0;hp=c412a88097cc3bb98ba044f0a08df45c4dc49764;hpb=844527ec68c063d78d4993bd8e4053f9ddc47b78;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/world.h b/world.h index c412a88..49d1aae 100644 --- a/world.h +++ b/world.h @@ -1,11 +1,12 @@ /* - * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved + * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved */ -#ifndef WORLD_H -#define WORLD_H - +#pragma once #include "render.h" +#include "network_msg.h" +#include "addon.h" +#include "scene.h" /* types */ @@ -16,14 +17,29 @@ enum world_geo_type{ k_world_geo_type_water = 2 }; +enum world_purpose{ + k_world_purpose_invalid = -1, + k_world_purpose_hub = 0, + k_world_purpose_client = 1, + k_world_max +}; + +struct leaderboard_cache { + enum request_status status; + f64 cache_time; + u8 *data; + u32 data_len; +}; + typedef struct world_instance world_instance; +void skaterift_world_get_save_path( enum world_purpose which, char buf[128] ); + /* submodule headers */ #include "world_entity.h" #include "world_gate.h" #include "world_gen.h" #include "world_info.h" -#include "world_load.h" #include "world_physics.h" #include "world_render.h" #include "world_sfd.h" @@ -31,20 +47,26 @@ typedef struct world_instance world_instance; #include "world_water.h" #include "world_audio.h" #include "world_routes.h" +#include "world_routes_ui.h" /* console variables */ static f32 k_day_length = 30.0f; /* minutes */ static i32 k_debug_light_indices = 0, k_debug_light_complexity= 0, - k_light_preview = 0; + k_light_preview = 0, + k_light_editor = 0; +#define WORLD_SURFACE_HAS_TRAFFIC 0x1 +#define WORLD_SURFACE_HAS_PROPS 0x2 struct world_instance { /* Fixed items * ------------------------------------------------------- */ + v4f player_co; + void *heap; enum world_status{ k_world_status_unloaded = 0, @@ -65,6 +87,7 @@ struct world_instance { water; f64 time; + f32 tar_min, tar_max; /* STD140 */ struct ub_world_lighting{ @@ -133,6 +156,7 @@ struct world_instance { mdl_material info; mdl_submesh sm_geo, sm_no_collide; + u32 flags; } * surfaces; u32 surface_count; @@ -156,9 +180,20 @@ struct world_instance { ent_camera, ent_swspreview, ent_ccmd, + ent_objective, ent_challenge, - ent_unlock, - ent_relay; + ent_relay, + ent_cubemap, + ent_miniworld, + ent_prop, + ent_region, + ent_glider, + ent_npc; + + enum skybox { + k_skybox_default, + k_skybox_space + } skybox; ent_gate *rendering_gate; @@ -181,11 +216,13 @@ struct world_instance { glmesh mesh_geo, mesh_no_collide, mesh_water; + u32 cubemap_cooldown, cubemap_side; - rb_object rb_geo; + /* leaderboards */ + struct leaderboard_cache *leaderboard_cache; - ent_challenge *challenge_target; - f32 challenge_timer; + /* ui */ + struct route_ui *routes_ui; }; struct world_static { @@ -201,11 +238,17 @@ struct world_static { u32 active_trigger_volumes[8]; u32 active_trigger_volume_count; - world_instance instances[4]; - i32 active_instance; + addon_reg *instance_addons[ k_world_max ]; + world_instance instances[ k_world_max ]; + + enum world_purpose active_instance; + u32 focused_entity; /* like skateshop, challenge.. */ + f32 focus_strength; + vg_camera focus_cam; - addon_reg *addon_hub, - *addon_client; + /* challenges */ + ent_objective *challenge_target; + f32 challenge_timer; enum world_loader_state{ k_world_loader_none, @@ -213,10 +256,19 @@ struct world_static { k_world_loader_load } load_state; + + bool clear_async_op_when_done; } -static world_static; +extern world_static; -static void world_init(void); -static world_instance *world_current_instance(void); +struct world_load_args +{ + enum world_purpose purpose; + addon_reg *reg; +}; -#endif /* WORLD_H */ +void world_init(void); +world_instance *world_current_instance(void); +void world_switch_instance( u32 index ); +void skaterift_world_load_thread( void *_args ); +void world_update( world_instance *world, v3f pos );