qmlfrontend/engine_interface.h
author Wuzzy <Wuzzy2@mail.ru>
Tue, 27 Aug 2019 23:16:42 +0200
changeset 15370 5a934f83d5eb
parent 15217 b32c52c76977
child 15891 d52f5d8e75e6
permissions -rw-r--r--
Tempoary (!!!) workaround for incorrect key combination description in frontend This workaround fixes the incorrect string while preserving translations and the 1.0.0 string freeze. Remember to revert this commit and fix the string in binds.cpp after the 1.0.0 release!

#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