aboutsummaryrefslogtreecommitdiff
path: root/src/script/lua_api
Commit message (Expand)AuthorAge
* Add set_name(), set_count(), set_wear() and set_metadata() to Lua ItemStackPilzAdam2013-09-28
* Show git hash in version string at top left corner of windowKahrl2013-09-28
* Re-fix hud_change stat argument retrievalkwolekr2013-09-26
* Fix some warnings and other minor detailskwolekr2013-09-16
* Weather: Clean up getHeat/getHumidity somewhatkwolekr2013-09-16
* Allow non-string arguments for minetest.is_yes()PilzAdam2013-09-10
* Add Settings interface for LuaPilzAdam2013-09-10
* Add minetest.get_gametime() API function, that returns the number of seconds ...Novatux2013-09-08
* Use player:set_hotbar_image() instead of hardcoded hotbar.pngPilzAdam2013-09-05
* Add minetest.parse_json, engine.parse_jsonKahrl2013-09-02
* Fix umlauts/special character issue in lua gettextBlockMen2013-08-19
* Allow SIGINT to kill mainmenu againKahrl2013-08-19
* Add translation for main menusapier2013-08-17
* Omnicleanup: header cleanup, add ModApiUtil shared between game and mainmenuKahrl2013-08-14
* Decoration: Fix schematic probability mess with new MTS file versionkwolekr2013-08-11
* Add replacements to schematicsPilzAdam2013-08-03
* Allow multiple 'wherein' nodes in oredefPilzAdam2013-08-02
* Better snow fall, finite liquid transform, leveled nodes apiproller2013-07-28
* Weather supportproller2013-07-27
* Add set_breath and get_breath to lua API.RealBadAngel2013-07-20
* Change ContentFeatures array to a vectorKahrl2013-07-14
* LuaVoxelManip: Allow liquid updates in non-mapgen VoxelManip objectskwolekr2013-07-06
* Mapgen V7: Huge rewrite, also tweaks to cavegen et al.kwolekr2013-07-06
* Decoration: Add schematic rotation supportkwolekr2013-07-01
* LuaVoxelManip: Fix minor bug with set_lighting, remove coordinate params for ...kwolekr2013-06-29
* Apply various fixes to several thingskwolekr2013-06-27
* LuaVoxelManip: Separate VoxelManip data get/set from emerging/blitting data b...kwolekr2013-06-27
* Add Lua on_mapgen_init callback, and minetest.set_mapgen_params APIkwolekr2013-06-27
* Add Lua PerlinNoiseMap:get#dMap_flat APIkwolekr2013-06-27
* Add minetest.get_mapgen_object to APIkwolekr2013-06-27
* Add LuaVoxelManipkwolekr2013-06-27
* Decoration: Add support for zero probability, fix breakage from last commitkwolekr2013-06-22
* A handful of minor fixes to various thingskwolekr2013-06-22
* Decoration: Add Schematic decoration typekwolekr2013-06-22
* Make minetest.debug accept multiple parameters; convert them to stringKahrl2013-06-21
* Add drowningPilzAdam2013-06-19
* Decoration: Change divlen to sidelenkwolekr2013-06-17
* Add initial Decoration support, many misc. improvements & modificationskwolekr2013-06-17
* Lazy sunday typo fixing. s/unban_player_of_ip/unban_player_or_ip/gKahrl2013-06-16
* Corrected segfault when registering new biomes.sweetbomber2013-06-03
* Fix missing find_path and line_of_sightsapier2013-06-01
* Fix some nullptr exceptions when handling invalid node inventoriesMetaDucky2013-06-01
* Fix minetest.get_inventory(loc) always returning nil for "node" type locMetaDucky2013-06-01
* Fixed wrongly named invref:get_location() table members for nodes.MetaDucky2013-05-26
* Add ObjectRef.hud_set_hotbar_itemcount and add TOCLIENT_HUD_SET_PARAMKahrl2013-05-26
* Fix itemstack:add item not working correctsapier2013-05-25
* Move scriptapi to separate folder (by sapier)sapier2013-05-25
="hl opt">= { x = 2, y = 4, z = -10 } assertE(a, a) assertNE({x = -1, y = 0, z = 1}, a) end) it("add()", function() assert.same({ x = 2, y = 4, z = 6 }, vector.add(vector.new(1, 2, 3), { x = 1, y = 2, z = 3 })) end) it("offset()", function() assert.same({ x = 41, y = 52, z = 63 }, vector.offset(vector.new(1, 2, 3), 40, 50, 60)) end) -- This function is needed because of floating point imprecision. local function almost_equal(a, b) if type(a) == "number" then return math.abs(a - b) < 0.00000000001 end return vector.distance(a, b) < 0.000000000001 end describe("rotate_around_axis()", function() it("rotates", function() assert.True(almost_equal({x = -1, y = 0, z = 0}, vector.rotate_around_axis({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0}, math.pi))) assert.True(almost_equal({x = 0, y = 1, z = 0}, vector.rotate_around_axis({x = 0, y = 0, z = 1}, {x = 1, y = 0, z = 0}, math.pi / 2))) assert.True(almost_equal({x = 4, y = 1, z = 1}, vector.rotate_around_axis({x = 4, y = 1, z = 1}, {x = 4, y = 1, z = 1}, math.pi / 6))) end) it("keeps distance to axis", function() local rotate1 = {x = 1, y = 3, z = 1} local axis1 = {x = 1, y = 3, z = 2} local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13) assert.True(almost_equal(vector.distance(axis1, rotate1), vector.distance(axis1, rotated1))) local rotate2 = {x = 1, y = 1, z = 3} local axis2 = {x = 2, y = 6, z = 100} local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23) assert.True(almost_equal(vector.distance(axis2, rotate2), vector.distance(axis2, rotated2))) local rotate3 = {x = 1, y = -1, z = 3} local axis3 = {x = 2, y = 6, z = 100} local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2) assert.True(almost_equal(vector.distance(axis3, rotate3), vector.distance(axis3, rotated3))) end) it("rotates back", function() local rotate1 = {x = 1, y = 3, z = 1} local axis1 = {x = 1, y = 3, z = 2} local rotated1 = vector.rotate_around_axis(rotate1, axis1, math.pi / 13) rotated1 = vector.rotate_around_axis(rotated1, axis1, -math.pi / 13) assert.True(almost_equal(rotate1, rotated1)) local rotate2 = {x = 1, y = 1, z = 3} local axis2 = {x = 2, y = 6, z = 100} local rotated2 = vector.rotate_around_axis(rotate2, axis2, math.pi / 23) rotated2 = vector.rotate_around_axis(rotated2, axis2, -math.pi / 23) assert.True(almost_equal(rotate2, rotated2)) local rotate3 = {x = 1, y = -1, z = 3} local axis3 = {x = 2, y = 6, z = 100} local rotated3 = vector.rotate_around_axis(rotate3, axis3, math.pi / 2) rotated3 = vector.rotate_around_axis(rotated3, axis3, -math.pi / 2) assert.True(almost_equal(rotate3, rotated3)) end) it("is right handed", function() local v_before1 = {x = 0, y = 1, z = -1} local v_after1 = vector.rotate_around_axis(v_before1, {x = 1, y = 0, z = 0}, math.pi / 4) assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0})) local v_before2 = {x = 0, y = 3, z = 4} local v_after2 = vector.rotate_around_axis(v_before2, {x = 1, y = 0, z = 0}, 2 * math.pi / 5) assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0})) local v_before3 = {x = 1, y = 0, z = -1} local v_after3 = vector.rotate_around_axis(v_before3, {x = 0, y = 1, z = 0}, math.pi / 4) assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0})) local v_before4 = {x = 3, y = 0, z = 4} local v_after4 = vector.rotate_around_axis(v_before4, {x = 0, y = 1, z = 0}, 2 * math.pi / 5) assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0})) local v_before5 = {x = 1, y = -1, z = 0} local v_after5 = vector.rotate_around_axis(v_before5, {x = 0, y = 0, z = 1}, math.pi / 4) assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1})) local v_before6 = {x = 3, y = 4, z = 0} local v_after6 = vector.rotate_around_axis(v_before6, {x = 0, y = 0, z = 1}, 2 * math.pi / 5) assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1})) end) end) describe("rotate()", function() it("rotates", function() assert.True(almost_equal({x = -1, y = 0, z = 0}, vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = math.pi, z = 0}))) assert.True(almost_equal({x = 0, y = -1, z = 0}, vector.rotate({x = 1, y = 0, z = 0}, {x = 0, y = 0, z = math.pi / 2}))) assert.True(almost_equal({x = 1, y = 0, z = 0}, vector.rotate({x = 1, y = 0, z = 0}, {x = math.pi / 123, y = 0, z = 0}))) end) it("is counterclockwise", function() local v_before1 = {x = 0, y = 1, z = -1} local v_after1 = vector.rotate(v_before1, {x = math.pi / 4, y = 0, z = 0}) assert.True(almost_equal(vector.normalize(vector.cross(v_after1, v_before1)), {x = 1, y = 0, z = 0})) local v_before2 = {x = 0, y = 3, z = 4} local v_after2 = vector.rotate(v_before2, {x = 2 * math.pi / 5, y = 0, z = 0}) assert.True(almost_equal(vector.normalize(vector.cross(v_after2, v_before2)), {x = 1, y = 0, z = 0})) local v_before3 = {x = 1, y = 0, z = -1} local v_after3 = vector.rotate(v_before3, {x = 0, y = math.pi / 4, z = 0}) assert.True(almost_equal(vector.normalize(vector.cross(v_after3, v_before3)), {x = 0, y = 1, z = 0})) local v_before4 = {x = 3, y = 0, z = 4} local v_after4 = vector.rotate(v_before4, {x = 0, y = 2 * math.pi / 5, z = 0}) assert.True(almost_equal(vector.normalize(vector.cross(v_after4, v_before4)), {x = 0, y = 1, z = 0})) local v_before5 = {x = 1, y = -1, z = 0} local v_after5 = vector.rotate(v_before5, {x = 0, y = 0, z = math.pi / 4}) assert.True(almost_equal(vector.normalize(vector.cross(v_after5, v_before5)), {x = 0, y = 0, z = 1})) local v_before6 = {x = 3, y = 4, z = 0} local v_after6 = vector.rotate(v_before6, {x = 0, y = 0, z = 2 * math.pi / 5}) assert.True(almost_equal(vector.normalize(vector.cross(v_after6, v_before6)), {x = 0, y = 0, z = 1})) end) end) it("dir_to_rotation()", function() -- Comparing rotations (pitch, yaw, roll) is hard because of certain ambiguities, -- e.g. (pi, 0, pi) looks exactly the same as (0, pi, 0) -- So instead we convert the rotation back to vectors and compare these. local function forward_at_rot(rot) return vector.rotate(vector.new(0, 0, 1), rot) end local function up_at_rot(rot) return vector.rotate(vector.new(0, 1, 0), rot) end local rot1 = vector.dir_to_rotation({x = 1, y = 0, z = 0}, {x = 0, y = 1, z = 0}) assert.True(almost_equal({x = 1, y = 0, z = 0}, forward_at_rot(rot1))) assert.True(almost_equal({x = 0, y = 1, z = 0}, up_at_rot(rot1))) local rot2 = vector.dir_to_rotation({x = 1, y = 1, z = 0}, {x = 0, y = 0, z = 1}) assert.True(almost_equal({x = 1/math.sqrt(2), y = 1/math.sqrt(2), z = 0}, forward_at_rot(rot2))) assert.True(almost_equal({x = 0, y = 0, z = 1}, up_at_rot(rot2))) for i = 1, 1000 do local rand_vec = vector.new(math.random(), math.random(), math.random()) if vector.length(rand_vec) ~= 0 then local rot_1 = vector.dir_to_rotation(rand_vec) local rot_2 = { x = math.atan2(rand_vec.y, math.sqrt(rand_vec.z * rand_vec.z + rand_vec.x * rand_vec.x)), y = -math.atan2(rand_vec.x, rand_vec.z), z = 0 } assert.True(almost_equal(rot_1, rot_2)) end end end) end)