added hud.lua script
This commit is contained in:
parent
33d14be71c
commit
dabf42162c
@ -21,6 +21,7 @@
|
|||||||
#include "../objects/Player.h"
|
#include "../objects/Player.h"
|
||||||
#include "../logic/ChunksController.h"
|
#include "../logic/ChunksController.h"
|
||||||
#include "../logic/LevelController.h"
|
#include "../logic/LevelController.h"
|
||||||
|
#include "../logic/scripting/scripting.h"
|
||||||
#include "../logic/scripting/scripting_frontend.h"
|
#include "../logic/scripting/scripting_frontend.h"
|
||||||
#include "../voxels/Chunks.h"
|
#include "../voxels/Chunks.h"
|
||||||
#include "../voxels/Chunk.h"
|
#include "../voxels/Chunk.h"
|
||||||
@ -97,11 +98,21 @@ LevelScreen::LevelScreen(Engine* engine, Level* level)
|
|||||||
|
|
||||||
animator.reset(new TextureAnimator());
|
animator.reset(new TextureAnimator());
|
||||||
animator->addAnimations(engine->getAssets()->getAnimations());
|
animator->addAnimations(engine->getAssets()->getAnimations());
|
||||||
|
|
||||||
|
auto content = level->content;
|
||||||
|
for (auto& pack : content->getPacks()) {
|
||||||
|
const ContentPack& info = pack->getInfo();
|
||||||
|
fs::path scriptFile = info.folder/fs::path("scripts/hud.lua");
|
||||||
|
if (fs::is_regular_file(scriptFile)) {
|
||||||
|
scripting::load_hud_script(pack->getEnvironment()->getId(), info.id, scriptFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
scripting::on_frontend_init(hud.get());
|
scripting::on_frontend_init(hud.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
LevelScreen::~LevelScreen() {
|
LevelScreen::~LevelScreen() {
|
||||||
std::cout << "-- writing world" << std::endl;
|
std::cout << "-- writing world" << std::endl;
|
||||||
|
scripting::on_frontend_close();
|
||||||
controller->onWorldSave();
|
controller->onWorldSave();
|
||||||
auto world = level->getWorld();
|
auto world = level->getWorld();
|
||||||
world->write(level.get());
|
world->write(level.get());
|
||||||
|
|||||||
@ -223,7 +223,7 @@ void scripting::on_ui_close(UiDocument* layout, Inventory* inventory) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool register_event(int env, const std::string& name, const std::string& id) {
|
bool scripting::register_event(int env, const std::string& name, const std::string& id) {
|
||||||
if (state->pushenv(env) == 0) {
|
if (state->pushenv(env) == 0) {
|
||||||
state->pushglobals();
|
state->pushglobals();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -41,6 +41,8 @@ namespace scripting {
|
|||||||
|
|
||||||
void initialize(Engine* engine);
|
void initialize(Engine* engine);
|
||||||
|
|
||||||
|
extern bool register_event(int env, const std::string& name, const std::string& id);
|
||||||
|
|
||||||
std::unique_ptr<Environment> create_environment(int parent=0);
|
std::unique_ptr<Environment> create_environment(int parent=0);
|
||||||
std::unique_ptr<Environment> create_pack_environment(const ContentPack& pack);
|
std::unique_ptr<Environment> create_pack_environment(const ContentPack& pack);
|
||||||
std::unique_ptr<Environment> create_doc_environment(int parent, const std::string& name);
|
std::unique_ptr<Environment> create_doc_environment(int parent, const std::string& name);
|
||||||
@ -62,20 +64,27 @@ namespace scripting {
|
|||||||
@return true if prevents default action */
|
@return true if prevents default action */
|
||||||
bool on_item_break_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);
|
||||||
|
|
||||||
/* Called on UI view show */
|
/** Called on UI view show */
|
||||||
void on_ui_open(UiDocument* layout, Inventory* inventory);
|
void on_ui_open(UiDocument* layout, Inventory* inventory);
|
||||||
/* Called on UI view close*/
|
/** Called on UI view close*/
|
||||||
void on_ui_close(UiDocument* layout, Inventory* inventory);
|
void on_ui_close(UiDocument* layout, Inventory* inventory);
|
||||||
|
|
||||||
/* Load script associated with a Block */
|
/** Load script associated with a Block */
|
||||||
void load_block_script(int env, std::string prefix, fs::path file, block_funcs_set& funcsset);
|
void load_block_script(int env, std::string prefix, fs::path file, block_funcs_set& funcsset);
|
||||||
/* Load script associated with an Item */
|
/** Load script associated with an Item */
|
||||||
void load_item_script(int env, std::string prefix, fs::path file, item_funcs_set& funcsset);
|
void load_item_script(int env, std::string prefix, fs::path file, item_funcs_set& funcsset);
|
||||||
/* Load package-specific world script */
|
|
||||||
void load_world_script(int env, std::string prefix, fs::path file);
|
|
||||||
/* Load script associated with an UiDocument */
|
|
||||||
void load_layout_script(int env, std::string prefix, fs::path file, uidocscript& script);
|
|
||||||
/* Finalize lua state. Using scripting after will lead to Lua panic */
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load package-specific world script
|
||||||
|
* @param env environment id
|
||||||
|
* @param packid content-pack id
|
||||||
|
* @param file script file path
|
||||||
|
*/
|
||||||
|
void load_world_script(int env, std::string packid, fs::path file);
|
||||||
|
|
||||||
|
/** Load script associated with an UiDocument */
|
||||||
|
void load_layout_script(int env, std::string prefix, fs::path file, uidocscript& script);
|
||||||
|
|
||||||
|
/** Finalize lua state. Using scripting after will lead to Lua panic */
|
||||||
void close();
|
void close();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,6 +4,11 @@
|
|||||||
#include "lua/libhud.h"
|
#include "lua/libhud.h"
|
||||||
#include "lua/LuaState.h"
|
#include "lua/LuaState.h"
|
||||||
|
|
||||||
|
#include "../../files/files.h"
|
||||||
|
#include "../../engine.h"
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace scripting {
|
namespace scripting {
|
||||||
extern lua::LuaState* state;
|
extern lua::LuaState* state;
|
||||||
}
|
}
|
||||||
@ -13,4 +18,31 @@ Hud* scripting::hud = nullptr;
|
|||||||
void scripting::on_frontend_init(Hud* hud) {
|
void scripting::on_frontend_init(Hud* hud) {
|
||||||
scripting::hud = hud;
|
scripting::hud = hud;
|
||||||
scripting::state->openlib("hud", hudlib, 0);
|
scripting::state->openlib("hud", hudlib, 0);
|
||||||
|
|
||||||
|
for (auto& pack : scripting::engine->getContentPacks()) {
|
||||||
|
if (state->getglobal(pack.id+".hudopen")) {
|
||||||
|
state->callNoThrow(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scripting::on_frontend_close() {
|
||||||
|
scripting::hud = nullptr;
|
||||||
|
for (auto& pack : scripting::engine->getContentPacks()) {
|
||||||
|
if (state->getglobal(pack.id+".hudclose")) {
|
||||||
|
state->callNoThrow(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void scripting::load_hud_script(int env, std::string packid, fs::path file) {
|
||||||
|
std::string src = files::read_string(file);
|
||||||
|
std::cout << "loading script " << file.u8string() << std::endl;
|
||||||
|
|
||||||
|
state->loadbuffer(env, src, file.u8string());
|
||||||
|
state->callNoThrow(0);
|
||||||
|
|
||||||
|
register_event(env, "init", packid+".init");
|
||||||
|
register_event(env, "on_hud_open", packid+".hudopen");
|
||||||
|
register_event(env, "on_hud_close", packid+".hudclose");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,12 +1,26 @@
|
|||||||
#ifndef LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
#ifndef LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
||||||
#define LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
#define LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
class Hud;
|
class Hud;
|
||||||
|
|
||||||
namespace scripting {
|
namespace scripting {
|
||||||
extern Hud* hud;
|
extern Hud* hud;
|
||||||
|
|
||||||
void on_frontend_init(Hud* hud);
|
void on_frontend_init(Hud* hud);
|
||||||
|
void on_frontend_close();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load package-specific hud script
|
||||||
|
* @param env environment id
|
||||||
|
* @param packid content-pack id
|
||||||
|
* @param file script file path
|
||||||
|
*/
|
||||||
|
void load_hud_script(int env, std::string packid, fs::path file);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
#endif // LOGIC_SCRIPTING_SCRIPTING_FRONTEND_H_
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user