mirror of
https://github.com/luanti-org/minetest_game.git
synced 2025-12-18 04:05:24 +01:00
6.8 KiB
6.8 KiB
Vector helpers added by this mod
Helpers which return many positions for a shape, e.g. a line
Line functions
These may be deprecated since raycasting has been added to minetest.
See e.g. minetest.line_of_sight.
vector.line([pos, dir[, range][, alt]]): returns a table of vectorsdiris either a direction (when range is a number) or the start position (when range is the end position).- If alt is true, an old path calculation is used.
vector.twoline(x, y): can return e.g.{{0,0}, {0,1}}- This is a lower-level function than
vector.line; it can be used for a 2D line.
- This is a lower-level function than
vector.threeline(x, y, z): can return e.g.{{0,0,0}, {0,1,0}}- Similar to
vector.twoline; this one is for the 3D case. - The parameters should be integers.
- Similar to
vector.rayIter(pos, dir): returns an iterator for a for loopposcan have non-integer values
vector.fine_line([pos, dir[, range], scale]): returns a table of vectors- Like
vector.linebut allows non-integer positions - It uses
vector.rayIter.
- Like
Flood Fill
vector.search_2d(go_test, x0, y0, allow_revisit, give_map): returns e.g.{{0,0}, {0,1}}- This function uses a Flood Fill algorithm, so it can be used to detect positions connected to each other in 2D.
go_test(x, y)should be a function which returns true iff the algorithm can "fill" at the position(x, y).(x0, y0)defines the start position.- If
allow_revisitis false (the default), the function invokesgo_testonly once at every potential position. - If
give_mapis true (default is false), the function returns the marked table, whose indices are 2D vector indices, instead of a list of 2D positions.
vector.search_3d(can_go, startpos, apply_move, moves): returns FIXME- FIXME
Other Shapes
vector.explosion_table(r): returns e.g.{{pos1}, {pos2, true}}- The returned list of positions and boolean represents a sphere; if the boolean is true, the position is on the outer side of the sphere.
- It might be used for explosion calculations; but
vector.explosion_perlinshould make more realistic holes.
vector.explosion_perlin(rmin, rmax[, nparams]): returns e.g.{{pos1}, {pos2, true}}- This function is similar to
vector.explosion_table; the positions do not represent a sphere but a more complex hole which is calculated with the help of perlin noise. rminandrmaxrepresent the minimum and maximum radius, andnparams(which has a default value) are parameters for the perlin noise.
- This function is similar to
vector.circle(r): returns a table of vectors- The returned positions represent a circle of radius
ralong the x and z directions; the y coordinates are all zero.
- The returned positions represent a circle of radius
vector.ring(r): returns a table of vectors- This function is similar to
vector.circle; the positions are all touching each other (i.e. they are connected on whole surfaces and not only infinitely thin edges), so it is calledringinstead ofcircle rcan be a non-integer number.
- This function is similar to
vector.throw_parabola(pos, vel, gravity, point_count, time)- FIXME: should return positions along a parabola so that moving objects collisions can be calculated
vector.triangle(pos1, pos2, pos3): returns a table of positions, a number and a table with barycentric coordinates- This function calculates integer positions for a triangle defined by
pos1,pos2andpos3, so it can be used to place polygons in minetest. - The returned number is the number of positions.
- The barycentric coordinates are specified in a table with three elements;
the first one corresponds to
pos1, etc.
- This function calculates integer positions for a triangle defined by
Helpers for various vector calculations
vector.sort_positions(ps[, preferred_coords])- Sorts a table of vectors
psalong the coordinates specified in the tablepreferred_coordsin-place. - If
preferred_coordsis omitted, it sorts along z, y and x in this order, where z has the highest priority.
- Sorts a table of vectors
vector.maxnorm(v): returns the Tschebyshew norm ofvvector.sumnorm(v): returns the Manhattan norm ofvvector.pnorm(v, p): returns thepnorm ofvvector.inside(pos, minp, maxp): returns a boolean- Returns true iff
posis within the closed AABB defined byminpandmaxp.
- Returns true iff
vector.minmax(pos1, pos2): returns two vectors- This does the same as
worldedit.sort_pos. - The components of the second returned vector are all bigger or equal to those of the first one.
- This does the same as
vector.move(pos1, pos2, length): returns a vector- Go from
pos1lengthmetres topos2and then round to the nearest integer position. - Made for rubenwardy
- Go from
vector.from_number(i): returns{x=i, y=i, z=i}vector.chunkcorner(pos): returns a vector- Returns the mapblock position of the mapblock which contains
the integer position
pos
- Returns the mapblock position of the mapblock which contains
the integer position
vector.point_distance_minmax(p1, p2): returns two numbers- Returns the minimum and maximum of the absolute component-wise distances
vector.collision(p1, p2)FIXMEvector.update_minp_maxp(minp, maxp, pos)- Can change
minpandmaxpso thatposis within the AABB defined byminpandmaxp
- Can change
vector.unpack(v): returns three numbers- Returns
v.z, v.y, v.x
- Returns
vector.get_max_coord(v): returns a string- Returns
"x","y"or"z", depending on which component has the biggest value
- Returns
vector.get_max_coords(v): returns three strings- Similar to
vector.get_max_coord; it returns the coordinates in the order of their component values - Example:
vector.get_max_coords{x=1, y=5, z=3}returns"y", "z", "x"
- Similar to
vector.serialize(v): returns a string- In comparison to
minetest.serialize, this function uses a more compact string for the serialization.
- In comparison to
Minetest-specific helper functions
vector.straightdelay([length, vel[, acc]]): returns a number- Returns the time an object takes to move
lengthif it has velocityveland accelerationacc
- Returns the time an object takes to move
vector.sun_dir([time]): returns a vector or nil- Returns the vector which points to the sun
- If
timeis omitted, it uses the current time. - This function does not yet support the moon;
at night it simply returns
nil.
Helpers which I don't recommend to use now
vector.pos_to_string(pos): returns a string- It is similar to
minetest.pos_to_string; it uses a different format:"("..pos.x.."|"..pos.y.."|"..pos.z..")"
- It is similar to
vector.zero- The zero vector
{x=0, y=0, z=0}
- The zero vector
vector.quickadd(pos, [z],[y],[x])- Adds values to the vector components in-place
Deprecated helpers
vector.plane- should be removed soon; it should have done the same as vector.triangle