Luanti 5.11.0-dev
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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_view>
16
18
19extern "C" {
20#include <lua.h>
21}
22
23std::string getstringfield_default(lua_State *L, int table,
24 const char *fieldname, const std::string &default_);
25bool getboolfield_default(lua_State *L, int table,
26 const char *fieldname, bool default_);
27float getfloatfield_default(lua_State *L, int table,
28 const char *fieldname, float default_);
29int getintfield_default(lua_State *L, int table,
30 const char *fieldname, int default_);
31
32bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname);
33
34template<typename T>
35bool getintfield(lua_State *L, int table, const char *fieldname, T &result)
36{
37 lua_getfield(L, table, fieldname);
38 bool got = false;
39 if (check_field_or_nil(L, -1, LUA_TNUMBER, fieldname)){
40 result = lua_tointeger(L, -1);
41 got = true;
42 }
43 lua_pop(L, 1);
44 return got;
45}
46
47// Retrieve an v3s16 where all components are optional (falls back to default)
48v3s16 getv3s16field_default(lua_State *L, int table,
49 const char *fieldname, v3s16 default_);
50
51bool getstringfield(lua_State *L, int table,
52 const char *fieldname, std::string &result);
53bool getstringfield(lua_State *L, int table,
54 const char *fieldname, std::string_view &result);
55size_t getstringlistfield(lua_State *L, int table,
56 const char *fieldname, std::vector<std::string> *result);
57bool getboolfield(lua_State *L, int table,
58 const char *fieldname, bool &result);
59bool getfloatfield(lua_State *L, int table,
60 const char *fieldname, float &result);
61
62void setstringfield(lua_State *L, int table,
63 const char *fieldname, const std::string &value);
64void setintfield(lua_State *L, int table,
65 const char *fieldname, int value);
66void setfloatfield(lua_State *L, int table,
67 const char *fieldname, float value);
68void setboolfield(lua_State *L, int table,
69 const char *fieldname, bool value);
70
71v3f checkFloatPos(lua_State *L, int index);
72v2f check_v2f(lua_State *L, int index);
73v3f check_v3f(lua_State *L, int index);
74v3s16 check_v3s16(lua_State *L, int index);
75
76v3f read_v3f(lua_State *L, int index);
77v2f read_v2f(lua_State *L, int index);
78v2s16 read_v2s16(lua_State *L, int index);
79v2s32 read_v2s32(lua_State *L, int index);
80video::SColor read_ARGB8(lua_State *L, int index);
81bool read_color(lua_State *L, int index, video::SColor *color);
82bool is_color_table (lua_State *L, int index);
83
95aabb3f read_aabb3f(lua_State *L, int index, f32 scale);
96
97v3s16 read_v3s16(lua_State *L, int index);
98std::vector<aabb3f> read_aabb3f_vector (lua_State *L, int index, f32 scale);
99size_t read_stringlist(lua_State *L, int index,
100 std::vector<std::string> *result);
101
102void push_v2s16(lua_State *L, v2s16 p);
103void push_v2s32(lua_State *L, v2s32 p);
104void push_v2u32(lua_State *L, v2u32 p);
105void push_v3s16(lua_State *L, v3s16 p);
106void push_aabb3f(lua_State *L, aabb3f box, f32 divisor = 1.0f);
107void push_ARGB8(lua_State *L, video::SColor color);
108void pushFloatPos(lua_State *L, v3f p);
109void push_v3f(lua_State *L, v3f p);
110void push_v2f(lua_State *L, v2f p);
111void push_aabb3f_vector(lua_State *L, const std::vector<aabb3f> &boxes,
112 f32 divisor = 1.0f);
113
114void warn_if_field_exists(lua_State *L, int table, const char *fieldname,
115 std::string_view name, std::string_view message);
116
117size_t write_array_slice_float(lua_State *L, int table_index, float *data,
118 v3u16 data_size, v3u16 slice_offset, v3u16 slice_size);
119
120// This must match the implementation in builtin/game/misc_s.lua
121// Note that this returns a floating point result as Lua integers are 32-bit
122inline lua_Number hash_node_position(v3s16 pos)
123{
124 return (((s64)pos.Z + 0x8000L) << 32)
125 | (((s64)pos.Y + 0x8000L) << 16)
126 | ((s64)pos.X + 0x8000L);
127}
bool check_field_or_nil(lua_State *L, int index, int type, const char *fieldname)
Definition c_converter.cpp:439
std::vector< aabb3f > read_aabb3f_vector(lua_State *L, int index, f32 scale)
Definition c_converter.cpp:373
void warn_if_field_exists(lua_State *L, int table, const char *fieldname, std::string_view name, std::string_view message)
Definition c_content.cpp:1320
void push_ARGB8(lua_State *L, video::SColor color)
Definition c_converter.cpp:217
int getintfield_default(lua_State *L, int table, const char *fieldname, int default_)
Definition c_converter.cpp:549
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:621
size_t read_stringlist(lua_State *L, int index, std::vector< std::string > *result)
Definition c_converter.cpp:411
bool is_color_table(lua_State *L, int index)
Definition c_converter.cpp:306
size_t getstringlistfield(lua_State *L, int table, const char *fieldname, std::vector< std::string > *result)
Definition c_converter.cpp:530
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:79
void push_v2s16(lua_State *L, v2s16 p)
Definition c_converter.cpp:101
v3s16 check_v3s16(lua_State *L, int index)
Definition c_converter.cpp:257
v3f checkFloatPos(lua_State *L, int index)
Definition c_converter.cpp:236
v3f check_v3f(lua_State *L, int index)
Definition c_converter.cpp:181
void pushFloatPos(lua_State *L, v3f p)
Definition c_converter.cpp:230
bool getstringfield(lua_State *L, int table, const char *fieldname, std::string &result)
Definition c_converter.cpp:473
bool read_color(lua_State *L, int index, video::SColor *color)
Definition c_converter.cpp:264
void push_v3f(lua_State *L, v3f p)
Definition c_converter.cpp:70
v2f read_v2f(lua_State *L, int index)
Definition c_converter.cpp:141
bool getfloatfield(lua_State *L, int table, const char *fieldname, float &result)
Definition c_converter.cpp:502
bool getintfield(lua_State *L, int table, const char *fieldname, T &result)
Definition c_converter.h:35
float getfloatfield_default(lua_State *L, int table, const char *fieldname, float default_)
Definition c_converter.cpp:557
void setintfield(lua_State *L, int table, const char *fieldname, int value)
Definition c_converter.cpp:589
v2s32 read_v2s32(lua_State *L, int index)
Definition c_converter.cpp:128
void setstringfield(lua_State *L, int table, const char *fieldname, const std::string &value)
Definition c_converter.cpp:580
lua_Number hash_node_position(v3s16 pos)
Definition c_converter.h:122
void push_aabb3f_vector(lua_State *L, const std::vector< aabb3f > &boxes, f32 divisor=1.0f)
Definition c_converter.cpp:401
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:88
std::string getstringfield_default(lua_State *L, int table, const char *fieldname, const std::string &default_)
Definition c_converter.cpp:541
void push_v2s32(lua_State *L, v2s32 p)
Definition c_converter.cpp:110
void push_v2u32(lua_State *L, v2u32 p)
Definition c_converter.cpp:119
video::SColor read_ARGB8(lua_State *L, int index)
Definition c_converter.cpp:283
bool getboolfield_default(lua_State *L, int table, const char *fieldname, bool default_)
Definition c_converter.cpp:565
void setfloatfield(lua_State *L, int table, const char *fieldname, float value)
Definition c_converter.cpp:598
aabb3f read_aabb3f(lua_State *L, int index, f32 scale)
Read a floating-point axis-aligned box from Lua.
Definition c_converter.cpp:328
v3s16 getv3s16field_default(lua_State *L, int table, const char *fieldname, v3s16 default_)
Definition c_converter.cpp:573
void push_v3s16(lua_State *L, v3s16 p)
Definition c_converter.cpp:241
v3s16 read_v3s16(lua_State *L, int index)
Definition c_converter.cpp:250
bool getboolfield(lua_State *L, int table, const char *fieldname, bool &result)
Definition c_converter.cpp:516
void push_aabb3f(lua_State *L, aabb3f box, f32 divisor=1.0f)
Definition c_converter.cpp:356
void setboolfield(lua_State *L, int table, const char *fieldname, bool value)
Definition c_converter.cpp:607
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 const struct table_key table[]
Definition keycode.cpp:33
static std::string p(std::string path)
Definition test_filesys.cpp:55