Name Typ Von

Deponia-basierte Gleitschnittstelle Definition AFRLme

Mit diesem Skript schiebst du Interfaces aus jeder Richtung ein oder aus, beim Überfahren mit der Maus oder per Mausrad.

Anweisungen

1. Füge das Hauptskript im Skripteditor von Visionaire Studio hinzu und lege es als Definitionsskript fest.
2. Ersetze inventory durch den Namen deines Interface; achte auf Groß-/Kleinschreibung.

local getInterface = getObject("Interfaces[inventory]")

3a. Bearbeiten minOffset x- und y-Werte; Diese sollten den anfänglichen Ausgangspunkt der Schnittstelle widerspiegeln.

local minOffset = {x = 0, y = 0}

3b. Bearbeiten maxOffset x- und y-Werte; Diese sollten die Zielposition für die Schnittstelle widerspiegeln.

local maxOffset = {x = 0, y = 0}

3c. Passe den Wert mwOffset an: Er gibt an, wie weit das Interface im Mausradmodus über den Bildschirmrand hinaus verschwindet; 0 behält die Überlappung bei.

local mwOffset = 0

4a. Bearbeiten inSpeed Wert; Dies steuert die Anzahl der Pixel[Quadrate], um die sich die Schnittstelle beim Schließen bewegen soll.

local inSpeed = 1

4b. Bearbeiten outSpeed Wert; Dies steuert die Anzahl der Pixel[Quadrate], um die sich die Schnittstelle beim Öffnen bewegen soll.

local outSpeed = 2

5. Bearbeiten slideDirection Wert; Dies bestimmt, aus welcher Richtung die Schnittstelle gleiten soll.

local slideDirection = 1 -- from left
local slideDirection = 2 -- from top
local slideDirection = 3 -- from right
local slideDirection = 4 -- from bottom

6. Lege ein neues Definitionsskript an und füge das Event-Skript ein; mehr zu Event-Handlern und Listenern findest du unter registerEventHandler().
7. Lege im Reiter „Bedingungen“ des Interface, das ausfahren soll, die Bedingungen hover, mwheel und mwtoggle an und setze alle auf false.
8a. 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.
8b. Füge dem Button eine Aktion für das Betreten mit der Maus mit diesen Aktionsteilen hinzu ...

if condition 'mwheel' is false
 change condition 'hover' to true
end if

9. Füge im Reiter Eigenschaften des Interface diesen Aktionsteil zur Aktion beim Verlassen hinzu ...

change condition 'hover' to false

10. Zum Umschalten des Mausradmodus legst du in deinem Optionsmenü ein Objekt oder einen Tastaturbefehl an mit ...

if condition 'mwheel' is false
 change condition 'mwheel' to true
 pause for 10 milliseconds
 execute a script 'mwMode()'
else
 change condition 'mwheel' to false
 pause for 10 milliseconds
 execute a script 'mwMode()'
end if

11. Um festzulegen, ob Mausrad nach oben oder unten das Interface öffnet oder schließt, legst du in deinem Optionsmenü ein Objekt oder einen Tastaturbefehl an mit ...

if condition 'mwtoggle' is false
 change condition 'mwtoggle' to true
else
 change condition 'mwtoggle' to false
end if

Hauptskript

--[[
Deponia Based Sliding Interface [v4] (18/03/2013)
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 getInterface = getObject("Interfaces[inventory]") -- stores interface into a variable (replace "inventory" with your interface name)

local minOffset = {x = 0, y = 0} -- replace min offset values with current x,y absolute position of your interface
local maxOffset = {x = 0, y = 0} -- replace max offset values with the x,y values that you want the interface to slide to
local mwOffset = 0 -- this should be same value or slightly larger than the overlap amount of minOffset
local checkOffset = getInterface:getPoint(VInterfaceOffset) -- stores current position of interface on start

local inSpeed = 1 -- replace "1" with x number of squares you want interface to move back to start position on each loop
local outSpeed = 2 -- replace "2" with x number of squares you want interface to move to max position on each loop

local slideDirection = 1 -- set direction interface should slide from (1 = left, 2 = top, 3 = right, 4 = bottom) 

local hover = getObject("Conditions[hover]") -- store hover condition
local mwheel = getObject("Conditions[mwheel]") -- store mouse mwheel condition

-- * global variables * --
mwUp = 0 -- this controls if mouse wheel up or down has been executed; by default "0" = nil (!important: do not edit)

-- * function that moves the linked interface * --
function intSlide()
 -- * let's create the on mouse over code * --
 if hover:getBool(VConditionValue) and not mwheel:getBool(VConditionValue) then -- check if "hover" = true & "mwheel" = false
  if mwUp ~= 0 then mwUp = 0 end -- check if mouse wheel is active; if it is, then set inactive
  -- * let's slide the x position of the interface based on slideDirection (out) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x < maxOffset.x then checkOffset.x = checkOffset.x + outSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x > maxOffset.x then checkOffset.x = maxOffset.x setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x > maxOffset.x then checkOffset.x = checkOffset.x - outSpeed setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x < maxOffset.x then checkOffset.x = maxOffset.x setIntPos() end
  -- * let's slide the y position of the interface based on SlideDirection (out) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y < maxOffset.y then checkOffset.y = checkOffset.y + outSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y > maxOffset.y then checkOffset.y = maxOffset.y setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y > maxOffset.y then checkOffset.y = checkOffset.y - outSpeed setIntPos()  end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y < maxOffset.y then checkOffset.y = maxOffset.y setIntPos() end
 elseif not hover:getBool(VConditionValue) and not mwheel:getBool(VConditionValue) then
  if mwUp ~= 0 then mwUp = 0 end -- check if mouse wheel is active; if it is, then set inactive
  -- * let's slide the x position of the interface based on slideDirection (in) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x > minOffset.x then checkOffset.x = checkOffset.x - inSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x < minOffset.x then checkOffset.x = minOffset.x setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x < minOffset.x then checkOffset.x = checkOffset.x + inSpeed setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x > minOffset.x then checkOffset.x = minOffset.x setIntPos() end
  -- * let's slide the y position of the interface based on SlideDirection (in) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y > minOffset.y then checkOffset.y = checkOffset.y - inSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y < minOffset.y then checkOffset.y = minOffset.y setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y < minOffset.y then checkOffset.y = checkOffset.y + inSpeed setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y > minOffset.y then checkOffset.y = minOffset.y setIntPos() end
 end
 -- * let's create the mouse wheel code * --
 if not hover:getBool(VConditionValue) and mwheel:getBool(VConditionValue) and mwUp == 1 then -- check if mouse wheel up has been rotated
  -- * let's slide the x position of the interface based on slideDirection (out) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x < maxOffset.x then checkOffset.x = checkOffset.x + outSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.x > maxOffset.x then checkOffset.x = maxOffset.x setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x > maxOffset.x then checkOffset.x = checkOffset.x - outSpeed setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.x < maxOffset.x then checkOffset.x = maxOffset.x setIntPos() end
  -- * let's slide the y position of the interface based on SlideDirection (out) * --
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y < maxOffset.y then checkOffset.y = checkOffset.y + outSpeed setIntPos() end
  if (slideDirection == 1 or slideDirection == 2) and checkOffset.y > maxOffset.y then checkOffset.y = maxOffset.y setIntPos() end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y > maxOffset.y then checkOffset.y = checkOffset.y - outSpeed setIntPos()  end
  if (slideDirection == 3 or slideDirection == 4) and checkOffset.y < maxOffset.y then checkOffset.y = maxOffset.y setIntPos() end
 end
 if not hover:getBool(VConditionValue) and mwheel:getBool(VConditionValue) and mwUp == 2 then -- check if mouse wheel down has been rotated
  -- * let's slide the x position of the interface based on slideDirection (in) * --
  if slideDirection == 1 and checkOffset.x > minOffset.x - mwOffset then checkOffset.x = checkOffset.x - inSpeed setIntPos() end
  if slideDirection == 1 and checkOffset.x < minOffset.x - mwOffset then checkOffset.x = minOffset.x - mwOffset setIntPos() end
  if slideDirection == 2 and checkOffset.x > minOffset.x then checkOffset.x = checkOffset.x - inSpeed setIntPos() end
  if slideDirection == 2 and checkOffset.x < minOffset.x then checkOffset.x = minOffset.x setIntPos() end
  if slideDirection == 3 and checkOffset.x < minOffset.x + mwOffset then checkOffset.x = checkOffset.x + inSpeed setIntPos() end
  if slideDirection == 3 and checkOffset.x > minOffset.x + mwOffset then checkOffset.x = minOffset.x + mwOffset setIntPos() end
  if slideDirection == 4 and checkOffset.x < minOffset.x then checkOffset.x = checkOffset.x + inSpeed setIntPos() end
  if slideDirection == 4 and checkOffset.x > minOffset.x then checkOffset.x = minOffset.x setIntPos() end
  -- * let's slide the y position of the interface based on SlideDirection (in) * --
  if slideDirection == 1 and checkOffset.y > minOffset.y then checkOffset.y = checkOffset.y - inSpeed setIntPos() end
  if slideDirection == 1 and checkOffset.y < minOffset.y then checkOffset.y = minOffset.y setIntPos() end
  if slideDirection == 2 and checkOffset.y > minOffset.y - mwOffset then checkOffset.y = checkOffset.y - inSpeed setIntPos() end
  if slideDirection == 2 and checkOffset.y < minOffset.y - mwOffset then checkOffset.y = minOffset.y - mwOffset setIntPos() end
  if slideDirection == 3 and checkOffset.y < minOffset.y then checkOffset.y = checkOffset.y + inSpeed setIntPos() end
  if slideDirection == 3 and checkOffset.y > minOffset.y then checkOffset.y = minOffset.y setIntPos() end
  if slideDirection == 4 and checkOffset.y < minOffset.y + mwOffset then checkOffset.y = checkOffset.y + inSpeed setIntPos() end
  if slideDirection == 4 and checkOffset.y > minOffset.y + mwOffset then checkOffset.y = minOffset.y + mwOffset setIntPos() end
 end
end

 -- * updates the current position of the interface * --
function setIntPos()
 getInterface:setValue(VInterfaceOffset, checkOffset)
end

-- * let's check if mouse wheel mode = true; if true then hide the interface else overlap interface slightly * --
function mwMode()
 if mwheel:getBool(VConditionValue) then
  if slideDirection == 1 then checkOffset = {x = minOffset.x - mwOffset, y = minOffset.y} setIntPos() end
  if slideDirection == 2 then checkOffset = {x = minOffset.x, y = minOffset.y - mwOffset} setIntPos() end
  if slideDirection == 3 then checkOffset = {x = minOffset.x + mwOffset, y = minOffset.y} setIntPos() end
  if slideDirection == 4 then checkOffset = {x = minOffset.x, y = minOffset.y + mwOffset} setIntPos() end
 else
  checkOffset = {x = minOffset.x, y = minOffset.y}
  setIntPos()
 end
end

Ereignisskript

-- * this is the mainLoop event function (all loop events & functions for looping should be added or linked here) * --
function onMainLoop()
 intSlide() -- loop the function which checks if interface should be sliding in, out or at default position!
end
 
-- * this is the mouse event listener! (all mouse events & functions should be added or linked here) * --
function onMouseEvent(eventType)
 if not getObject("Conditions[mwtoggle]"):getBool(VConditionValue) then -- if toggle is false then set default
  if eventType == eEvtMouseWheelUp then mwUp = 1 end
  if eventType == eEvtMouseWheelDown then mwUp = 2 end
 else -- invert mouse wheel
  if eventType == eEvtMouseWheelUp then mwUp = 2 end
  if eventType == eEvtMouseWheelDown then mwUp = 1 end
 end
end

-- * let's create the mouse event listener! * --
registerEventHandler("mouseEvent", "onMouseEvent", {eEvtMouseWheelUp, eEvtMouseWheelDown})
-- * let's create the loop event handler! * --
registerEventHandler("mainLoop", "onMainLoop")