mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-05 11:01:49 +00:00
update libplayer.cpp
This commit is contained in:
parent
b49e2106b3
commit
68ef974096
1 changed files with 22 additions and 9 deletions
|
|
@ -14,6 +14,13 @@
|
|||
|
||||
using namespace scripting;
|
||||
|
||||
static Level& require_level() {
|
||||
if (level == nullptr) {
|
||||
throw std::runtime_error("world is not loaded");
|
||||
}
|
||||
return *level;
|
||||
}
|
||||
|
||||
inline Player* get_player(lua::State* L, int idx) {
|
||||
if (!lua::isnumber(L, idx)) {
|
||||
if (engine->isHeadless()) {
|
||||
|
|
@ -22,7 +29,7 @@ inline Player* get_player(lua::State* L, int idx) {
|
|||
);
|
||||
}
|
||||
}
|
||||
return level->players->get(lua::tointeger(L, idx));
|
||||
return require_level().players->get(lua::tointeger(L, idx));
|
||||
}
|
||||
|
||||
static int l_get_pos(lua::State* L) {
|
||||
|
|
@ -304,15 +311,18 @@ static int l_create(lua::State* L) {
|
|||
if (lua::gettop(L) >= 2) {
|
||||
playerId = lua::tointeger(L, 2);
|
||||
}
|
||||
auto player = level->players->create(playerId);
|
||||
auto& level = require_level();
|
||||
auto player = level.players->create(playerId);
|
||||
player->setName(lua::require_string(L, 1));
|
||||
return lua::pushinteger(L, player->getId());
|
||||
}
|
||||
|
||||
static int l_delete(lua::State* L) {
|
||||
auto id = lua::tointeger(L, 1);
|
||||
level->players->suspend(id);
|
||||
level->players->remove(id);
|
||||
|
||||
auto& level = require_level();
|
||||
level.players->suspend(id);
|
||||
level.players->remove(id);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -324,19 +334,21 @@ static int l_is_suspended(lua::State* L) {
|
|||
}
|
||||
|
||||
static int l_set_suspended(lua::State* L) {
|
||||
auto& level = require_level();
|
||||
if (lua::toboolean(L, 2)) {
|
||||
level->players->suspend(lua::tointeger(L, 1));
|
||||
level.players->suspend(lua::tointeger(L, 1));
|
||||
} else {
|
||||
level->players->resume(lua::tointeger(L, 1));
|
||||
level.players->resume(lua::tointeger(L, 1));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int l_get_all_in_radius(lua::State* L) {
|
||||
auto& level = require_level();
|
||||
auto center = lua::tovec3(L, 1);
|
||||
auto radius = static_cast<float>(lua::tonumber(L, 2));
|
||||
|
||||
auto players = level->players->getAllInRadius(center, radius);
|
||||
auto players = level.players->getAllInRadius(center, radius);
|
||||
lua::createtable(L, players.size(), 0);
|
||||
for (size_t i = 0; i < players.size(); i++) {
|
||||
lua::pushinteger(L, players[i]->getId());
|
||||
|
|
@ -346,7 +358,7 @@ static int l_get_all_in_radius(lua::State* L) {
|
|||
}
|
||||
|
||||
static int l_get_all(lua::State* L) {
|
||||
auto players = level->players->getAll();
|
||||
auto players = require_level().players->getAll();
|
||||
lua::createtable(L, players.size(), 0);
|
||||
for (size_t i = 0; i < players.size(); i++) {
|
||||
lua::pushinteger(L, players[i]->getId());
|
||||
|
|
@ -356,8 +368,9 @@ static int l_get_all(lua::State* L) {
|
|||
}
|
||||
|
||||
static int l_get_nearest(lua::State* L) {
|
||||
auto& level = require_level();
|
||||
auto position = lua::tovec3(L, 1);
|
||||
if (auto player = level->players->getNearest(position)) {
|
||||
if (auto player = level.players->getNearest(position)) {
|
||||
lua::pushinteger(L, player->getId());
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue