Implement proof of concept for scripting capabilities

This commit is contained in:
Marcus Huderle
2020-04-26 19:38:20 -05:00
parent 37ab54019b
commit 267cd5e2cb
12 changed files with 154 additions and 25 deletions

View File

@@ -8,6 +8,7 @@ class Block
public:
Block();
Block(uint16_t);
Block(uint16_t tile, uint16_t collision, uint16_t elevation);
Block(const Block&);
bool operator ==(Block);
bool operator !=(Block);

View File

@@ -74,8 +74,7 @@ public:
void cacheBlockdata();
void cacheCollision();
Block *getBlock(int x, int y);
void setBlock(int x, int y, Block block);
void _setBlock(int x, int y, Block block);
void setBlock(int x, int y, Block block, bool invokeCallback = false);
void floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
void _floodFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);
void magicFillCollisionElevation(int x, int y, uint16_t collision, uint16_t elevation);

View File

@@ -37,6 +37,8 @@ public:
MainWindow(const MainWindow &) = delete;
MainWindow & operator = (const MainWindow &) = delete;
Q_INVOKABLE void scriptapi_setBlock(int x, int y, int tile, int collision, int elevation);
public slots:
void scaleMapView(int);

31
include/scripting.h Normal file
View File

@@ -0,0 +1,31 @@
#ifndef SCRIPTING_H
#define SCRIPTING_H
#include "mainwindow.h"
#include "block.h"
#include <QStringList>
#include <QJSEngine>
enum CallbackType {
OnBlockChanged,
};
class Scripting
{
public:
Scripting(MainWindow *mainWindow);
QJSValue newBlockObject(Block block);
static void init(MainWindow *mainWindow);
static void cb_MetatileChanged(int x, int y, Block prevBlock, Block newBlock);
private:
QJSEngine *engine;
QStringList filepaths;
QList<QJSValue> modules;
void loadModules(QStringList moduleFiles);
void invokeCallback(CallbackType type, QJSValueList args);
};
#endif // SCRIPTING_H