Dota 2 Workshop Tools/Scripting/ThinkerFunctions: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
No edit summary
(reorganized the page and added some details)
Line 2: Line 2:
|zh-cn = Dota_2_Workshop_Tools:zh-cn/Scripting:zh-cn/ThinkerFunctions:zh-cn
|zh-cn = Dota_2_Workshop_Tools:zh-cn/Scripting:zh-cn/ThinkerFunctions:zh-cn
}}
}}
[[Think|Thinking]] functions can be registered at any time using <code>SetThink</code> with a function. It is possible to have multiple think functions running on an entity at the same time, but does require the think functions to be named so as not to overlap.
The <code>SetThink</code> function can be used to


== Usage ==
* run a function every ''x'' seconds,
<source lang="lua">SetThink( "ThinkerFunction", self, "thinkerNameString", 1 )</source>
* schedule a function to be run ''x'' seconds from now.


Passing a function to <code>SetThink</code> is called "registering a [[Think|think]] function". It is possible to have multiple think functions running on an entity at the same time, but this does require the think functions to be named so as not to overlap.


* <code>ThinkerFunction</code> - This can be a string of the name of the function to call, or a function object.
{{tip|The source code for <code>SetThink</code> can be found here: <code>/path/to/Steam/SteamApps/common/dota 2 beta/dota/scripts/vscripts/utils/vscriptinit.lua</code>}}
The following arguments are optional:
* <code>ThinkerFunctionScope</code> - This can be a table, to cause ThinkerFunction will be indexed on this object. Use this to get member functions as think callbacks.
* <code>thinkerNameString</code> - The name of the think slot. Use this when handling multiple thinkers.
* <code>1</code> - Number specifying a delay in seconds before the thinker starts to think.


Returning a nil will unregister the thinker and stop it. Returning a number sets the next think time.
== Signature ==
<code>SetThink</code> is a method on the [[Dota_2_Workshop_Tools/Scripting/API#CBaseEntity|<code>CBaseEntity</code>]] class. It can be used in two ways:
 
<span style="color:green">void</span> <span style="color:blue">SetThink</span>(<span style="color:green">function</span> thinkFn, <span style="color:green">string</span> thinkName, <span style="color:green">float</span> initialDelay)
 
; <code>thinkFn</code>
: The function that you want to run.
 
The other two arguments are optional:
 
; <code>thinkName</code>
: The name of the think slot. Use this if you want to register multiple thinkers on the same entity.
; <code>initialDelay</code>
: Delay in seconds before the thinker should start.
 
<span style="color:green">void</span> <span style="color:blue">SetThink</span>(<span style="color:green">string</span> thinkFnName, <span style="color:green">table</span> context, <span style="color:green">string</span> thinkName, <span style="color:green">float</span> initialDelay)
 
; <code>thinkFnName</code>
: The '''name''' of the function you want to run.
; <code>context</code>
: A table/object. The function that will be registered is <code>context[thinkFnName]</code>. In other words, <code>SetThink</code> uses the first argument as an index into the second argument.
; <code>thinkName</code>, <code>initialDelay</code>
: These are optional. Their descriptions are as above.
 
Your function should return a number or <code>nil</code>:
 
* Returning a number sets the next think time.
* Returning <code>nil</code> will unregister the thinker and stop it.


{{shortpagetitle}}
{{shortpagetitle}}
[[Category:Dota 2 Workshop Tools]]
[[Category:Dota 2 Workshop Tools]]

Revision as of 00:58, 14 September 2014

Template:Otherlang2 The SetThink function can be used to

  • run a function every x seconds,
  • schedule a function to be run x seconds from now.

Passing a function to SetThink is called "registering a think function". It is possible to have multiple think functions running on an entity at the same time, but this does require the think functions to be named so as not to overlap.

Tip.pngTip:The source code for SetThink can be found here: /path/to/Steam/SteamApps/common/dota 2 beta/dota/scripts/vscripts/utils/vscriptinit.lua

Signature

SetThink is a method on the CBaseEntity class. It can be used in two ways:

void SetThink(function thinkFn, string thinkName, float initialDelay)
thinkFn
The function that you want to run.

The other two arguments are optional:

thinkName
The name of the think slot. Use this if you want to register multiple thinkers on the same entity.
initialDelay
Delay in seconds before the thinker should start.
void SetThink(string thinkFnName, table context, string thinkName, float initialDelay)
thinkFnName
The name of the function you want to run.
context
A table/object. The function that will be registered is context[thinkFnName]. In other words, SetThink uses the first argument as an index into the second argument.
thinkName, initialDelay
These are optional. Their descriptions are as above.

Your function should return a number or nil:

  • Returning a number sets the next think time.
  • Returning nil will unregister the thinker and stop it.