| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390 |
- /*
- * Copyright (c) 2012-2023 Daniele Bartolini et al.
- * SPDX-License-Identifier: MIT
- */
- #pragma once
- #include "config.h"
- #include "core/math/types.h"
- #include "core/strings/string_id.h"
- #include "core/types.h"
- #include "resource/types.h"
- #include "world/types.h"
- struct lua_State;
- typedef int (*lua_CFunction)(lua_State *L);
- #ifndef LUA_OK
- #define LUA_OK 0
- #endif
- #define LIGHTDATA_TYPE_MASK uintptr_t(0x3)
- #define LIGHTDATA_TYPE_SHIFT uintptr_t(0)
- #define LIGHTDATA_POINTER_MARKER uintptr_t(0)
- #define LIGHTDATA_UNIT_MARKER uintptr_t(1)
- #define LIGHTDATA_UNIT_ID_MASK uintptr_t(0xfffffffc)
- #define LIGHTDATA_UNIT_ID_SHIFT uintptr_t(2)
- #define LUA_VECTOR3_MARKER_MASK uintptr_t(0x03)
- #define LUA_VECTOR3_MARKER_SHIFT uintptr_t(0)
- #define LUA_QUATERNION_MARKER_MASK uintptr_t(0x0f)
- #define LUA_QUATERNION_MARKER_SHIFT uintptr_t(0)
- #define LUA_MATRIX4X4_MARKER_MASK uintptr_t(0x3f)
- #define LUA_MATRIX4X4_MARKER_SHIFT uintptr_t(0)
- namespace crown
- {
- /// Wrapper to manipulate Lua stack.
- ///
- /// @ingroup Lua
- struct LuaStack
- {
- lua_State *L;
- ///
- explicit LuaStack(lua_State *L);
- /// Returns the number of elements in the stack.
- /// When called inside a function, it can be used to count
- /// the number of arguments passed to the function itself.
- int num_args();
- /// Removes the element at the given valid index, shifting down the elements
- /// above this index to fill the gap. Cannot be called with a pseudo-index,
- /// because a pseudo-index is not an actual stack position.
- void remove(int i);
- /// Pops @a n elements from the stack.
- void pop(int n);
- ///
- bool is_nil(int i);
- ///
- bool is_bool(int i);
- ///
- bool is_number(int i);
- ///
- bool is_string(int i);
- ///
- bool is_pointer(int i);
- ///
- bool is_function(int i);
- ///
- bool is_table(int i);
- ///
- bool is_vector3(int i);
- ///
- bool is_quaternion(int i);
- ///
- bool is_matrix4x4(int i);
- /// Wraps lua_type.
- int value_type(int i);
- ///
- bool get_bool(int i);
- ///
- int get_int(int i);
- ///
- f32 get_float(int i);
- ///
- const char *get_string(int i);
- ///
- void *get_pointer(int i);
- ///
- u32 get_id(int i);
- ///
- StringId32 get_string_id_32(int i);
- ///
- StringId64 get_string_id_64(int i);
- ///
- StringId64 get_resource_name(int i);
- ///
- Gui *get_gui(int i);
- ///
- DebugLine *get_debug_line(int i);
- ///
- ResourcePackage *get_resource_package(int i);
- ///
- World *get_world(int i);
- ///
- SceneGraph *get_scene_graph(int i);
- ///
- Level *get_level(int i);
- ///
- RenderWorld *get_render_world(int i);
- ///
- PhysicsWorld *get_physics_world(int i);
- ///
- SoundWorld *get_sound_world(int i);
- ///
- ScriptWorld *get_script_world(int i);
- ///
- AnimationStateMachine *get_animation_state_machine(int i);
- ///
- bool is_unit(int i);
- ///
- UnitId get_unit(int i);
- ///
- CameraInstance get_camera_instance(int i);
- ///
- TransformInstance get_transform_instance(int i);
- ///
- MeshInstance get_mesh_instance(int i);
- ///
- SpriteInstance get_sprite_instance(int i);
- ///
- LightInstance get_light_instance(int i);
- ///
- StateMachineInstance get_state_machine_instance(int i);
- ///
- Material *get_material(int i);
- ///
- ActorInstance get_actor_instance(int i);
- ///
- SoundInstanceId get_sound_instance_id(int i);
- ///
- ScriptInstance get_script_instance(int i);
- ///
- Vector2 get_vector2(int i);
- ///
- Vector3 &get_vector3(int i);
- ///
- Vector4 get_vector4(int i);
- ///
- Quaternion &get_quaternion(int i);
- ///
- Matrix4x4 &get_matrix4x4(int i);
- ///
- Color4 get_color4(int i);
- ///
- Vector2 &get_vector2box(int i);
- ///
- Vector3 &get_vector3box(int i);
- ///
- Quaternion &get_quaternionbox(int i);
- ///
- Matrix4x4 &get_matrix4x4box(int i);
- ///
- void push_nil();
- ///
- void push_bool(bool value);
- ///
- void push_int(int value);
- ///
- void push_float(f32 value);
- ///
- void push_string(const char *s);
- ///
- void push_fstring(const char *fmt, ...);
- ///
- void push_lstring(const char *s, u32 len);
- ///
- void push_string_id(StringId32 value);
- ///
- void push_pointer(void *p);
- ///
- void push_function(lua_CFunction f);
- ///
- void push_id(u32 value);
- /// Pushes an empty table onto the stack.
- /// When you want to set keys on the table, you have to use LuaStack::push_key_begin()
- /// and LuaStack::push_key_end() as in the following example:
- ///
- /// LuaStack stack(L)
- /// stack.push_table()
- /// stack.push_key_begin("foo"); stack.push_foo(); stack.push_key_end()
- /// stack.push_key_begin("bar"); stack.push_bar(); stack.push_key_end()
- /// return 1;
- void push_table(int narr = 0, int nrec = 0);
- /// See Stack::push_table()
- void push_key_begin(const char *key);
- /// See Stack::push_table()
- void push_key_begin(int i);
- /// See Stack::push_table()
- void push_key_end();
- ///
- int next(int i);
- ///
- void push_gui(Gui *dg);
- ///
- void push_debug_line(DebugLine *line);
- ///
- void push_resource_package(ResourcePackage *package);
- ///
- void push_world(World *world);
- ///
- void push_scene_graph(SceneGraph *sg);
- ///
- void push_level(Level *level);
- ///
- void push_render_world(RenderWorld *world);
- ///
- void push_physics_world(PhysicsWorld *world);
- ///
- void push_sound_world(SoundWorld *world);
- ///
- void push_script_world(ScriptWorld *world);
- ///
- void push_animation_state_machine(AnimationStateMachine *sm);
- ///
- void push_unit(UnitId unit);
- ///
- void push_camera(CameraInstance i);
- ///
- void push_transform(TransformInstance i);
- ///
- void push_mesh_instance(MeshInstance i);
- ///
- void push_sprite_instance(SpriteInstance i);
- ///
- void push_light_instance(LightInstance i);
- ///
- void push_state_machine_instance(StateMachineInstance i);
- ///
- void push_material(Material *material);
- ///
- void push_actor(ActorInstance i);
- ///
- void push_sound_instance_id(SoundInstanceId id);
- ///
- void push_script_instance(ScriptInstance i);
- ///
- void push_vector2(const Vector2 &v);
- ///
- void push_vector3(const Vector3 &v);
- ///
- void push_matrix4x4(const Matrix4x4 &m);
- ///
- void push_quaternion(const Quaternion &q);
- ///
- void push_color4(const Color4 &c);
- ///
- void push_vector2box(const Vector2 &v);
- ///
- void push_vector3box(const Vector3 &v);
- ///
- void push_quaternionbox(const Quaternion &q);
- ///
- void push_matrix4x4box(const Matrix4x4 &m);
- ///
- void push_value(int i);
- ///
- void call(int nresults);
- ///
- Vector3 *check_temporary(int i, const Vector3 *p);
- ///
- Quaternion *check_temporary(int i, const Quaternion *p);
- ///
- Matrix4x4 *check_temporary(int i, const Matrix4x4 *p);
- ///
- void check_marker(int i, const void *p, u32 type_marker, const char *type_name);
- };
- } // namespace crown
|