+++ /dev/null
-/*
- * Copyright (C) 2021-2023 Mt.ZERO Software, Harry Godden - All Rights Reserved
- */
-
-#ifndef WORLD_H
-#define WORLD_H
-
-#include "render.h"
-
-/* types
- */
-
-enum world_geo_type{
- k_world_geo_type_solid = 0,
- k_world_geo_type_nonsolid = 1,
- k_world_geo_type_water = 2
-};
-
-typedef struct world_instance world_instance;
-
-/* 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"
-#include "world_volumes.h"
-#include "world_water.h"
-#include "world_audio.h"
-#include "world_routes.h"
-
-/* console variables */
-
-static float k_day_length = 30.0f; /* minutes */
-static int k_debug_light_indices = 0,
- k_debug_light_complexity= 0,
- k_light_preview = 0;
-
-
-struct world_instance {
- /* Fixed items
- * -------------------------------------------------------
- */
-
- 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;
-
- /* 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;
- }
- * 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_gate *rendering_gate;
-
- /* logic
- * ----------------------------------------------------
- */
-
- /* world geometry */
- scene_context scene_geo,
- scene_no_collide,
- scene_lines;
-
- /* spacial mappings */
- bh_tree *audio_bh,
- *volume_bh,
- *geo_bh;
-
- /* graphics */
- glmesh mesh_route_lines;
- glmesh mesh_geo,
- mesh_no_collide,
- mesh_water;
-
- rb_object rb_geo;
-};
-
-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;
-
- world_instance worlds[4];
- i32 active_world;
-}
-static world_static;
-
-static void world_init(void);
-static world_instance *world_current_instance(void);
-
-#endif /* WORLD_H */