Difference between revisions of "RegisterHookFunction"

From The Official Visionaire Studio: Adventure Game Engine Wiki
 
Line 1: Line 1:
==registerHookFunction==
+
#REDIRECT [[Global Command: registerHookFunction]]
 
 
<div class="command-min-version-info">Available since: <span class="command-min-version">v3.0</span></div>
 
 
 
<div class="command-doc">Registers a hook function for a specific operation.</div>
 
 
 
Lua Syntax:
 
<pre class="command-syntax">registerHookFunction(hook, hookFunction)</pre>
 
===Arguments===
 
====hook====
 
:'''"string"''' - The operation for which the hook function should be called. Currently supported hooks: "setTextPosition" (the hook is called everytime the position of a displayed text is set), "getActionText" (the hook is called everytime to get the currently displayed action text), "getWalkAnimationIndex" (the hook is called everytime a character changes its direction during walking).
 
====hookFunction====
 
:'''"string"''' - The name of the lua function which is called when the hook is executed.
 
:"setTextPosition": The function should take exactly one argument which is the affected visionaire object. The function must return a boolean value: true if the operation was handled in the hook function, false if the operation was not handled and should be handled by the engine (as if there were no hook).
 
:"getActionText": The function should take exactly one argument which is the current mouse position (a table containing x- and y-position). The function must return a string value which will be used as the current action text.
 
:"getCharacterAnimationIndex": The function takes exactly 3 arguments: the character (visionaire object), animation type () and new direction (degrees). The function must return an integer value which specifies the walk animation to use for the new direction (0-based index).
 
:If -1 is returned the index is handled by the engine (as if there were no hook).
 
===Flags===
 
===Return Values===
 
None.
 
===Examples===
 
Example 1: setTextPosition
 
<syntaxhighlight>
 
function adaptedTextPosition(text)
 
  -- show texts of character Hero 10 pixel below character position
 
  local owner = text:getLink(VTextOwner)
 
  if owner:getId().tableId == eCharacters and owner:getName() == 'Hero' then
 
    local pos = owner:getPoint(VCharacterPosition)
 
    pos.y = pos.y + 10
 
    text:setValue(VTextPosition, pos)
 
    return true
 
  end
 
  return false
 
end
 
 
 
registerHookFunction("setTextPosition", "adaptedTextPosition")
 
 
 
</syntaxhighlight>
 
Example 2: getActionText
 
<syntaxhighlight>
 
function myActionText(mousePos)
 
  -- individual action text: object name (in current language) of object below cursor, if there is no object then '<empty>' is shown as action text
 
  local obj = game:getLink(VGameCurrentObject)
 
  if obj:getId().tableId == eObjects then
 
    return 'current object: ' .. obj:getTextStr(VObjectName)
 
  end
 
  return '<empty>'
 
end
 
 
 
registerHookFunction("getActionText", "myActionText")
 
 
 
</syntaxhighlight>
 

Latest revision as of 13:28, 19 May 2023