qmlfrontend/engine_interface.h
author Wuzzy <Wuzzy2@mail.ru>
Mon, 16 Sep 2019 17:33:49 +0200
changeset 15431 8504fee3b601
parent 15238 b32c52c76977
child 15919 d52f5d8e75e6
permissions -rw-r--r--
Racer: Fix weird water splashes after waypoint placement Does not affect official racer, as only waypoint placement is touched. The reason was that the air attack gear sometimes was not deleted fast enough so it might occassionally drop some air bombs (these are deleted now). Also, the airplane position was set to water level, which caused another water splash.

#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