The main release package of Ashita v3. Contains all the needed files for users to get up and running. Used by the launcher/injector to auto-update as well. https://ashitaxi.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

240 lines
9.1 KiB

--[[
* Ashita - Copyright (c) 2014 - 2016 atom0s [atom0s@live.com]
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to
* Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
*
* By using Ashita, you agree to the above license and its terms.
*
* Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were
* made. You must do so in any reasonable manner, but not in any way that suggests the licensor
* endorses you or your use.
*
* Non-Commercial - You may not use the material (Ashita) for commercial purposes.
*
* No-Derivatives - If you remix, transform, or build upon the material (Ashita), you may not distribute the
* modified material. You are, however, allowed to submit the modified works back to the original
* Ashita project in attempt to have it added to the original project.
*
* You may not apply legal terms or technological measures that legally restrict others
* from doing anything the license permits.
*
* No warranties are given.
]]--
ashita = ashita or { };
ashita.timer = ashita.timer or { };
-- Timer Status Definition
local TIMER_PAUSED = 0;
local TIMER_STOPPED = 1;
local TIMER_RUNNING = 2;
-- Timer Table Definitions
ashita.timer.timers = { };
ashita.timer.timersonce = { };
----------------------------------------------------------------------------------------------------
-- func: create_timer
-- desc: Creates a timer object inside of the timer table.
----------------------------------------------------------------------------------------------------
local function create_timer(name)
if (ashita.timer.timers[name] == nil) then
ashita.timer.timers[name] = { };
ashita.timer.timers[name].Status = TIMER_STOPPED;
return true;
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: remove_timer
-- desc: Removes a timer from the timer table.
----------------------------------------------------------------------------------------------------
local function remove_timer(name)
ashita.timer.timers[name] = nil;
end
----------------------------------------------------------------------------------------------------
-- func: is_timer
-- desc: Determines if the given name is a valid timer.
----------------------------------------------------------------------------------------------------
local function is_timer(name)
return ashita.timer.timers[name] ~= nil;
end
----------------------------------------------------------------------------------------------------
-- func: once
-- desc: Creates a one-time timer that fires after the given delay.
----------------------------------------------------------------------------------------------------
local function once(delay, func, ...)
local t = { };
t.Finish = os.time() + delay;
if (func) then
t.Function = func;
end
f.Args = {...};
table.insert(ashita.timer.timersonce, t);
return true;
end
----------------------------------------------------------------------------------------------------
-- func: create
-- desc: Creates a timer.
----------------------------------------------------------------------------------------------------
local function create(name, delay, reps, func, ...)
if (ashita.timer.is_timer(name)) then
ashita.timer.remove_timer(name);
end
ashita.timer.adjust_timer(name, delay, reps, func, unpack({...}));
ashita.timer.start_timer(name);
end
----------------------------------------------------------------------------------------------------
-- func: start_timer
-- desc: Starts a timer by its name.
----------------------------------------------------------------------------------------------------
local function start_timer(name)
if (ashita.timer.is_timer(name)) then
ashita.timer.timers[name].n = 0;
ashita.timer.timers[name].Status = TIMER_RUNNING;
ashita.timer.timers[name].Last = os.time();
return true;
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: adjust_timer
-- desc: Updates a timer objects properties.
----------------------------------------------------------------------------------------------------
local function adjust_timer(name, delay, reps, func, ...)
ashita.timer.create_timer(name);
ashita.timer.timers[name].Delay = delay;
ashita.timer.timers[name].Reps = reps;
ashita.timer.timers[name].Args = {...};
if (func ~= nil) then
ashita.timer.timers[name].Function = func;
end
return true;
end
----------------------------------------------------------------------------------------------------
-- func: pause
-- desc: Pauses a timer.
----------------------------------------------------------------------------------------------------
local function pause(name)
if (ashita.timer.is_timer(name)) then
if (ashita.timer.timers[name].Status == TIMER_RUNNING) then
ashita.timer.timers[name].Diff = os.time() - ashita.timer.timers[name].Last;
ashita.timer.timers[name].Status = TIMER_PAUSED;
return true;
end
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: unpause
-- desc: Unpauses a timer.
----------------------------------------------------------------------------------------------------
local function unpause(name)
if (ashita.timer.is_timer(name)) then
if (ashita.timer.timers[name].Status == TIMER_RUNNING) then
ashita.timer.timers[name].Diff = nil;
ashita.timer.timers[name].Status = TIMER_RUNNING;
return true;
end
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: toggle
-- desc: Toggles a timers paused state.
----------------------------------------------------------------------------------------------------
local function toggle(name)
if (ashita.timer.is_timer(name)) then
if (ashita.timer.timers[name].Status == TIMER_PAUSED) then
return ashita.timer.unpause(name);
elseif (ashita.timer.timers[name].Status == TIMER_RUNNING) then
return ashita.timer.pause(name);
end
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: stop
-- desc: Stops a timer.
----------------------------------------------------------------------------------------------------
local function stop(name)
if (ashita.timer.is_timer(name)) then
ashita.timer.timers[name].Status = TIMER_STOPPED;
return true;
end
return false;
end
----------------------------------------------------------------------------------------------------
-- func: pulse
-- desc: Pulses the timer tables to allow timers to run.
----------------------------------------------------------------------------------------------------
local function pulse(name)
-- Handle the normal timers..
for k, v in pairs(ashita.timer.timers) do
if (v.Status == TIMER_PAUSED) then
v.Last = os.timer() - v.Diff;
elseif (v.Status == TIMER_RUNNING and (v.Last + v.Delay) <= os.time()) then
v.Last = os.time();
v.n = v.n + 1;
-- Call the timer function..
local a, b, c, d, e, f = pcall(v.Function, unpack(v.Args));
if (a == nil or a == false) then
print(_addon.name .. ' - timer.lua pcall error: ' .. tostring(b));
end
-- Stop the timer after its reps were met..
if (v.n >= v.Reps and v.Reps > 0) then
ashita.timer.stop(k);
end
end
end
-- Handle the once timers..
for k, v in pairs(ashita.timer.timersonce) do
if (v.Finish <= os.timer()) then
local a, b, c, d, e, f = pcall(v.Function, unpack(v.Args));
if (a == nil or a == false) then
print(_addon.name .. ' - timer.lua pcall error: ' .. tostring(b));
end
-- Remove the timer..
ashita.timer.timersonce[name] = nil;
end
end
end
ashita.register_event('timerpulse', pulse);
----------------------------------------------------------------------------------------------------
-- Expose The Functions
----------------------------------------------------------------------------------------------------
ashita.timer.create_timer = create_timer;
ashita.timer.remove_timer = remove_timer;
ashita.timer.is_timer = is_timer;
ashita.timer.once = once;
ashita.timer.create = create;
ashita.timer.start_timer = start_timer;
ashita.timer.adjust_timer = adjust_timer;
ashita.timer.pause = pause;
ashita.timer.unpause = unpause;
ashita.timer.toggle = toggle;
ashita.timer.stop = stop;
ashita.timer.pulse = pulse;