2022-08-27 19:31:43 +02:00

5.2 KiB

Tween

The tween object is a table that contain informations and callbacks about an interpolation animation that can be started or stopped with the tween itself.

BeTweenApi.tween(interpolation: function, movement: Movement, time: float, loop: bool, callbacks: TweenEvents) : Tween

This method will create a new Tween object.

  • interpolation is the interpolation function to use, see BeTweenApi.interpolation for functions to use. You can define a custom function here too, make sure it ask for 3 argouments.

  • movement movement data from the initial position to the end, see Movement

  • time is the time in seconds of how much this tween must run.

  • loop set if the tween should loop his interpolation when he finish it, if is true the tween will loop forever, if is a number the tween will loop for the specified amount.

  • callbacks contain all functions to execute on specific events of the tween, see TweenEvents

Movement

This data contain initial and final position of the interpolation, every property with a default value does not require to be set.

Property Default Description
start: number is the initial position of the interpolation.
finish: number is the final position of the interpolation.
mirror: boolean false if enabled will make the interpolation move twince faster and use half of the time to repeat the animation in reverse.
	{ start = 0, finish = 64 }	--- from 0 to 64 in time.
	{ start = 0, finish = 64, mirror = true }  --- same as before but also repeat in reverse.
	{ 0, 64 }  --- you can write it like this too.
	{ 0, 64, true }  --- same as second line.

TweenEvents

These are all functions called on specific events, you give this table to a tween to make it execute your own code.

Each function receive the tween itself as first argoument, you can call any tween method from there.

Callback Description
on_start(tween: Tween) Called when the Tween:start() is executed and the Tween will soon start to run his steps.
on_end(tween: Tween) Called when the Tween:stop() is executed or when the tween has finished to run.
on_loop(tween: Tween) Called every time the tween is looping, only called if loop is used..
on_step(tween: Tween, value: number) Called each step of the interpolation in the defined time, value is the result value.
	{
		on_start = function (tween)
			minetest.log("Hello Tween!")
		end,
		on_end = function (tween)
			minetest.log("Goodbye Tween!")
		end,
		on_loop = function (tween)
			minetest.log("Boom, 360 loop!")
		end,
		on_step = function (tween, value)
			--- do something with value.
		end,
	}

Functions and methods

Tween:start()

This method will start the tween by adding it in the active_tweens list, the global step will handle the process of time in the tween.

To make sure the Tween use the 100% of the assigned interpolation function it will make sure to process step 0.0 and 1.0 (the absolute end and start of the animation).

Everything in between of the interpolation time is handled by the server time using global steps.

After adding in the list the Tween is seen as "running", if the Tween is started while is already running a message log will be printed instead.

After adding to the list the Tween:on_start() callback is called.

Tween:stop(reset: bool = false)

This method will stop the tween by removing it from the active_tweens list.

If reset is true the current position in time of the Tween is resetted to 0, if is false the Tween is just paused.

Tween:is_running(): bool

Check if the current Tween is running inside the list, return true if it is or false if not.

Tween:index(): int | nil

Get the index position of the Tween inside the list, if the Tween isn't running nil is returned.


Examples


	--- store the tween in a variable.
	local tween = InterpolationApi.tween(
		InterpolationApi.interpolation.quadratic_in,
		{ 0, 64, false },
		8.0, false,
		{
			on_start = function (tween)
				minetest.log("Interpolation start!")
			end,
			on_step = function (tween, value)
				minetest.log(tostring(value))
			end
		}
	)

	--- start the tween.
	tween:start()
	InterpolationApi.tween(
		InterpolationApi.interpolation.linear,	--- linear movement
		{ start = 0, finish = 64 },	--- from 0 to 64, don't mirror
		4.0,		--- in 4 seconds
		true,		--- repeat after the time
		{
			--- execute this method each step in time.
			on_step = function (tween, value)
				local item = player:hud_get(icon)
				player:hud_change(icon, "offset", { x = value, y = 32 })
			end
		}
	):start()	--- you can also start the tween without creating a variable.

Extra

Extra informations about the Tween.

Tween loop

The tween execute his loop using the server global steps, so his execution is synced to each player, but that's mean it will slow down when the server is lagging.

Tween list

When a tween is running, by executing his :start() method) will insert itself in the active_tweens list inside the api.

When the tween is stopped, paused, or has finished his interpolation job he will remove itself from the list.

Tween in the list are only tween that are running.