-#ifndef ENT_SKATESHOP_H
-#define ENT_SKATESHOP_H
-
+#pragma once
#include "world.h"
#include "world_load.h"
#include "player.h"
#include "workshop.h"
#include "addon.h"
-#define SKATESHOP_BOARD_CACHE_MAX 10
-#define SKATESHOP_VIEW_SLOT_MAX 6
+#define SKATESHOP_VIEW_SLOT_MAX 5
-struct{
+struct global_skateshop
+{
v3f look_target;
- ent_skateshop *ptr_ent;
-
- int active;
- float factive;
-
- struct cache_board{
- enum cache_board_state{
- k_cache_board_state_none,
- k_cache_board_state_loaded,
- k_cache_board_state_load_request
- }
- state;
-
- struct player_board board;
- u32 reg_index;
- addon_reg *reg_ptr;
-
- u32 ref_count;
- double last_use_time;
- }
- *cache;
- SDL_SpinLock sl_cache_access;
struct shop_view_slot{
- struct cache_board *cache_ptr;
+ u16 cache_id;
float view_blend;
}
shop_view_slots[ SKATESHOP_VIEW_SLOT_MAX ];
u32 selected_world_id,
selected_board_id,
+ selected_player_id,
pointcloud_world_id;
struct {
const char *item_title, *item_desc;
u32 reg_id;
+
+ const char *world_title, *world_loc;
+ u32 world_reg;
}
render;
-}
-static global_skateshop={.render={.reg_id=0xffffffff}};
-VG_STATIC void global_skateshop_exit(void);
-VG_STATIC void watch_cache_board( struct cache_board *ptr );
-VG_STATIC void unwatch_cache_board( struct cache_board *ptr );
+ union {
+ struct gui_helper *helper_pick, *helper_toggle;
+ };
+
+ struct gui_helper *helper_browse;
-#endif /* ENT_SKATESHOP_H */
+
+ addon_reg *reg_preview, *reg_loaded_preview;
+ GLuint tex_preview;
+}
+extern global_skateshop;
+
+void skateshop_init(void);
+void ent_skateshop_preupdate( ent_focus_context *ctx );
+void skateshop_render( ent_skateshop *shop );
+void skateshop_render_nonfocused( world_instance *world, vg_camera *cam );
+void skateshop_autostart_loading(void);
+void skateshop_world_preupdate( world_instance *world );
+entity_call_result ent_skateshop_call( world_instance *world, ent_call *call );
+void skateshop_world_preview_preupdate(void);