voxelcore/src/logic/scripting/scripting.h
2024-02-11 23:56:24 +03:00

74 lines
2.3 KiB
C++

#include <string>
#include <filesystem>
#include "../../delegates.h"
namespace fs = std::filesystem;
class LuaState;
class Engine;
class Content;
class ContentIndices;
class Level;
class Block;
class Player;
class ItemDef;
class Inventory;
class UiDocument;
struct block_funcs_set;
struct item_funcs_set;
struct uidocscript;
class BlocksController;
namespace scripting {
extern Engine* engine;
extern const Content* content;
extern const ContentIndices* indices;
extern Level* level;
extern BlocksController* blocks;
class Environment {
int env;
public:
Environment(int env);
~Environment();
int getId() const;
};
void initialize(Engine* engine);
runnable create_runnable(
int env,
const std::string& src,
const std::string& file="<string>"
);
wstringconsumer create_wstring_consumer(
int env,
const std::string& src,
const std::string& file="<string>"
);
std::unique_ptr<Environment> create_environment(int parent=0);
void on_world_load(Level* level, BlocksController* blocks);
void on_world_save();
void on_world_quit();
void on_blocks_tick(const Block* block, int tps);
void update_block(const Block* block, int x, int y, int z);
void random_update_block(const Block* block, int x, int y, int z);
void on_block_placed(Player* player, const Block* block, int x, int y, int z);
void on_block_broken(Player* player, const Block* block, int x, int y, int z);
bool on_block_interact(Player* player, const Block* block, int x, int y, int z);
bool on_item_use_on_block(Player* player, const ItemDef* item, int x, int y, int z);
bool on_item_break_block(Player* player, const ItemDef* item, int x, int y, int z);
void on_ui_open(UiDocument* layout, Inventory* inventory);
void on_ui_close(UiDocument* layout, Inventory* inventory);
void load_block_script(int env, std::string prefix, fs::path file, block_funcs_set& funcsset);
void load_item_script(int env, std::string prefix, fs::path file, item_funcs_set& funcsset);
void load_world_script(int env, std::string prefix, fs::path file);
void load_layout_script(int env, std::string prefix, fs::path file, uidocscript& script);
void close();
}