/*
- * 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
*/
typedef struct world_instance world_instance;
-static void skaterift_world_get_save_path( enum world_purpose which,
- char buf[128] );
+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"
#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, player_angles;
- v3f cam_co;
+ v4f player_co;
void *heap;
enum world_status{
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_relay,
ent_cubemap,
ent_miniworld,
- ent_prop;
+ ent_prop,
+ ent_region,
+ ent_glider,
+ ent_npc;
enum skybox {
k_skybox_default,
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 {
enum world_purpose active_instance;
u32 focused_entity; /* like skateshop, challenge.. */
f32 focus_strength;
- camera focus_cam;
+ vg_camera focus_cam;
/* challenges */
ent_objective *challenge_target;
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);
-static void world_switch_instance( u32 index );
+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 );