Name Typ Von
Schiebeschnittstelle MKIII Definition AFRLme

Mit diesem Skript schiebst du Interfaces beim Überfahren mit der Maus, per Mausrad, per Tastendruck oder über einen Interface-Button ein und aus. Das Skript setzt Visionaire Studio 5+ voraus.


Kurzer Hinweis Nr. 1: Das Interface lässt sich nur ein- oder ausschieben, wenn es ganz ein- oder ausgefahren ist. Eine laufende Bewegung kannst du nicht unterbrechen. Dafür müsste man den aktuellen Anteil zwischen Start- und Zielposition berechnen, um die Geschwindigkeit beizubehalten, und das lohnt den Aufwand hier nicht.
Kurzer Hinweis Nr. 2: Visionaire Studio unterstützt alle hier aufgeführten Easing-Optionen Seite.


Version 1: Tabellen

Diese Version speichert Position, Easing und Dauer für jedes Interface, das du ausfahren willst, in Lua-Tabellen. Sie ist insgesamt einfacher zu nutzen, weil du nicht jedes Mal alle Daten an die Funktion übergeben musst.

Anweisungen

1. Füge dieses Skript im Skriptbereich des Editors von Visionaire Studio hinzu und lege es als Definitionsskript fest ...


--[[
Sliding Interface MKIII [v1] (14/08/2022)
Written by AFRLme [Lee Clarke]
-- + --
email: afrlme@outlook.com
paypal: afrlme@zoho.com
patreon: https://www.patreon.com/AFRLme
portfolio: https://afrl.me
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]

local tInt = {

["int_example_1"] = { In = {x = 390, y = 710}, Out = {x = 390, y = 530}, dur = 1000, eIn = easeQuintIn, eOut = easeBounceOut },
["int_example_2"] = { In = {x = 390, y = -190}, Out = {x = 390, y = -10}, dur = 1200, eIn = easeQuintIn, eOut = easeQuintOut }

}

function slideInt(int)
  
  if Interfaces[int].Offset.x == tInt[int].In.x and Interfaces[int].Offset.y == tInt[int].In.y then -- slide out
    Interfaces[int]:to(tInt[int].dur, { Offset = {x = tInt[int].Out.x, y = tInt[int].Out.y} }, tInt[int].eOut)
  elseif Interfaces[int].Offset.x == tInt[int].Out.x and Interfaces[int].Offset.y == tInt[int].Out.y then -- slide in
    Interfaces[int]:to(tInt[int].dur, { Offset = {x = tInt[int].In.x, y = tInt[int].In.y} }, tInt[int].eIn)
  end
  
end

Kurzer Hinweis: Trage im Skript oben die Namen aller Interfaces ein, die ein- und ausfahren sollen. Lege außerdem die Standardposition [In] und die Zielposition [Out] der Interfaces fest. Vergiss nicht, die Dauer der Bewegung und das gewünschte Easing anzugeben.

2. Um das Skript zu nutzen, legst du in den Tastenaktionen, Mausaktionen (Betreten/Verlassen), Befehlsaktionen usw., mit denen ein Interface ausfahren soll, einen Aktionsteil Skript ausführen an und fügst etwa diese Codezeile ein ...


slideInt("int_example_1")


Version 2: Nur Funktion

Bei dieser Version übergibst du alle nötigen Argumente selbst: den Namen des Interface, die Standardposition (in) und die Zielposition (out), einen booleschen Wert, ob das Interface ein- oder ausfahren soll, die Dauer in Millisekunden und zuletzt das gewünschte Easing. Wie du siehst, ist diese Version deutlich aufwendiger, weil du dir die Angaben für jedes Interface irgendwo notieren musst.

Anweisungen

1. Füge dieses Skript im Skriptbereich des Editors von Visionaire Studio hinzu und lege es als Definitionsskript fest ...


--[[
Sliding Interface MKIII [v2] (14/08/2022)
Written by AFRLme [Lee Clarke]
-- + --
email: afrlme@outlook.com
paypal: afrlme@zoho.com
patreon: https://www.patreon.com/AFRLme
portfolio: https://afrl.me
-- + --
This script is donation optional. In game credit is non-negotiable.
You are free to: ¹ use it in your game(s). ² modify the script.
Do not remove - or edit - this comment block.
--]]

function slideInt(int, spos, tpos, duration, eIn, eOut)
  
  if Interfaces[int].Offset.x == spos.x and Interfaces[int].Offset.y == spos.y then -- slide out
    Interfaces[int]:to(duration, { Offset = {x = tpos.x, y = tpos.y} }, eOut)
  elseif Interfaces[int].Offset.x == tpos.x and Interfaces[int].Offset.y == tpos.y then -- slide in
    Interfaces[int]:to(duration, { Offset = {x = spos.x, y = spos.y} }, eIn)
  end
  
end

2. Um das Skript zu nutzen, legst du in den Tastenaktionen, Mausaktionen (Betreten/Verlassen), Befehlsaktionen usw., mit denen ein Interface ein- oder ausfahren soll, einen Aktionsteil Skript ausführen an und fügst etwa diese Codezeile ein ...


slideInt("int_example", {x = 390, y = 710}, {x = 390, y = 530}, 1000, easeQuintIn, easeBounceOut)


Version 3: Rohskript

Nennen wir diesen Abschnitt einfach einen Bonus. Ich erkläre dir die Tweening-Funktion to(), zeige dir die Syntax und Beispiele, wie du damit ein Interface ein- oder ausfährst, und zum Schluss, wie du ein Interface im Wechsel ein- und ausfährst.

Syntax

to(duration, {arguments}, easing, loop, pendulum)

Beispiel 1: Herausschieben

local int = Interfaces["int_example"]

if int.Offset.y == 710 then
 int:to(1000, { Offset = {x = int.Offset.x, y = 530} }, easeBounceOut)
end

Beispiel 2: Einschieben

local int = Interfaces["int_example"]

if int.Offset.y == 530 then
 int:to(1000, { Offset = {x = int.Offset.x, y = 710} }, easeQuintIn)
end

Beispiel 3: Umschalten

local int = Interfaces["int_example"]

if int.Offset.y == 710 then
 int:to(1000, { Offset = {x = int.Offset.x, y = 530} }, easeBounceOut)
elseif int.Offset.y == 530 then
 int:to(1000, { Offset = {x = int.Offset.x, y = 710} }, easeQuintIn)
end


Ressourcen

Name Beschreibung
sliding_interface_mk3.zip Ein funktionierendes Beispiel des Skripts in Aktion. Visionaire Studio 5.1.9.2+ erforderlich, um die enthaltenen .ved-Dateien auszuführen.