roleplay/client/include/hex.h

90 lines
1.9 KiB
C

#ifndef HEX_H
#define HEX_H
#include "gpu.h"
2024-11-05 16:34:10 -07:00
#define REGION_SIZE 10
2024-11-01 17:34:41 -06:00
#define REGION_HEX_COUNT (3*REGION_SIZE*(REGION_SIZE-1)+1)
#define MAX_LOADED_REGIONS (51*51)
2024-11-05 16:34:10 -07:00
#define HEX_X 0.75
#define SQRT3 1.732050807568877193176604123436845839023590087890625
#define HEX_Z (SQRT3/2)
#define REGION_DIAMETER (2*REGION_SIZE-1)
#define REGION_WIDTH (HEX_X*REGION_DIAMETER)
#define REGION_HEIGHT (HEX_Z*REGION_DIAMETER)
2024-10-30 21:24:03 -06:00
2024-11-06 17:50:42 -07:00
extern vec3 hex_vertices[];
extern vec3 hex_starts[];
extern vec3 hex_directions[];
extern int hex_indices[];
2024-11-01 17:34:41 -06:00
typedef struct GPUHexStruct {
float height[6];
2024-11-02 22:02:32 -06:00
uint32_t color[7];
2024-11-01 17:34:41 -06:00
} GPUHex;
typedef struct GPUHexRegionStruct {
2024-11-02 12:07:11 -06:00
int32_t q;
int32_t r;
int32_t y;
uint32_t map;
2024-11-01 17:34:41 -06:00
GPUHex hexes[REGION_HEX_COUNT];
} GPUHexRegion;
typedef struct HexRegionStruct {
VkDeviceAddress address;
VkBuffer region;
VmaAllocation region_memory;
2024-11-02 23:25:21 -06:00
GPUHexRegion data;
2024-11-01 17:34:41 -06:00
} HexRegion;
typedef struct GPUHexContextStruct {
mat4 proj;
mat4 view;
vec4 click_start;
vec4 click_end;
vec4 hover_start;
vec4 hover_end;
uint32_t current_map;
2024-11-04 20:42:58 -07:00
uint32_t clicked_region;
2024-11-06 17:50:42 -07:00
uint32_t clicked_hex;
2024-11-04 20:42:58 -07:00
uint32_t hovered_region;
2024-11-06 17:50:42 -07:00
uint32_t hovered_hex;
2024-11-01 17:34:41 -06:00
VkDeviceAddress regions[MAX_LOADED_REGIONS];
} GPUHexContext;
typedef struct HexContextStruct {
2024-11-06 17:50:42 -07:00
VkDeviceAddress address[MAX_FRAMES_IN_FLIGHT];
VkBuffer context[MAX_FRAMES_IN_FLIGHT];
VmaAllocation context_memory[MAX_FRAMES_IN_FLIGHT];
GraphicsPipeline graphics;
2024-11-04 20:42:58 -07:00
GraphicsPipeline highlight_pipeline;
2024-11-06 17:50:42 -07:00
#ifdef DRAW_HEX_RAYS
GraphicsPipeline ray_pipeline;
#endif
2024-11-05 16:34:10 -07:00
HexRegion* regions[MAX_LOADED_REGIONS];
GPUHexContext data;
} HexContext;
2024-11-01 17:34:41 -06:00
typedef struct HexPushConstantStruct {
VkDeviceAddress context;
double time;
} HexPushConstant;
VkResult create_hex_context(
RenderContext* gpu,
HexContext* context);
VkResult set_hex_region(
int32_t q, int32_t r, int32_t y,
uint32_t map,
2024-11-01 17:34:41 -06:00
HexRegion** region,
HexContext* hex,
RenderContext* gpu);
#endif