From 1a4bf8855766b1553696414ca23810b8f4197423 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Sun, 10 Nov 2013 00:30:42 +0000 Subject: [PATCH] Allow script condition to return "by value" if asValue=1 is a parameter. This mirrors the way that custom functions defined via AddFunction work when asValue=1 is in the function definition. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1144 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleBestAction.lua | 58 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/OvaleBestAction.lua b/OvaleBestAction.lua index 6f2239e..f5f2cde 100644 --- a/OvaleBestAction.lua +++ b/OvaleBestAction.lua @@ -158,10 +158,31 @@ local function ComputeAction(element) end end Ovale:Logf("Action %s can start at %f", action, start) + timeSpan[1], timeSpan[2] = start, math.huge + + --[[ + Allow for the return value of an to be "typecast" to a constant value by specifying + asValue=1 as a parameter. + + Return 1 if the action is off of cooldown, or 0 if it is on cooldown. + --]] + local value + if element.params.asValue and element.params.asValue == 1 then + local atTime = OvaleState.currentTime + if HasTime(timeSpan, atTime) then + value = 1 + else + value = 0 + end + timeSpan[1], timeSpan[2] = 0, math.huge + end local priority = element.params.priority or OVALE_DEFAULT_PRIORITY - timeSpan[1], timeSpan[2] = start, math.huge - return timeSpan, priority, element + if value then + return timeSpan, priority, PutValue(element, value, 0, 0) + else + return timeSpan, priority, element + end end local function ComputeAnd(element) @@ -388,7 +409,7 @@ local function ComputeCustomFunction(element) If the return value is an action, then return 1 if the action is off of cooldown, or 0 if it is on cooldown. - ==]] + --]] local atTime = OvaleState.currentTime local value = 0 if HasTime(timeSpanA, atTime) then @@ -419,6 +440,10 @@ local function ComputeFunction(element) end local start, ending, value, origin, rate = OvaleCondition:EvaluateCondition(element.func, element.params) + if start and ending then + timeSpan[1], timeSpan[2] = start, ending + end + if Ovale.trace then local conditionCall = element.func .. "(" for k, v in pairs(element.params) do @@ -428,9 +453,32 @@ local function ComputeFunction(element) Ovale:FormatPrint("Condition %s returned %s, %s, %s, %s, %s", conditionCall, start, ending, value, origin, rate) end - if start and ending then - timeSpan[1], timeSpan[2] = start, ending + --[[ + Allow for the return value of a script condition to be "typecast" to a constant value + by specifying asValue=1 as a script parameter. + + If the return value is a time span (a "boolean" value), then if the current time of + the simulation is within the time span, then return 1, or 0 otherwise. + + If the return value is a linear function, then if the current time of the simulation + is within the function's domain, then the function is simply evaluated at the current + time, or 0 otherwise. + --]] + if element.params.asValue and element.params.asValue == 1 then + local atTime = OvaleState.currentTime + if HasTime(timeSpan, atTime) then + if value then + value = value + (atTime - origin) * rate + else + value = 1 + end + else + value = 0 + end + origin, rate = 0, 0 + timeSpan[1], timeSpan[2] = 0, math.huge end + if value then return timeSpan, OVALE_DEFAULT_PRIORITY, PutValue(element, value, origin, rate) else -- 1.7.9.5