roleplay/client/include/editor.h

64 lines
2.1 KiB
C

#ifndef EDITOR_H
#define EDITOR_H
#include "engine.h"
typedef enum EditorModeEnum {
MODE_NONE,
MODE_VERTEX,
MODE_NEIGHBOR,
MODE_HEX,
MODE_REGION,
MODE_MAX_ENUM,
} EditorMode;
typedef struct EditorDataStruct EditorData;
typedef struct ModeKeyStruct ModeKey;
typedef void(*ModeKeyCallback)(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
struct ModeKeyStruct {
int key;
ModeKeyCallback logic;
int axis;
float amount;
};
struct EditorDataStruct {
EditorMode mode;
ModeKey* mode_keys[MODE_MAX_ENUM];
uint32_t mode_key_counts[MODE_MAX_ENUM];
uint32_t selected_max;
uint32_t selected_count;
uint32_t* selected_regions;
uint32_t* selected_hexes;
uint32_t* selected_vertices;
};
EditorData* create_editor_data(void);
void editor_startup(ClientContext* context);
void editor_frame_callback(ClientContext* context);
void editor_key_callback(ClientContext* context, int key, int action, int mods);
void editor_scroll_callback(ClientContext* context, double x, double y);
void editor_button_callback(ClientContext* context, float x, float y, int button, int action, int mods);
void clear_mode(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
void enter_vertex_mode(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
void enter_neighbor_mode(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
void enter_hex_mode(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
void enter_region_mode(EditorData* data, ClientContext* context, ModeKey* binding, int action, int mods);
void resize_selected(EditorData* data, unsigned int size);
int32_t find_selected_hex(EditorData* data, uint32_t region, uint32_t hex);
int32_t find_selected_vertex(EditorData* data, uint32_t region, uint32_t hex, uint32_t vertex);
void add_selected(EditorData* data, uint32_t region, uint32_t hex, uint32_t vertex);
void remove_selected_at(EditorData* data, uint32_t index);
bool editor_pick(ClientContext* context, double cursor[2], uint32_t* rid, uint32_t* hid, uint32_t* vertex, bool edge_only);
#endif