Mit diesem Skript schiebst du Interfaces beim Überfahren mit der Maus, per Mausrad oder per Tastendruck ein und aus. Das Skript setzt Visionaire Studio 4.1+ voraus.
Anweisungen
1. Füge das Hauptskript im Skripteditor von Visionaire Studio hinzu und lege es als Definitionsskript fest.
2a. Jetzt legst du einige Tabellen mit den Informationen an, die zum Ein- und Ausschieben der Interfaces gebraucht werden; die Tabelle muss genauso heißen wie das Ziel-Interface.
local t = {} -- creates an empty table
t["inventory_1"] = {x_in = -350, x_out = -20, y_in = 60, y_out = 60, xo = -50, yo = 0, dir =1, state = false} -- from left2b. x_in ist die x-Koordinate deines Interface im geschlossenen Zustand und muss dem Wert entsprechen, der in den Eigenschaften des Interface eingetragen ist, das du verschieben willst.
2c. x_out ist die Koordinatenposition, zu der die Schnittstelle auf der x-Achse gleitet (öffnet).
2d. y_in ist die y-Koordinate deines Interface im geschlossenen Zustand und muss dem Wert entsprechen, der in den Eigenschaften des Interface eingetragen ist, das du verschieben willst.
2e. y_out ist die Koordinatenposition, zu der die Schnittstelle auf der x-Achse gleitet (öffnet).
2f. xo ist die Anzahl der Pixel, um die die x-Achse versetzt werden soll (geschlossene Position), während der Mausradmodus aktiv ist (Schnittstelle ausblenden). Set 0 um den Offset für die X-Achse zu deaktivieren. Der Offset sollte je nach Richtungswert einen positiven oder negativen Wert enthalten, andernfalls sollte er 0 enthalten.
2g. yo ist die Anzahl der Pixel, um die die Y-Achse versetzt werden soll (geschlossene Position), während der Mausradmodus aktiv ist (Schnittstelle ausblenden). Set 0 um den Offset für die Y-Achse zu deaktivieren. Der Offset sollte je nach Richtungswert einen positiven oder negativen Wert enthalten, andernfalls sollte er 0 enthalten.
2h. dir ist die Richtung, aus der die Schnittstelle gleiten soll. 1 = von links, 2 = von rechts, 3 = von oben, 4 = von unten.
2i. Staat steuert, ob die Schnittstelle heraus- oder hineingleitet oder offen oder geschlossen ist; Der Standardwert sollte sein false.
3. Lege irgendwo eine Bedingung mit dem Namen mouse_wheel_mode an. Der Standardwert ist false.
4a. Lege einen Button für dein Interface an, schiebe ihn ans Ende der Liste, stelle ihn als Aktionsbereich ein und lege den Objektbereich um den Teil, der beim Überfahren das Herausschieben auslösen soll.
4b. Füge dem Button aus 4a eine Aktion für das Betreten mit der Maus (oder für einen Linksklick) hinzu. Darin legst du eine If-Abfrage an ...
if condition 'mouse_wheel_mode' is false execute a script > (see code block below this)
openInterface("interface_name", 3000, easeQuintInOut) -- open interface_name over 3 seconds with smooth easing (change easing to whatever you prefer)end if
4c. Füge im Reiter Eigenschaften des Interface diesen Aktionsteil zur Aktion beim Verlassen hinzu ...
if condition 'mouse_wheel_mode' is false execute a script > (see code block below this)
closeInterface("interface_name", 2000, easeBounceOut) -- close interface_name over 2 seconds with bounce out easing (change easing to whatever you prefer)end if
5a. Unter Spiel > Mauseigenschaften fügst du bei Mausrad nach oben diese Aktionsteile hinzu ...
if condition 'mouse_wheel_mode' is true execute a script > (see code block below this)
openInterface("interface_name", 3000, easeQuintInOut)end if
5b. Unter Spiel > Mauseigenschaften fügst du bei Mausrad nach unten diese Aktionsteile hinzu ...
if condition 'mouse_wheel_mode' is true execute a script > (see code block below this)
closeInterface("interface_name", 2000, easeBounceOut)end if
6. Zum Umschalten des Mausradmodus legst du in deinem Optionsmenü ein Objekt oder einen Tastaturbefehl an mit ...
toggle condition 'mouse_wheel_mode'
7. In deinen Szenen solltest du in einer Aktion zu Szenenbeginn einen Aktionsteil Skript ausführen anlegen mit ...
closeInterface("interface_name", 0, easeNoneInOut) -- instantly resets interface_name back to closed position; just in case the interface was open when you changed scenes.Hauptskript
--[[
Sliding Interface MKII [v3] (27/11/2014)
Written by AFRLme [Lee Clarke]
-- + --
alternatingfrequencies@hotmail.com | skype @ AFRLme
-- + --
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 variables * --
local p, ox, oy -- empty variables
-- * local tables * --
local t = {} -- empty table
t["inventory_1"] = {x_in = -350, x_out = -20, y_in = 60, y_out = 60, xo = -50, yo = 0, dir =1, state = false} -- from left
t["inventory_2"] = {x_in = 1230, x_out = 930, y_in = 60, y_out = 60, xo = 50, yo = 0, dir = 2, state = false} -- from right
t["inventory_3"] = {x_in = 440, x_out = 440, y_in = -550, y_out = -20, xo = 0, yo = -50, dir = 3, state = false} -- from top
t["inventory_4"] = {x_in = 440, x_out = 440, y_in = 670, y_out = 140, xo = 0, yo = 50, dir = 4, state = false} -- from bottom
-- * function that slides the interface out * --
function openInterface(int, delay, easing, dir)
if t[int]["state"] ~= true then t[int]["state"] = true -- if not already sliding out then begin sliding out (safety measure to make sure it keeps sliding)
if t[int].dir == 1 or t[int].dir == 2 then p = math.floor(( Interfaces[int].InterfaceOffset.x - t[int].x_out) / (t[int].x_in - t[int].x_out) * 100); delay = math.floor((delay / 100) * p ) end
if t[int].dir == 3 or t[int].dir == 4 then p = math.floor(( Interfaces[int].InterfaceOffset.y - t[int].y_out) / (t[int].y_in - t[int].y_out) * 100); delay = math.floor((delay / 100) * p ) end
startObjectTween( Interfaces[int], VInterfaceOffset, Interfaces[int].InterfaceOffset, {x = t[int].x_out, y = t[int].y_out}, delay, easing)
end
end
-- * function that slides the interface in * --
function closeInterface(int, delay, easing, dir)
t[int]["state"] = false
if Conditions["mouse_wheel_mode"].ConditionValue then ox = t[int].xo; oy = t[int].yo else ox = 0; oy = 0 end
if t[int].dir == 1 or t[int].dir == 2 then p = math.floor(( Interfaces[int].InterfaceOffset.x - t[int].x_in) / (t[int].x_out - t[int].x_in) * 100); delay = math.floor((delay / 100) * p ) end
if t[int].dir == 3 or t[int].dir == 4 then p = math.floor(( Interfaces[int].InterfaceOffset.y - t[int].y_in) / (t[int].y_out - t[int].y_in) * 100); delay = math.floor((delay / 100) * p ) end
startObjectTween( Interfaces[int], VInterfaceOffset, Interfaces[int].InterfaceOffset, {x = t[int].x_in + ox, y = t[int].y_in + oy}, delay, easing)
end
Alternatives Skript
Dieses Skript ist das gleiche wie das obige Skript, verwendet jedoch die alte getObject-Skriptmethode. Aufgrund der startObjectTween-Funktion ist mindestens Visionaire Studio 4.0 erforderlich, um dieses Skript auszuführen.
--[[
Sliding Interface MKII [v3] (27/11/2014)
Written by AFRLme [Lee Clarke]
-- + --
alternatingfrequencies@hotmail.com | skype @ AFRLme
-- + --
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 variables * --
local p, ox, oy -- empty variables
-- * local tables * --
local t = {} -- empty table
t["inventory_1"] = {x_in = -350, x_out = -20, y_in = 60, y_out = 60, xo = -50, yo = 0, dir =1, state = false} -- from left
t["inventory_2"] = {x_in = 1230, x_out = 930, y_in = 60, y_out = 60, xo = 50, yo = 0, dir = 2, state = false} -- from right
t["inventory_3"] = {x_in = 440, x_out = 440, y_in = -550, y_out = -20, xo = 0, yo = -50, dir = 3, state = false} -- from top
t["inventory_4"] = {x_in = 440, x_out = 440, y_in = 670, y_out = 140, xo = 0, yo = 50, dir = 4, state = false} -- from bottom
-- * function that slides the interface out * --
function openInterface(int, delay, easing, dir)
if t[int]["state"] ~= true then t[int]["state"] = true -- if not already sliding out then begin sliding out (safety measure to make sure it keeps sliding)
if t[int].dir == 1 or t[int].dir == 2 then p = math.floor((getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset).x - t[int].x_out) / (t[int].x_in - t[int].x_out) * 100); delay = math.floor((delay / 100) * p) end
if t[int].dir == 3 or t[int].dir == 4 then p = math.floor((getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset).y - t[int].y_out) / (t[int].y_in - t[int].y_out) * 100); delay = math.floor((delay / 100) * p) end
startObjectTween(getObject("Interfaces[" .. int .. "]"), VInterfaceOffset, getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset), {x = t[int].x_out, y = t[int].y_out}, delay, easing)
end
end
-- * function that slides the interface in * --
function closeInterface(int, delay, easing, dir)
t[int]["state"] = false
if getObject("Conditions[mouse_wheel_mode]"):getBool(VConditionValue) then ox = t[int].xo; oy = t[int].yo else ox = 0; oy = 0 end
if t[int].dir == 1 or t[int].dir == 2 then p = math.floor((getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset).x - t[int].x_in) / (t[int].x_out - t[int].x_in) * 100); delay = math.floor((delay / 100) * p) end
if t[int].dir == 3 or t[int].dir == 4 then p = math.floor((getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset).y - t[int].y_in) / (t[int].y_out - t[int].y_in) * 100); delay = math.floor((delay / 100) * p) end
startObjectTween(getObject("Interfaces[" .. int .. "]"), VInterfaceOffset, getObject("Interfaces[" .. int .. "]"):getPoint(VInterfaceOffset), {x = t[int].x_in + ox, y = t[int].y_in + oy}, delay, easing)
end
Ressourcen
| Name | Beschreibung |
|---|---|
| sliding_interface_vs4.zip (Datei nicht mehr verfügbar) | Ein funktionierendes Beispiel des Skripts in Aktion. Visionaire Studio 4.0.1+ erforderlich, um die enthaltene .ved-Datei auszuführen. |
