Luanti 5.15.0-dev
 
Loading...
Searching...
No Matches
c_converter.h
Go to the documentation of this file.
1// Luanti
2// SPDX-License-Identifier: LGPL-2.1-or-later
3// Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
4
5
6/******************************************************************************/
7/******************************************************************************/
8/* WARNING!!!! do NOT add this header in any include file or any code file */
9/* not being a script/modapi file!!!!!!!! */
10/******************************************************************************/
11/******************************************************************************/
12#pragma once
13
14#include <vector>
15#include <string>
16#include <string_view>
17
19
20extern "C" {
21#include <lua.h>
22}
23
24std::string getstringfield_default(lua_State *L, int table,
25 const char *fieldname, const std::string &default_);
26bool getboolfield_default(lua_State *L, int table,
27 const char *fieldname, bool default_);
28float getfloatfield_default(lua_State *L, int table,
29 const char *fieldname, float default_);
30int getintfield_default(lua_State *L, int table,
31 const char *fieldname, int default_);
32
33bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname);
34
35template<typename T>
36bool getintfield(lua_State *L, int table, const char *fieldname, T &result)
37{
38 lua_getfield(L, table, fieldname);
39 bool got = false;
40 if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)){
41 result = lua_tointeger(L, -1);
42 got = true;
43 }
44 lua_pop(L, 1);
45 return got;
46}
47
48// Retrieve an v3s16 where all components are optional (falls back to default)
49v3s16 getv3s16field_default(lua_State *L, int table,
50 const char *fieldname, v3s16 default_);
51
52bool getstringfield(lua_State *L, int table,
53 const char *fieldname, std::string &result);
54bool getstringfield(lua_State *L, int table,
55 const char *fieldname, std::string_view &result);
56size_t getstringlistfield(lua_State *L, int table,
57 const char *fieldname, std::vector<std::string> *result);
58bool getboolfield(lua_State *L, int table,
59 const char *fieldname, bool &result);
60bool getfloatfield(lua_State *L, int table,
61 const char *fieldname, float &result);
62
63void setstringfield(lua_State *L, int table,
64 const char *fieldname, const std::string &value);
65void setintfield(lua_State *L, int table,
66 const char *fieldname, int value);
67void setfloatfield(lua_State *L, int table,
68 const char *fieldname, float value);
69void setboolfield(lua_State *L, int table,
70 const char *fieldname, bool value);
71
72v3f checkFloatPos(lua_State *L, int index);
73v2f check_v2f(lua_State *L, int index);
74v3f check_v3f(lua_State *L, int index);
75v3s16 check_v3s16(lua_State *L, int index);
76
77// TODO: some day we should figure out the type-checking situation so it's done
78// everywhere. (right now {x=true, y=false} as v2f is {0,0} with no warning)
79
81v3f read_v3f(lua_State *L, int index);
83v2f read_v2f(lua_State *L, int index);
85v2s16 read_v2s16(lua_State *L, int index);
87v2s32 read_v2s32(lua_State *L, int index);
89v3s16 read_v3s16(lua_State *L, int index);
90
91video::SColor read_ARGB8(lua_State *L, int index);
92bool read_color(lua_State *L, int index, video::SColor *color);
93bool is_color_table(lua_State *L, int index);
94
106aabb3f read_aabb3f(lua_State *L, int index, f32 scale);
107
108std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
109size_t read_stringlist(lua_State *L, int index,
110 std::vector<std::string> *result);
111
112void push_v2s16(lua_State *L, v2s16 p);
113void push_v2s32(lua_State *L, v2s32 p);
114void push_v2u32(lua_State *L, v2u32 p);
115void push_v3s16(lua_State *L, v3s16 p);
116void push_aabb3f(lua_State *L, aabb3f box, f32 divisor = 1.0f);
117void push_ARGB8(lua_State *L, video::SColor color);
118void pushFloatPos(lua_State *L, v3f p);
119void push_v3f(lua_State *L, v3f p);
120void push_v2f(lua_State *L, v2f p);
121void push_aabb3f_vector(lua_State *L, const std::vector<aabb3f> &boxes,
122 f32 divisor = 1.0f);
123
124size_t write_array_slice_float(lua_State *L, int table_index, float *data,
125 v3u16 data_size, v3u16 slice_offset, v3u16 slice_size);
126
127// This must match the implementation in builtin/game/misc_s.lua
128// Note that this returns a floating point result as Lua integers are 32-bit
129inline lua_Number hash_node_position(v3s16 pos)
130{
131 return (((s64)pos.Z + 0x8000L) << 32)
132 | (((s64)pos.Y + 0x8000L) << 16)
133 | ((s64)pos.X + 0x8000L);
134}
bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname)
Definition c_converter.cpp:437
std::vector< aabb3f > read_aabb3f_vector(lua_State *L, int index, f32 scale)
Definition c_converter.cpp:371
void push_ARGB8(lua_State *L, video::SColor color)
Definition c_converter.cpp:210
int getintfield_default(lua_State *L, int table, const char *fieldname, int default_)
Definition c_converter.cpp:547
size_t write_array_slice_float(lua_State *L, int table_index, float *data, v3u16 data_size, v3u16 slice_offset, v3u16 slice_size)
Definition c_converter.cpp:619
size_t read_stringlist(lua_State *L, int index, std::vector< std::string > *result)
Definition c_converter.cpp:409
bool is_color_table(lua_State *L, int index)
Definition c_converter.cpp:304
size_t getstringlistfield(lua_State *L, int table, const char *fieldname, std::vector< std::string > *result)
Definition c_converter.cpp:528
v2f check_v2f(lua_State *L, int index)
Definition c_converter.cpp:154
void push_v2f(lua_State *L, v2f p)
Definition c_converter.cpp:97
void push_v2s16(lua_State *L, v2s16 p)
Definition c_converter.cpp:111
v3s16 check_v3s16(lua_State *L, int index)
Definition c_converter.cpp:250
v3f checkFloatPos(lua_State *L, int index)
Definition c_converter.cpp:229
v3f check_v3f(lua_State *L, int index)
Definition c_converter.cpp:176
void pushFloatPos(lua_State *L, v3f p)
Definition c_converter.cpp:223
bool getstringfield(lua_State *L, int table, const char *fieldname, std::string &result)
Definition c_converter.cpp:471
bool read_color(lua_State *L, int index, video::SColor *color)
Definition c_converter.cpp:257
void push_v3f(lua_State *L, v3f p)
Definition c_converter.cpp:88
v2f read_v2f(lua_State *L, int index)
Definition c_converter.cpp:139
bool getfloatfield(lua_State *L, int table, const char *fieldname, float &result)
Definition c_converter.cpp:500
bool getintfield(lua_State *L, int table, const char *fieldname, T &result)
Definition c_converter.h:36
float getfloatfield_default(lua_State *L, int table, const char *fieldname, float default_)
Definition c_converter.cpp:555
void setintfield(lua_State *L, int table, const char *fieldname, int value)
Definition c_converter.cpp:587
v2s32 read_v2s32(lua_State *L, int index)
Definition c_converter.cpp:134
void setstringfield(lua_State *L, int table, const char *fieldname, const std::string &value)
Definition c_converter.cpp:578
lua_Number hash_node_position(v3s16 pos)
Definition c_converter.h:129
void push_aabb3f_vector(lua_State *L, const std::vector< aabb3f > &boxes, f32 divisor=1.0f)
Definition c_converter.cpp:399
v3f read_v3f(lua_State *L, int index)
Definition c_converter.cpp:171
v2s16 read_v2s16(lua_State *L, int index)
Definition c_converter.cpp:106
std::string getstringfield_default(lua_State *L, int table, const char *fieldname, const std::string &default_)
Definition c_converter.cpp:539
void push_v2s32(lua_State *L, v2s32 p)
Definition c_converter.cpp:116
void push_v2u32(lua_State *L, v2u32 p)
Definition c_converter.cpp:125
video::SColor read_ARGB8(lua_State *L, int index)
Definition c_converter.cpp:276
bool getboolfield_default(lua_State *L, int table, const char *fieldname, bool default_)
Definition c_converter.cpp:563
void setfloatfield(lua_State *L, int table, const char *fieldname, float value)
Definition c_converter.cpp:596
aabb3f read_aabb3f(lua_State *L, int index, f32 scale)
Read a floating-point axis-aligned box from Lua.
Definition c_converter.cpp:326
v3s16 getv3s16field_default(lua_State *L, int table, const char *fieldname, v3s16 default_)
Definition c_converter.cpp:571
void push_v3s16(lua_State *L, v3s16 p)
Definition c_converter.cpp:234
v3s16 read_v3s16(lua_State *L, int index)
Definition c_converter.cpp:243
bool getboolfield(lua_State *L, int table, const char *fieldname, bool &result)
Definition c_converter.cpp:514
void push_aabb3f(lua_State *L, aabb3f box, f32 divisor=1.0f)
Definition c_converter.cpp:354
void setboolfield(lua_State *L, int table, const char *fieldname, bool value)
Definition c_converter.cpp:605
core::aabbox3d< f32 > aabb3f
Definition irr_aabb3d.h:11
core::vector2d< s32 > v2s32
Definition irr_v2d.h:13
core::vector2d< s16 > v2s16
Definition irr_v2d.h:12
core::vector2d< f32 > v2f
Definition irr_v2d.h:11
core::vector2d< u32 > v2u32
Definition irr_v2d.h:14
core::vector3d< u16 > v3u16
Definition irr_v3d.h:14
core::vector3d< s16 > v3s16
Definition irr_v3d.h:13
core::vector3df v3f
Definition irr_v3d.h:11
static std::vector< table_key > table
Definition keycode.cpp:32
static std::string p(std::string path)
Definition test_filesys.cpp:64