qmlfrontend/engine_interface.h
branchui-scaling
changeset 15288 c4fd2813b127
parent 15222 b32c52c76977
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/qmlfrontend/engine_interface.h	Wed Jul 31 23:14:27 2019 +0200
@@ -0,0 +1,102 @@
+#ifndef ENGINE_H
+#define ENGINE_H
+
+#include <stddef.h>
+#include <stdint.h>
+
+#ifdef __cplusplus
+#define ENUM_CLASS enum
+
+#ifndef Q_NAMESPACE
+#define Q_NAMESPACE
+#endif
+
+#ifndef Q_ENUM_NS
+#define Q_ENUM_NS(x)
+#endif
+
+#ifndef Q_DECLARE_METATYPE
+#define Q_DECLARE_METATYPE(x)
+#endif
+
+namespace Engine {
+extern "C" {
+#else
+#define ENUM_CLASS enum class
+#endif
+
+typedef struct _EngineInstance EngineInstance;
+
+typedef struct {
+  uint32_t width;
+  uint32_t height;
+  uint8_t hedgehogs_number;
+  unsigned char* land;
+} PreviewInfo;
+
+typedef uint32_t hedgewars_engine_protocol_version_t();
+typedef EngineInstance* start_engine_t();
+typedef void generate_preview_t(EngineInstance* engine_state,
+                                PreviewInfo* preview);
+typedef void dispose_preview_t(EngineInstance* engine_state);
+typedef void cleanup_t(EngineInstance* engine_state);
+
+typedef void send_ipc_t(EngineInstance* engine_state, uint8_t* buf,
+                        size_t size);
+typedef size_t read_ipc_t(EngineInstance* engine_state, uint8_t* buf,
+                          size_t size);
+
+typedef void setup_current_gl_context_t(EngineInstance* engine_state,
+                                        uint16_t width, uint16_t height,
+                                        void (*(const char*))());
+typedef void render_frame_t(EngineInstance* engine_state);
+
+typedef bool advance_simulation_t(EngineInstance* engine_state, uint32_t ticks);
+
+typedef void move_camera_t(EngineInstance* engine_state, int32_t delta_x,
+                           int32_t delta_y);
+
+ENUM_CLASS SimpleEventType{
+    SwitchHedgehog, Timer, LongJump, HighJump, Accept, Deny,
+};
+
+ENUM_CLASS LongEventType{
+    ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Precision, Attack,
+};
+
+ENUM_CLASS LongEventState{
+    Set,
+    Unset,
+};
+
+ENUM_CLASS PositionedEventType{
+    CursorMove,
+    CursorClick,
+};
+
+typedef void simple_event_t(EngineInstance* engine_state,
+                            SimpleEventType event_type);
+typedef void long_event_t(EngineInstance* engine_state,
+                          LongEventType event_type, LongEventState state);
+typedef void positioned_event_t(EngineInstance* engine_state,
+                                PositionedEventType event_type, int32_t x,
+                                int32_t y);
+}  // extern "C"
+
+#ifdef __cplusplus
+Q_NAMESPACE
+
+Q_ENUM_NS(SimpleEventType)
+Q_ENUM_NS(LongEventType)
+Q_ENUM_NS(LongEventState)
+Q_ENUM_NS(PositionedEventType)
+
+};  // namespace
+
+Q_DECLARE_METATYPE(Engine::SimpleEventType)
+Q_DECLARE_METATYPE(Engine::LongEventType)
+Q_DECLARE_METATYPE(Engine::LongEventState)
+Q_DECLARE_METATYPE(Engine::PositionedEventType)
+#endif
+
+#endif  // ENGINE_H