+#ifndef ENT_SKATESHOP_H
+#define ENT_SKATESHOP_H
+
+#include "world.h"
+#include "player.h"
+
+#define MAX_LOCAL_BOARDS 64
+#define BILL_TIN_BOARDS 1
+#define MAX_DYNAMIC_BOARDS 9
+
+struct{
+ v3f look_target;
+ ent_skateshop *ptr_ent;
+
+ int active;
+ float factive;
+
+ enum skateshop_loc{
+ k_skateshop_loc_page__viewing,
+
+ k_skateshop_loc_select_use,
+ k_skateshop_loc_select_cancel,
+ k_skateshop_loc_select_upload,
+ k_skateshop_loc_page__selected,
+
+ k_skateshop_loc_page__upload,
+ }
+ interface_loc;
+
+ struct dynamic_board
+ {
+ enum dynamic_board_state{
+ k_dynamic_board_state_none,
+ k_dynamic_board_state_loaded,
+ k_dynamic_board_state_loading,
+ }
+ state;
+
+ u32 ref_count;
+
+ struct player_board board;
+
+ u32 registry_id;
+
+ double last_use_time;
+ }
+ *dynamic_boards;
+
+ struct shop_view_slot
+ {
+ struct dynamic_board *db;
+ float view_blend;
+ }
+ shop_view_slots[6];
+
+ struct board_registry
+ {
+ int workshop;
+ u64 uid;
+
+ struct dynamic_board *dynamic;
+
+ char filename[64]; /* if workshop, string version of uid. */
+ u32 filename_hash;
+
+ int ghost;
+ }
+ *registry;
+ u32 registry_count;
+
+ int loading;
+ float interaction_cooldown;
+
+ u32 selected_registry_id;
+}
+static global_skateshop;
+
+#endif /* ENT_SKATESHOP_H */