+++ /dev/null
-/*
- * Copyright (C) 2021-2024 Mt.ZERO Software, Harry Godden - All Rights Reserved
- */
-
-#pragma once
-#include "render.h"
-#include "network_msg.h"
-#include "addon.h"
-
-/* types
- */
-
-enum world_geo_type{
- k_world_geo_type_solid = 0,
- k_world_geo_type_nonsolid = 1,
- 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_physics.h"
-#include "world_render.h"
-#include "world_sfd.h"
-#include "world_volumes.h"
-#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_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,
- k_world_status_loading = 1,
- k_world_status_loaded = 2,
- k_world_status_unloading = 3 /* dont spawn sounds and stuff */
- }
- status;
-
- struct{
- boxf depthbounds;
- int depth_computed;
-
- float height;
- int enabled;
- v4f plane;
- }
- water;
-
- f64 time;
- f32 tar_min, tar_max;
-
- /* STD140 */
- struct ub_world_lighting{
- v4f g_cube_min,
- g_cube_inv_range;
-
- v4f g_water_plane,
- g_depth_bounds;
-
- v4f g_daysky_colour;
- v4f g_nightsky_colour;
- v4f g_sunset_colour;
- v4f g_ambient_colour;
- v4f g_sunset_ambient;
- v4f g_sun_colour;
- v4f g_sun_dir;
- v4f g_board_0;
- v4f g_board_1;
-
- float g_water_fog;
- float g_time;
- float g_realtime;
- float g_shadow_length;
- float g_shadow_spread;
-
- float g_time_of_day;
- float g_day_phase;
- float g_sunset_phase;
-
- int g_light_preview;
- int g_shadow_samples;
-
- int g_debug_indices;
- int g_debug_complexity;
- }
- ub_lighting;
- GLuint ubo_lighting;
- int ubo_bind_point;
-
- GLuint tbo_light_entities,
- tex_light_entities,
- tex_light_cubes;
-
- float probabilities[3];
-
- v3i light_cubes;
- struct framebuffer heightmap;
-
- /*
- * Dynamically allocated when world_load is called.
- *
- * the following arrays index somewhere into this linear
- * allocator
- * --------------------------------------------------------------------------
- */
-
- /*
- * Main world .mdl
- */
- mdl_context meta;
-
- GLuint *textures;
- u32 texture_count;
-
- struct world_surface{
- mdl_material info;
- mdl_submesh sm_geo,
- sm_no_collide;
- u32 flags;
- }
- * surfaces;
- u32 surface_count;
-
- ent_worldinfo info;
- mdl_array_ptr ent_spawn,
- ent_gate,
- ent_light,
- ent_route_node,
- ent_path_index,
- ent_checkpoint,
- ent_route,
- ent_water,
-
- ent_audio_clip,
- ent_audio,
- ent_volume,
- ent_traffic,
- ent_skateshop,
- ent_marker,
- ent_camera,
- ent_swspreview,
- ent_ccmd,
- ent_objective,
- ent_challenge,
- ent_relay,
- ent_cubemap,
- ent_miniworld,
- ent_prop,
- ent_region,
- ent_glider;
-
- enum skybox {
- k_skybox_default,
- k_skybox_space
- } skybox;
-
- ent_gate *rendering_gate;
-
- /* logic
- * ----------------------------------------------------
- */
-
- /* world geometry */
- scene_context scene_geo,
- scene_no_collide,
- scene_lines;
-
- /* spacial mappings */
- bh_tree *geo_bh,
- *entity_bh;
- u32 *entity_list;
-
- /* graphics */
- glmesh mesh_route_lines;
- glmesh mesh_geo,
- mesh_no_collide,
- mesh_water;
- u32 cubemap_cooldown, cubemap_side;
-
- /* leaderboards */
- struct leaderboard_cache *leaderboard_cache;
-
- /* ui */
- struct route_ui *routes_ui;
-};
-
-struct world_static {
- /*
- * Allocated as system memory
- * --------------------------------------------------------------------------
- */
- void *heap;
-
- u32 current_run_version;
- double time, rewind_from, rewind_to, last_use;
-
- u32 active_trigger_volumes[8];
- u32 active_trigger_volume_count;
-
- 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;
-
- /* challenges */
- ent_objective *challenge_target;
- f32 challenge_timer;
-
- enum world_loader_state{
- k_world_loader_none,
- k_world_loader_preload,
- k_world_loader_load
- }
- load_state;
-}
-extern world_static;
-
-struct world_load_args
-{
- enum world_purpose purpose;
- addon_reg *reg;
-};
-
-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 );