#define WORLD_H
#include "render.h"
+#include "network_msg.h"
/* types
*/
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;
+static 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_water.h"
#include "world_audio.h"
#include "world_routes.h"
+#include "world_routes_ui.h"
/* console variables */
-static float k_day_length = 30.0f; /* minutes */
-static int k_debug_light_indices = 0,
+static f32 k_day_length = 30.0f; /* minutes */
+static i32 k_debug_light_indices = 0,
k_debug_light_complexity= 0,
k_light_preview = 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,
water;
f64 time;
+ f32 tar_min, tar_max;
/* STD140 */
struct ub_world_lighting{
mdl_material info;
mdl_submesh sm_geo,
sm_no_collide;
+ u32 flags;
}
* surfaces;
u32 surface_count;
ent_marker,
ent_camera,
ent_swspreview,
- ent_ccmd;
+ ent_ccmd,
+ ent_objective,
+ ent_challenge,
+ ent_relay,
+ ent_cubemap,
+ ent_miniworld,
+ ent_prop,
+ ent_region;
+
+ enum skybox {
+ k_skybox_default,
+ k_skybox_space
+ } skybox;
ent_gate *rendering_gate;
scene_lines;
/* spacial mappings */
- bh_tree *audio_bh,
- *volume_bh,
- *geo_bh;
+ 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;
rb_object rb_geo;
+
+ /* leaderboards */
+ struct leaderboard_cache *leaderboard_cache;
+
+ /* ui */
+ struct route_ui *routes_ui;
};
struct world_static {
u32 current_run_version;
double time, rewind_from, rewind_to, last_use;
- int in_volume;
+ u32 active_trigger_volumes[8];
+ u32 active_trigger_volume_count;
+
+ addon_reg *instance_addons[ k_world_max ];
+ world_instance instances[ k_world_max ];
- world_instance worlds[4];
- u32 active_world;
+ enum world_purpose active_instance;
+ u32 focused_entity; /* like skateshop, challenge.. */
+ f32 focus_strength;
+ 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;
}
static world_static;
static void world_init(void);
static world_instance *world_current_instance(void);
+static void world_switch_instance( u32 index );
#endif /* WORLD_H */