Add API function for wind speed

master
Wuzzy 2022-07-26 21:03:52 +02:00
parent 2a002a736a
commit c7a4d879e0
2 changed files with 50 additions and 13 deletions

36
API.md
View File

@ -5,7 +5,8 @@ get a list of all flags, and set and get the flag of flag pole nodes.
## Functions
### `pride_flags.add_flag = function(name)`
### `pride_flags.add_flag(name)`
Add a new flag to the game. `name` is the flag identifier.
There *must* exist a texture with the name `prideflag_<name>.png`.
The texture *should* have an aspect ratio of 1.3.
@ -21,16 +22,43 @@ added.
Returns `true` on success and `false` on failure.
### `pride_flags.get_flags = function()`
### `pride_flags.get_flags()`
Returns a list of all available flag identifiers. The flags
are sorted by selection order.
### `pride_flags.set_flag_at = function(pos, flag_name)`
### `pride_flags.set_flag_at(pos, flag_name)`
Sets the flag at an upper mast node at position `pos` to the flag `flag_name`.
The node at `pos` *must* be `pride_flags:upper_mast`.
Returns `true` on success and `false` otherwise.
### `pride_flags.get_flag_at = function(pos)`
### `pride_flags.get_flag_at(pos)`
Returns the currently used flag at the upper mast node at position `pos`.
The node at `pos` *must* be `pride_flags:upper_mast`.
Returns a string on success and `nil` otherwise.
### `pride_flags.get_wind(pos)`
Returns the current wind strength at pos. The wind strength determines how
fast a flag at pos would be waving at the time this function was called.
This function will be called from time to time by the mod to update
the flag waving speed of flags. It is called for every flag once about
every 115 seconds (plusminus 10 seconds).
This function is predefined in this mod by pseudorandomly changing the wind
strength over time using a Perlin noise. By default, the wind strength is
only controlled by the current time; the position is ignored.
This function can be overwritten by mods to define your own wind algorithm.
You can do whatever in this function, you only need to return a number in
the end. The number should be roughly in the range between 0 and 50.
This is how the wind strength affects the flag waving speed:
* wind < 10: slow
* 10 < wind < 20: medium
* 20 < wind < 40: fast
* wind > 40: very fast

View File

@ -183,15 +183,9 @@ minetest.register_entity( "pride_flags:wavingflag", {
end,
reset_animation = function ( self, initial )
local coords = { x = os.time( ) % 65535, y = 0 }
local cur_wind
if old_get2d then
cur_wind = wind_noise:get2d(coords)
else
cur_wind = wind_noise:get_2d(coords)
end
cur_wind = cur_wind * 30 + 30
minetest.log("verbose", "[pride_flags] Current wind: " .. cur_wind)
local pos = self.object:get_pos( )
local cur_wind = pride_flags.get_wind( pos )
minetest.log("verbose", "[pride_flags] Current wind at "..minetest.pos_to_string(pos, 1)..": " .. cur_wind)
local anim_speed
local wave_sound
@ -678,4 +672,19 @@ pride_flags.get_flag_at = function( pos )
end
end
-- Returns the wind strength at pos.
-- Can be overwritten by mods.
pride_flags.get_wind = function( pos )
-- The default wind function ignores pos.
-- Returns a wind between ca. 0 and 55
local coords = { x = os.time( ) % 65535, y = 0 }
local cur_wind
if old_get2d then
cur_wind = wind_noise:get2d(coords)
else
cur_wind = wind_noise:get_2d(coords)
end
cur_wind = cur_wind * 30 + 30
return cur_wind
end