Garry's Mod Wiki

Revision Difference

Global.Derma_Anim#552204

<function name="Derma_Anim" parent="Global" type="libraryfunc"> <description>Creates a new derma animation.</description> <realm>Client and Menu</realm> <file line="67">lua/derma/derma_animation.lua</file> <file line="59-L70">lua/derma/derma_animation.lua</file> <args> <arg name="name" type="string">Name of the animation to create</arg> <arg name="panel" type="Panel">Panel to run the animation on</arg> <arg name="func" type="function">Function to call to process the animation Arguments: * <page>Panel</page> pnl - the panel passed to Derma_Anim * <page>table</page> anim - the anim table * <page>number</page> delta - the fraction of the progress through the animation * <page>any</page> data - optional data passed to the run metatable method</arg> </args> <rets> <ret name="" type="table">A lua metatable containing four methods: * Run() - Should be called each frame you want the animation to be ran. * Active() - Returns if the animation is currently active (has not finished and stop has not been called) * Stop() - Halts the animation at its current progress. * Start( Length, Data ) - Prepares the animation to be ran for Length seconds. Must be called once before calling Run(). The data parameter will be passed to the func function.</ret> </rets> </function> <example> <description>Applies an [easeInQuad](http://easings.net/#easeInQuad) easing to the panel to make it glide naturally across the screen.</description> <code> local function inQuad(fraction, beginning, change) return change * (fraction ^ 2) + beginning end local main = vgui.Create("DFrame") main:SetTitle("Derma_Anim Example") main:SetSize(250, 200) main:SetPos(200) main:MakePopup() local anim = Derma_Anim("EaseInQuad", main, function(pnl, anim, delta, data) pnl:SetPos(inQuad(delta, 200, 600), 300) -- Change the X coordinate from 200 to 200+600 end) anim:Start(2) -- Animate for two seconds main.Think = function(self) if anim:Active() then anim:Run() end end </code> <output>Panel naturally glides across the screen from 200 x to 800 x</output> </example>