new player.* functions
This commit is contained in:
parent
0ad3dd7ab8
commit
1917cbba8b
@ -69,6 +69,20 @@ player.get_inventory(playerid: int) -> int, int
|
||||
|
||||
Returns player inventory ID and selected slot index (0-9)
|
||||
|
||||
```python
|
||||
player.is_flight() -> bool
|
||||
player.set_flight(bool)
|
||||
```
|
||||
|
||||
Getter and setter for player flight mode
|
||||
|
||||
```python
|
||||
player.is_noclip() -> bool
|
||||
player.set_noclip(bool)
|
||||
```
|
||||
|
||||
Getter and setter for player noclip mode (physics disabled)
|
||||
|
||||
## *world* library
|
||||
|
||||
```python
|
||||
|
||||
@ -63,6 +63,20 @@ player.get_inventory(playerid: int) -> int, int
|
||||
|
||||
Возвращает id инвентаря игрока и индекс выбранного слота (от 0 до 9)
|
||||
|
||||
```python
|
||||
player.is_flight() -> bool
|
||||
player.set_flight(bool)
|
||||
```
|
||||
|
||||
Геттер и сеттер режима полета
|
||||
|
||||
```python
|
||||
player.is_noclip() -> bool
|
||||
player.set_noclip(bool)
|
||||
```
|
||||
|
||||
Геттер и сеттер noclip режима (выключенная физика игрока)
|
||||
|
||||
## Библиотека world
|
||||
|
||||
```python
|
||||
|
||||
@ -187,12 +187,12 @@ int LuaState::gettop() const {
|
||||
return lua_gettop(L);
|
||||
}
|
||||
|
||||
int LuaState::pushinteger(luaint x) {
|
||||
int LuaState::pushinteger(lua_Integer x) {
|
||||
lua_pushinteger(L, x);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaState::pushnumber(luanumber x) {
|
||||
int LuaState::pushnumber(lua_Number x) {
|
||||
lua_pushnumber(L, x);
|
||||
return 1;
|
||||
}
|
||||
@ -202,7 +202,7 @@ int LuaState::pushboolean(bool x) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LuaState::pushivec3(luaint x, luaint y, luaint z) {
|
||||
int LuaState::pushivec3(lua_Integer x, lua_Integer y, lua_Integer z) {
|
||||
lua::pushivec3(L, x, y, z);
|
||||
return 3;
|
||||
}
|
||||
@ -291,11 +291,11 @@ bool LuaState::toboolean(int idx) {
|
||||
return lua_toboolean(L, idx);
|
||||
}
|
||||
|
||||
luaint LuaState::tointeger(int idx) {
|
||||
lua_Integer LuaState::tointeger(int idx) {
|
||||
return lua_tointeger(L, idx);
|
||||
}
|
||||
|
||||
luanumber LuaState::tonumber(int idx) {
|
||||
lua_Number LuaState::tonumber(int idx) {
|
||||
return lua_tonumber(L, idx);
|
||||
}
|
||||
|
||||
|
||||
@ -7,10 +7,6 @@
|
||||
#include "../../../data/dynamic.hpp"
|
||||
#include "../../../delegates.hpp"
|
||||
|
||||
#ifndef LUAJIT_VERSION
|
||||
#error LuaJIT required
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
|
||||
@ -36,9 +32,9 @@ namespace lua {
|
||||
static const std::string envName(int env);
|
||||
void loadbuffer(int env, const std::string& src, const std::string& file);
|
||||
int gettop() const;
|
||||
int pushivec3(luaint x, luaint y, luaint z);
|
||||
int pushinteger(luaint x);
|
||||
int pushnumber(luanumber x);
|
||||
int pushivec3(lua_Integer x, lua_Integer y, lua_Integer z);
|
||||
int pushinteger(lua_Integer x);
|
||||
int pushnumber(lua_Number x);
|
||||
int pushboolean(bool x);
|
||||
int pushstring(const std::string& str);
|
||||
int pushenv(int env);
|
||||
@ -51,8 +47,8 @@ namespace lua {
|
||||
bool getfield(const std::string& name, int idx = -1);
|
||||
void setfield(const std::string& name, int idx = -2);
|
||||
bool toboolean(int idx);
|
||||
luaint tointeger(int idx);
|
||||
luanumber tonumber(int idx);
|
||||
lua_Integer tointeger(int idx);
|
||||
lua_Number tonumber(int idx);
|
||||
glm::vec2 tovec2(int idx);
|
||||
glm::vec4 tocolor(int idx);
|
||||
dynamic::Value tovalue(int idx);
|
||||
|
||||
@ -23,22 +23,22 @@ inline int extract_channel_index(lua_State* L, int idx) {
|
||||
inline audio::speakerid_t play_sound(
|
||||
const char* name,
|
||||
bool relative,
|
||||
lua::luanumber x,
|
||||
lua::luanumber y,
|
||||
lua::luanumber z,
|
||||
lua::luanumber volume,
|
||||
lua::luanumber pitch,
|
||||
lua_Number x,
|
||||
lua_Number y,
|
||||
lua_Number z,
|
||||
lua_Number volume,
|
||||
lua_Number pitch,
|
||||
bool loop,
|
||||
int channel
|
||||
) {
|
||||
if (channel == -1)
|
||||
if (channel == -1) {
|
||||
return 0;
|
||||
}
|
||||
auto assets = scripting::engine->getAssets();
|
||||
auto sound = assets->getSound(name);
|
||||
if (sound == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return audio::play(
|
||||
sound,
|
||||
glm::vec3(
|
||||
@ -58,20 +58,20 @@ inline audio::speakerid_t play_sound(
|
||||
inline audio::speakerid_t play_stream(
|
||||
const char* filename,
|
||||
bool relative,
|
||||
lua::luanumber x,
|
||||
lua::luanumber y,
|
||||
lua::luanumber z,
|
||||
lua::luanumber volume,
|
||||
lua::luanumber pitch,
|
||||
lua_Number x,
|
||||
lua_Number y,
|
||||
lua_Number z,
|
||||
lua_Number volume,
|
||||
lua_Number pitch,
|
||||
bool loop,
|
||||
int channel
|
||||
) {
|
||||
if (channel == -1)
|
||||
if (channel == -1) {
|
||||
return 0;
|
||||
}
|
||||
auto paths = scripting::engine->getResPaths();
|
||||
fs::path file = paths->find(filename);
|
||||
return audio::play_stream(
|
||||
file,
|
||||
paths->find(filename),
|
||||
glm::vec3(
|
||||
static_cast<float>(x),
|
||||
static_cast<float>(y),
|
||||
@ -95,7 +95,7 @@ inline audio::speakerid_t play_stream(
|
||||
/// channel: string = "regular",
|
||||
/// loop: bool = false)
|
||||
static int l_audio_play_stream(lua_State* L) {
|
||||
lua_pushinteger(L, static_cast<lua::luaint>(
|
||||
lua_pushinteger(L, static_cast<lua_Integer>(
|
||||
play_stream(
|
||||
lua_tostring(L, 1),
|
||||
false,
|
||||
@ -118,7 +118,7 @@ static int l_audio_play_stream(lua_State* L) {
|
||||
/// channel: string = "regular",
|
||||
/// loop: bool = false)
|
||||
static int l_audio_play_stream_2d(lua_State* L) {
|
||||
lua_pushinteger(L, static_cast<lua::luaint>(
|
||||
lua_pushinteger(L, static_cast<lua_Integer>(
|
||||
play_stream(
|
||||
lua_tostring(L, 1),
|
||||
true,
|
||||
@ -142,7 +142,7 @@ static int l_audio_play_stream_2d(lua_State* L) {
|
||||
/// channel: string = "regular",
|
||||
/// loop: bool = false)
|
||||
static int l_audio_play_sound(lua_State* L) {
|
||||
lua_pushinteger(L, static_cast<lua::luaint>(
|
||||
lua_pushinteger(L, static_cast<lua_Integer>(
|
||||
play_sound(
|
||||
lua_tostring(L, 1),
|
||||
false,
|
||||
@ -165,7 +165,7 @@ static int l_audio_play_sound(lua_State* L) {
|
||||
/// channel: string = "regular",
|
||||
/// loop: bool = false)
|
||||
static int l_audio_play_sound_2d(lua_State* L) {
|
||||
lua_pushinteger(L, static_cast<lua::luaint>(
|
||||
lua_pushinteger(L, static_cast<lua_Integer>(
|
||||
play_sound(
|
||||
lua_tostring(L, 1),
|
||||
true,
|
||||
@ -181,8 +181,7 @@ static int l_audio_play_sound_2d(lua_State* L) {
|
||||
|
||||
/// @brief audio.stop(speakerid: integer) -> nil
|
||||
static int l_audio_stop(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
speaker->stop();
|
||||
}
|
||||
@ -191,8 +190,7 @@ static int l_audio_stop(lua_State* L) {
|
||||
|
||||
/// @brief audio.pause(speakerid: integer) -> nil
|
||||
static int l_audio_pause(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
speaker->pause();
|
||||
}
|
||||
@ -201,8 +199,7 @@ static int l_audio_pause(lua_State* L) {
|
||||
|
||||
/// @brief audio.resume(speakerid: integer) -> nil
|
||||
static int l_audio_resume(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr && speaker->isPaused()) {
|
||||
speaker->play();
|
||||
}
|
||||
@ -211,8 +208,7 @@ static int l_audio_resume(lua_State* L) {
|
||||
|
||||
/// @brief audio.set_loop(speakerid: integer, value: bool) -> nil
|
||||
static int l_audio_set_loop(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
bool value = lua_toboolean(L, 2);
|
||||
speaker->setLoop(value);
|
||||
@ -222,45 +218,38 @@ static int l_audio_set_loop(lua_State* L) {
|
||||
|
||||
/// @brief audio.set_volume(speakerid: integer, value: number) -> nil
|
||||
static int l_audio_set_volume(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua::luanumber value = lua_tonumber(L, 2);
|
||||
speaker->setVolume(static_cast<float>(value));
|
||||
speaker->setVolume(static_cast<float>(lua_tonumber(L, 2)));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief audio.set_pitch(speakerid: integer, value: number) -> nil
|
||||
static int l_audio_set_pitch(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua::luanumber value = lua_tonumber(L, 2);
|
||||
speaker->setPitch(static_cast<float>(value));
|
||||
speaker->setPitch(static_cast<float>(lua_tonumber(L, 2)));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief audio.set_time(speakerid: integer, value: number) -> nil
|
||||
static int l_audio_set_time(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua::luanumber value = lua_tonumber(L, 2);
|
||||
speaker->setTime(static_cast<audio::duration_t>(value));
|
||||
speaker->setTime(static_cast<audio::duration_t>(lua_tonumber(L, 2)));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// @brief audio.set_position(speakerid: integer, x: number, y: number, z: number) -> nil
|
||||
static int l_audio_set_position(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua::luanumber x = lua_tonumber(L, 2);
|
||||
lua::luanumber y = lua_tonumber(L, 3);
|
||||
lua::luanumber z = lua_tonumber(L, 4);
|
||||
auto x = lua_tonumber(L, 2);
|
||||
auto y = lua_tonumber(L, 3);
|
||||
auto z = lua_tonumber(L, 4);
|
||||
speaker->setPosition(glm::vec3(
|
||||
static_cast<float>(x),
|
||||
static_cast<float>(y),
|
||||
@ -272,12 +261,11 @@ static int l_audio_set_position(lua_State* L) {
|
||||
|
||||
/// @brief audio.set_velocity(speakerid: integer, x: number, y: number, z: number) -> nil
|
||||
static int l_audio_set_velocity(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua::luanumber x = lua_tonumber(L, 2);
|
||||
lua::luanumber y = lua_tonumber(L, 3);
|
||||
lua::luanumber z = lua_tonumber(L, 4);
|
||||
auto x = lua_tonumber(L, 2);
|
||||
auto y = lua_tonumber(L, 3);
|
||||
auto z = lua_tonumber(L, 4);
|
||||
speaker->setVelocity(glm::vec3(
|
||||
static_cast<float>(x),
|
||||
static_cast<float>(y),
|
||||
@ -289,8 +277,7 @@ static int l_audio_set_velocity(lua_State* L) {
|
||||
|
||||
/// @brief audio.is_playing(speakerid: integer) -> bool
|
||||
static int l_audio_is_playing(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushboolean(L, speaker->isPlaying());
|
||||
return 1;
|
||||
@ -301,8 +288,7 @@ static int l_audio_is_playing(lua_State* L) {
|
||||
|
||||
/// @brief audio.is_paused(speakerid: integer) -> bool
|
||||
static int l_audio_is_paused(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushboolean(L, speaker->isPaused());
|
||||
return 1;
|
||||
@ -313,8 +299,7 @@ static int l_audio_is_paused(lua_State* L) {
|
||||
|
||||
/// @brief audio.is_loop(speakerid: integer) -> bool
|
||||
static int l_audio_is_loop(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushboolean(L, speaker->isLoop());
|
||||
return 1;
|
||||
@ -325,8 +310,7 @@ static int l_audio_is_loop(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_volume(speakerid: integer) -> number
|
||||
static int l_audio_get_volume(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushnumber(L, speaker->getVolume());
|
||||
return 1;
|
||||
@ -337,8 +321,7 @@ static int l_audio_get_volume(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_pitch(speakerid: integer) -> number
|
||||
static int l_audio_get_pitch(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushnumber(L, speaker->getPitch());
|
||||
return 1;
|
||||
@ -349,8 +332,7 @@ static int l_audio_get_pitch(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_time(speakerid: integer) -> number
|
||||
static int l_audio_get_time(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushnumber(L, speaker->getTime());
|
||||
return 1;
|
||||
@ -361,8 +343,7 @@ static int l_audio_get_time(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_duration(speakerid: integer) -> number
|
||||
static int l_audio_get_duration(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
lua_pushnumber(L, speaker->getDuration());
|
||||
return 1;
|
||||
@ -373,11 +354,9 @@ static int l_audio_get_duration(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_position(speakerid: integer) -> number, number, number
|
||||
static int l_audio_get_position(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
auto vec = speaker->getPosition();
|
||||
lua::pushvec3(L, vec);
|
||||
lua::pushvec3(L, speaker->getPosition());
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
@ -385,8 +364,7 @@ static int l_audio_get_position(lua_State* L) {
|
||||
|
||||
/// @brief audio.get_velocity(speakerid: integer) -> number, number, number
|
||||
static int l_audio_get_velocity(lua_State* L) {
|
||||
lua::luaint id = lua_tonumber(L, 1);
|
||||
auto speaker = audio::get_speaker(id);
|
||||
auto speaker = audio::get_speaker(lua_tointeger(L, 1));
|
||||
if (speaker != nullptr) {
|
||||
auto vec = speaker->getVelocity();
|
||||
lua::pushvec3(L, vec);
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
#include "lua_commons.hpp"
|
||||
|
||||
#include "api_lua.hpp"
|
||||
#include "lua_util.hpp"
|
||||
#include "../scripting.hpp"
|
||||
|
||||
#include "../../../world/Level.hpp"
|
||||
#include "../../../voxels/Chunks.hpp"
|
||||
#include "../../../voxels/Chunk.hpp"
|
||||
@ -13,7 +15,7 @@
|
||||
|
||||
int l_block_name(lua_State* L) {
|
||||
auto indices = scripting::content->getIndices();
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
lua_Integer id = lua_tointeger(L, 1);
|
||||
if (id < 0 || size_t(id) >= indices->countBlockDefs()) {
|
||||
return 0;
|
||||
}
|
||||
@ -22,10 +24,9 @@ int l_block_name(lua_State* L) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
int l_block_material(lua_State* L) {
|
||||
auto indices = scripting::content->getIndices();
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
lua_Integer id = lua_tointeger(L, 1);
|
||||
if (id < 0 || size_t(id) >= indices->countBlockDefs()) {
|
||||
return 0;
|
||||
}
|
||||
@ -35,9 +36,9 @@ int l_block_material(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_is_solid_at(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
|
||||
lua_pushboolean(L, scripting::level->chunks->isSolidBlock(x, y, z));
|
||||
return 1;
|
||||
@ -49,17 +50,17 @@ int l_blocks_count(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_block_index(lua_State* L) {
|
||||
auto name = lua_tostring(L, 1);
|
||||
std::string name = lua_tostring(L, 1);
|
||||
lua_pushinteger(L, scripting::content->requireBlock(name).rt.id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int l_set_block(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua::luaint id = lua_tointeger(L, 4);
|
||||
lua::luaint states = lua_tointeger(L, 5);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
lua_Integer id = lua_tointeger(L, 4);
|
||||
lua_Integer states = lua_tointeger(L, 5);
|
||||
bool noupdate = lua_toboolean(L, 6);
|
||||
if (id < 0 || size_t(id) >= scripting::indices->countBlockDefs()) {
|
||||
return 0;
|
||||
@ -75,9 +76,9 @@ int l_set_block(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
int id = vox == nullptr ? -1 : vox->id;
|
||||
lua_pushinteger(L, id);
|
||||
@ -85,9 +86,9 @@ int l_get_block(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_x(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
return lua::pushivec3(L, 1, 0, 0);
|
||||
@ -102,9 +103,9 @@ int l_get_block_x(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_y(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
return lua::pushivec3(L, 0, 1, 0);
|
||||
@ -119,9 +120,9 @@ int l_get_block_y(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_z(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
return lua::pushivec3(L, 0, 0, 1);
|
||||
@ -136,9 +137,9 @@ int l_get_block_z(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_rotation(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
int rotation = vox == nullptr ? 0 : vox->rotation();
|
||||
lua_pushinteger(L, rotation);
|
||||
@ -146,10 +147,10 @@ int l_get_block_rotation(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_set_block_rotation(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua::luaint value = lua_tointeger(L, 4);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
lua_Integer value = lua_tointeger(L, 4);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
return 0;
|
||||
@ -160,9 +161,9 @@ int l_set_block_rotation(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_states(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
int states = vox == nullptr ? 0 : vox->states;
|
||||
lua_pushinteger(L, states);
|
||||
@ -170,10 +171,10 @@ int l_get_block_states(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_set_block_states(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua::luaint states = lua_tointeger(L, 4);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
lua_Integer states = lua_tointeger(L, 4);
|
||||
|
||||
Chunk* chunk = scripting::level->chunks->getChunkByVoxel(x, y, z);
|
||||
if (chunk == nullptr) {
|
||||
@ -186,11 +187,11 @@ int l_set_block_states(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_get_block_user_bits(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua::luaint offset = lua_tointeger(L, 4) + VOXEL_USER_BITS_OFFSET;
|
||||
lua::luaint bits = lua_tointeger(L, 5);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
lua_Integer offset = lua_tointeger(L, 4) + VOXEL_USER_BITS_OFFSET;
|
||||
lua_Integer bits = lua_tointeger(L, 5);
|
||||
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
@ -204,14 +205,14 @@ int l_get_block_user_bits(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_set_block_user_bits(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua::luaint offset = lua_tointeger(L, 4) + VOXEL_USER_BITS_OFFSET;
|
||||
lua::luaint bits = lua_tointeger(L, 5);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
lua_Integer offset = lua_tointeger(L, 4) + VOXEL_USER_BITS_OFFSET;
|
||||
lua_Integer bits = lua_tointeger(L, 5);
|
||||
|
||||
uint mask = ((1 << bits) - 1) << offset;
|
||||
lua::luaint value = (lua_tointeger(L, 6) << offset) & mask;
|
||||
size_t mask = ((1 << bits) - 1) << offset;
|
||||
lua_Integer value = (lua_tointeger(L, 6) << offset) & mask;
|
||||
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
@ -222,9 +223,9 @@ int l_set_block_user_bits(lua_State* L) {
|
||||
}
|
||||
|
||||
int l_is_replaceable_at(lua_State* L) {
|
||||
int x = lua_tointeger(L, 1);
|
||||
int y = lua_tointeger(L, 2);
|
||||
int z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
|
||||
lua_pushboolean(L, scripting::level->chunks->isReplaceableBlock(x, y, z));
|
||||
return 1;
|
||||
|
||||
@ -14,11 +14,11 @@ namespace scripting {
|
||||
using namespace scripting;
|
||||
|
||||
static int l_add_command(lua_State* L) {
|
||||
if (!lua_isstring(L, 1) || !lua_isstring(L, 2) || !lua_isfunction(L, 3)) {
|
||||
throw std::runtime_error("invalid argument type");
|
||||
if (!lua_isfunction(L, 3)) {
|
||||
throw std::runtime_error("invalid callback");
|
||||
}
|
||||
auto scheme = lua_tostring(L, 1);
|
||||
auto description = lua_tostring(L, 2);
|
||||
auto scheme = state->requireString(1);
|
||||
auto description = state->requireString(2);
|
||||
lua_pushvalue(L, 3);
|
||||
auto func = state->createLambda();
|
||||
try {
|
||||
@ -33,15 +33,15 @@ static int l_add_command(lua_State* L) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_execute(lua_State* L) {
|
||||
auto prompt = lua_tostring(L, 1);
|
||||
static int l_execute(lua_State*) {
|
||||
auto prompt = state->requireString(1);
|
||||
auto result = engine->getCommandsInterpreter()->execute(prompt);
|
||||
state->pushvalue(result);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_set(lua_State* L) {
|
||||
auto name = lua_tostring(L, 1);
|
||||
static int l_set(lua_State*) {
|
||||
auto name = state->requireString(1);
|
||||
auto value = state->tovalue(2);
|
||||
(*engine->getCommandsInterpreter())[name] = value;
|
||||
return 0;
|
||||
@ -62,7 +62,7 @@ static int l_get_commands_list(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_get_command_info(lua_State* L) {
|
||||
auto name = lua_tostring(L, 1);
|
||||
auto name = state->requireString(1);
|
||||
auto interpreter = engine->getCommandsInterpreter();
|
||||
auto repo = interpreter->getRepository();
|
||||
auto command = repo->get(name);
|
||||
|
||||
@ -40,14 +40,14 @@ static int l_hud_close_inventory(lua_State*) {
|
||||
}
|
||||
|
||||
static int l_hud_open_block(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
auto x = lua_tointeger(L, 1);
|
||||
auto y = lua_tointeger(L, 2);
|
||||
auto z = lua_tointeger(L, 3);
|
||||
bool playerInventory = !lua_toboolean(L, 4);
|
||||
|
||||
voxel* vox = scripting::level->chunks->get(x, y, z);
|
||||
if (vox == nullptr) {
|
||||
throw std::runtime_error("block does not exists at "+
|
||||
throw std::runtime_error("block does not exists at " +
|
||||
std::to_string(x) + " " + std::to_string(y) + " " + std::to_string(z)
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
#include "lua_commons.hpp"
|
||||
|
||||
#include "api_lua.hpp"
|
||||
#include "lua_util.hpp"
|
||||
|
||||
#include "../scripting.hpp"
|
||||
#include "../../../content/Content.hpp"
|
||||
#include "../../../world/Level.hpp"
|
||||
@ -38,8 +40,8 @@ static void validate_slotid(int slotid, Inventory* inv) {
|
||||
}
|
||||
|
||||
static int l_inventory_get(lua_State* L) {
|
||||
lua::luaint invid = lua_tointeger(L, 1);
|
||||
lua::luaint slotid = lua_tointeger(L, 2);
|
||||
lua_Integer invid = lua_tointeger(L, 1);
|
||||
lua_Integer slotid = lua_tointeger(L, 2);
|
||||
auto inv = get_inventory(invid);
|
||||
validate_slotid(slotid, inv.get());
|
||||
const ItemStack& item = inv->getSlot(slotid);
|
||||
@ -49,10 +51,10 @@ static int l_inventory_get(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_inventory_set(lua_State* L) {
|
||||
lua::luaint invid = lua_tointeger(L, 1);
|
||||
lua::luaint slotid = lua_tointeger(L, 2);
|
||||
lua::luaint itemid = lua_tointeger(L, 3);
|
||||
lua::luaint count = lua_tointeger(L, 4);
|
||||
lua_Integer invid = lua_tointeger(L, 1);
|
||||
lua_Integer slotid = lua_tointeger(L, 2);
|
||||
lua_Integer itemid = lua_tointeger(L, 3);
|
||||
lua_Integer count = lua_tointeger(L, 4);
|
||||
validate_itemid(itemid);
|
||||
|
||||
auto inv = get_inventory(invid);
|
||||
@ -64,16 +66,16 @@ static int l_inventory_set(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_inventory_size(lua_State* L) {
|
||||
lua::luaint invid = lua_tointeger(L, 1);
|
||||
lua_Integer invid = lua_tointeger(L, 1);
|
||||
auto inv = get_inventory(invid);
|
||||
lua_pushinteger(L, inv->size());
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_inventory_add(lua_State* L) {
|
||||
lua::luaint invid = lua_tointeger(L, 1);
|
||||
lua::luaint itemid = lua_tointeger(L, 2);
|
||||
lua::luaint count = lua_tointeger(L, 3);
|
||||
lua_Integer invid = lua_tointeger(L, 1);
|
||||
lua_Integer itemid = lua_tointeger(L, 2);
|
||||
lua_Integer count = lua_tointeger(L, 3);
|
||||
validate_itemid(itemid);
|
||||
|
||||
auto inv = get_inventory(invid);
|
||||
@ -84,33 +86,33 @@ static int l_inventory_add(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_inventory_get_block(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
int64_t id = scripting::blocks->createBlockInventory(x, y, z);
|
||||
lua_pushinteger(L, id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_inventory_bind_block(lua_State* L) {
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
lua::luaint x = lua_tointeger(L, 2);
|
||||
lua::luaint y = lua_tointeger(L, 3);
|
||||
lua::luaint z = lua_tointeger(L, 4);
|
||||
lua_Integer id = lua_tointeger(L, 1);
|
||||
lua_Integer x = lua_tointeger(L, 2);
|
||||
lua_Integer y = lua_tointeger(L, 3);
|
||||
lua_Integer z = lua_tointeger(L, 4);
|
||||
scripting::blocks->bindInventory(id, x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_inventory_unbind_block(lua_State* L) {
|
||||
lua::luaint x = lua_tointeger(L, 1);
|
||||
lua::luaint y = lua_tointeger(L, 2);
|
||||
lua::luaint z = lua_tointeger(L, 3);
|
||||
lua_Integer x = lua_tointeger(L, 1);
|
||||
lua_Integer y = lua_tointeger(L, 2);
|
||||
lua_Integer z = lua_tointeger(L, 3);
|
||||
scripting::blocks->unbindInventory(x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_inventory_clone(lua_State* L) {
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
lua_Integer id = lua_tointeger(L, 1);
|
||||
auto clone = scripting::level->inventories->clone(id);
|
||||
if (clone == nullptr) {
|
||||
lua_pushinteger(L, 0);
|
||||
@ -121,13 +123,13 @@ static int l_inventory_clone(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_inventory_move(lua_State* L) {
|
||||
lua::luaint invAid = lua_tointeger(L, 1);
|
||||
lua::luaint slotAid = lua_tointeger(L, 2);
|
||||
lua_Integer invAid = lua_tointeger(L, 1);
|
||||
lua_Integer slotAid = lua_tointeger(L, 2);
|
||||
auto invA = get_inventory(invAid, 1);
|
||||
validate_slotid(slotAid, invA.get());
|
||||
|
||||
lua::luaint invBid = lua_tointeger(L, 3);
|
||||
lua::luaint slotBid = lua_isnil(L, 4) ? -1 : lua_tointeger(L, 4);
|
||||
lua_Integer invBid = lua_tointeger(L, 3);
|
||||
lua_Integer slotBid = lua_isnil(L, 4) ? -1 : lua_tointeger(L, 4);
|
||||
auto invB = get_inventory(invBid, 3);
|
||||
auto& slot = invA->getSlot(slotAid);
|
||||
if (slotBid == -1) {
|
||||
|
||||
@ -1,13 +1,20 @@
|
||||
#include "lua_commons.hpp"
|
||||
#include "api_lua.hpp"
|
||||
#include "LuaState.hpp"
|
||||
#include "../scripting.hpp"
|
||||
#include "../../../content/Content.hpp"
|
||||
#include "../../../items/ItemDef.hpp"
|
||||
|
||||
namespace scripting {
|
||||
extern lua::LuaState* state;
|
||||
}
|
||||
|
||||
using namespace scripting;
|
||||
|
||||
static int l_item_name(lua_State* L) {
|
||||
auto indices = scripting::content->getIndices();
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
if (id < 0 || size_t(id) >= indices->countItemDefs()) {
|
||||
lua_Number id = lua_tointeger(L, 1);
|
||||
if (static_cast<size_t>(id) >= indices->countItemDefs()) {
|
||||
return 0;
|
||||
}
|
||||
auto def = indices->getItemDef(id);
|
||||
@ -16,14 +23,14 @@ static int l_item_name(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_item_index(lua_State* L) {
|
||||
auto name = lua_tostring(L, 1);
|
||||
auto name = scripting::state->requireString(1);
|
||||
lua_pushinteger(L, scripting::content->requireItem(name).rt.id);
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int l_item_stack_size(lua_State* L) {
|
||||
auto indices = scripting::content->getIndices();
|
||||
lua::luaint id = lua_tointeger(L, 1);
|
||||
lua_Integer id = lua_tointeger(L, 1);
|
||||
if (id < 0 || size_t(id) >= indices->countItemDefs()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -9,10 +9,15 @@
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
inline std::shared_ptr<Player> get_player(lua_State* L, int idx) {
|
||||
return scripting::level->getObject<Player>(lua_tointeger(L, idx));
|
||||
}
|
||||
|
||||
static int l_player_get_pos(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (!player) return 0;
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
glm::vec3 pos = player->hitbox->position;
|
||||
lua_pushnumber(L, pos.x);
|
||||
lua_pushnumber(L, pos.y);
|
||||
@ -21,19 +26,22 @@ static int l_player_get_pos(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_player_set_pos(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
lua::luanumber x = lua_tonumber(L, 2);
|
||||
lua::luanumber y = lua_tonumber(L, 3);
|
||||
lua::luanumber z = lua_tonumber(L, 4);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (player) player->hitbox->position = glm::vec3(x, y, z);
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
auto x = lua_tonumber(L, 2);
|
||||
auto y = lua_tonumber(L, 3);
|
||||
auto z = lua_tonumber(L, 4);
|
||||
player->hitbox->position = glm::vec3(x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_player_get_vel(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (!player) return 0;
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
glm::vec3 vel = player->hitbox->velocity;
|
||||
lua_pushnumber(L, vel.x);
|
||||
lua_pushnumber(L, vel.y);
|
||||
@ -42,19 +50,22 @@ static int l_player_get_vel(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_player_set_vel(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
lua::luanumber x = lua_tonumber(L, 2);
|
||||
lua::luanumber y = lua_tonumber(L, 3);
|
||||
lua::luanumber z = lua_tonumber(L, 4);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (player) player->hitbox->velocity = glm::vec3(x, y, z);
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
auto x = lua_tonumber(L, 2);
|
||||
auto y = lua_tonumber(L, 3);
|
||||
auto z = lua_tonumber(L, 4);
|
||||
player->hitbox->velocity = glm::vec3(x, y, z);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_player_get_rot(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (!player) return 0;
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
glm::vec2 rot = player->cam;
|
||||
lua_pushnumber(L, rot.x);
|
||||
lua_pushnumber(L, rot.y);
|
||||
@ -62,11 +73,12 @@ static int l_player_get_rot(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_player_set_rot(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (!player) return 0;
|
||||
lua::luanumber x = lua_tonumber(L, 2);
|
||||
lua::luanumber y = lua_tonumber(L, 3);
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
auto x = lua_tonumber(L, 2);
|
||||
auto y = lua_tonumber(L, 3);
|
||||
glm::vec2& cam = player->cam;
|
||||
cam.x = x;
|
||||
cam.y = y;
|
||||
@ -74,14 +86,45 @@ static int l_player_set_rot(lua_State* L) {
|
||||
}
|
||||
|
||||
static int l_player_get_inv(lua_State* L) {
|
||||
int playerid = lua_tointeger(L, 1);
|
||||
auto player = scripting::level->getObject<Player>(playerid);
|
||||
if (!player) return 0;
|
||||
auto player = get_player(L, 1);
|
||||
if (!player) {
|
||||
return 0;
|
||||
}
|
||||
lua_pushinteger(L, player->getInventory()->getId());
|
||||
lua_pushinteger(L, player->getChosenSlot());
|
||||
return 2;
|
||||
}
|
||||
|
||||
static int l_player_is_flight(lua_State* L) {
|
||||
if (auto player = get_player(L, 1)) {
|
||||
lua_pushboolean(L, player->isFlight());
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_player_set_flight(lua_State* L) {
|
||||
if (auto player = get_player(L, 1)) {
|
||||
player->setFlight(lua_toboolean(L, 2));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_player_is_noclip(lua_State* L) {
|
||||
if (auto player = get_player(L, 1)) {
|
||||
lua_pushboolean(L, player->isNoclip());
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_player_set_noclip(lua_State* L) {
|
||||
if (auto player = get_player(L, 1)) {
|
||||
player->setNoclip(lua_toboolean(L, 2));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const luaL_Reg playerlib [] = {
|
||||
{"get_pos", lua_wrap_errors<l_player_get_pos>},
|
||||
{"set_pos", lua_wrap_errors<l_player_set_pos>},
|
||||
@ -90,5 +133,9 @@ const luaL_Reg playerlib [] = {
|
||||
{"get_rot", lua_wrap_errors<l_player_get_rot>},
|
||||
{"set_rot", lua_wrap_errors<l_player_set_rot>},
|
||||
{"get_inventory", lua_wrap_errors<l_player_get_inv>},
|
||||
{"is_flight", lua_wrap_errors<l_player_is_flight>},
|
||||
{"set_flight", lua_wrap_errors<l_player_set_flight>},
|
||||
{"is_noclip", lua_wrap_errors<l_player_is_noclip>},
|
||||
{"set_noclip", lua_wrap_errors<l_player_set_noclip>},
|
||||
{NULL, NULL}
|
||||
};
|
||||
|
||||
@ -7,14 +7,14 @@
|
||||
#else
|
||||
#include <lua.hpp>
|
||||
#endif
|
||||
|
||||
#ifndef LUAJIT_VERSION
|
||||
#error LuaJIT required
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <exception>
|
||||
|
||||
namespace lua {
|
||||
using luaint = lua_Integer;
|
||||
using luanumber = lua_Number;
|
||||
}
|
||||
|
||||
template <lua_CFunction func> int lua_wrap_errors(lua_State *L) {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
#include <stdexcept>
|
||||
|
||||
namespace lua {
|
||||
inline int pushivec3(lua_State* L, luaint x, luaint y, luaint z) {
|
||||
inline int pushivec3(lua_State* L, lua_Integer x, lua_Integer y, lua_Integer z) {
|
||||
lua_pushinteger(L, x);
|
||||
lua_pushinteger(L, y);
|
||||
lua_pushinteger(L, z);
|
||||
@ -100,9 +100,9 @@ namespace lua {
|
||||
throw std::runtime_error("value must be an array of two numbers");
|
||||
}
|
||||
lua_rawgeti(L, -1, 1);
|
||||
lua::luanumber x = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number x = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_rawgeti(L, -1, 2);
|
||||
lua::luanumber y = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number y = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_pop(L, 1);
|
||||
return glm::vec2(x, y);
|
||||
}
|
||||
@ -113,13 +113,13 @@ namespace lua {
|
||||
throw std::runtime_error("RGBA array required");
|
||||
}
|
||||
lua_rawgeti(L, -1, 1);
|
||||
lua::luanumber r = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number r = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_rawgeti(L, -1, 2);
|
||||
lua::luanumber g = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number g = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_rawgeti(L, -1, 3);
|
||||
lua::luanumber b = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number b = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_rawgeti(L, -1, 4);
|
||||
lua::luanumber a = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_Number a = lua_tonumber(L, -1); lua_pop(L, 1);
|
||||
lua_pop(L, 1);
|
||||
return glm::vec4(r/255, g/255, b/255, a/255);
|
||||
}
|
||||
|
||||
@ -137,7 +137,8 @@ doublesupplier scripting::create_number_supplier(
|
||||
if (state->isfunction(-1)) {
|
||||
state->callNoThrow(0);
|
||||
}
|
||||
lua::luanumber x = state->tonumber(-1); state->pop();
|
||||
auto x = state->tonumber(-1);
|
||||
state->pop();
|
||||
return x;
|
||||
}
|
||||
return 0.0;
|
||||
@ -169,8 +170,8 @@ vec2supplier scripting::create_vec2_supplier(
|
||||
if (state->isfunction(-1)) {
|
||||
state->callNoThrow(0);
|
||||
}
|
||||
lua::luanumber y = state->tonumber(-1); state->pop();
|
||||
lua::luanumber x = state->tonumber(-1); state->pop();
|
||||
auto y = state->tonumber(-1); state->pop();
|
||||
auto x = state->tonumber(-1); state->pop();
|
||||
return glm::vec2(x, y);
|
||||
}
|
||||
return glm::vec2(0, 0);
|
||||
|
||||
@ -167,6 +167,22 @@ float Player::getSpeed() const {
|
||||
return speed;
|
||||
}
|
||||
|
||||
bool Player::isFlight() const {
|
||||
return flight;
|
||||
}
|
||||
|
||||
void Player::setFlight(bool flag) {
|
||||
this->flight = flag;
|
||||
}
|
||||
|
||||
bool Player::isNoclip() const {
|
||||
return noclip;
|
||||
}
|
||||
|
||||
void Player::setNoclip(bool flag) {
|
||||
this->noclip = flag;
|
||||
}
|
||||
|
||||
std::shared_ptr<Inventory> Player::getInventory() const {
|
||||
return inventory;
|
||||
}
|
||||
|
||||
@ -37,12 +37,12 @@ class Player : public Object, public Serializable {
|
||||
int chosenSlot;
|
||||
glm::vec3 spawnpoint {};
|
||||
std::shared_ptr<Inventory> inventory;
|
||||
bool flight = false;
|
||||
bool noclip = false;
|
||||
public:
|
||||
std::shared_ptr<Camera> camera, spCamera, tpCamera;
|
||||
std::shared_ptr<Camera> currentCamera;
|
||||
std::unique_ptr<Hitbox> hitbox;
|
||||
bool flight = false;
|
||||
bool noclip = false;
|
||||
bool debug = false;
|
||||
voxel selectedVoxel {0, 0};
|
||||
glm::vec2 cam {};
|
||||
@ -59,6 +59,12 @@ public:
|
||||
|
||||
int getChosenSlot() const;
|
||||
float getSpeed() const;
|
||||
|
||||
bool isFlight() const;
|
||||
void setFlight(bool flag);
|
||||
|
||||
bool isNoclip() const;
|
||||
void setNoclip(bool flag);
|
||||
|
||||
std::shared_ptr<Inventory> getInventory() const;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user