#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