From 44f5c2b2d3b3d803d3a4897f2cae04ca8fb16bd4 Mon Sep 17 00:00:00 2001 From: "Johnny C. Lam" Date: Fri, 15 Nov 2013 19:58:14 +0000 Subject: [PATCH] Fix the start time of an action displayed in the icon. This had assumed that the current time was in the first interval of the time-span, which is not always true. Implement a new method for OvaleTimeSpan to determine the next time given a starting point, and use that method instead of making the assumption. git-svn-id: svn://svn.curseforge.net/wow/ovale/mainline/trunk@1177 d5049fe3-3747-40f7-a4b5-f36d6801af5f --- OvaleFrame.lua | 6 ++++-- OvaleTimeSpan.lua | 12 ++++++++++++ compiler.pl | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/OvaleFrame.lua b/OvaleFrame.lua index 68585f0..2fc6ec8 100644 --- a/OvaleFrame.lua +++ b/OvaleFrame.lua @@ -22,6 +22,7 @@ do local OvaleGUID = Ovale.OvaleGUID local OvaleOptions = Ovale.OvaleOptions local OvaleState = Ovale.OvaleState + local OvaleTimeSpan = Ovale.OvaleTimeSpan local Type = "OvaleFrame" local Version = 7 @@ -34,6 +35,7 @@ do local API_GetSpellTexture = GetSpellTexture local API_GetTime = GetTime local API_RegisterStateDriver = RegisterStateDriver + local NextTime = OvaleTimeSpan.NextTime -- -- @@ -186,7 +188,7 @@ do Ovale:Logf("****Master Node %d", k) OvaleBestAction:StartNewAction() local timeSpan, _, element = OvaleBestAction:Compute(node) - local start = timeSpan[1] + local start = NextTime(timeSpan, state.currentTime) if start then Ovale:Logf("Compute start = %f", start) end @@ -278,7 +280,7 @@ do end OvaleState:ApplySpell(spellId, start, start + castTime, nextCast, false, OvaleGUID:GetGUID(spellTarget)) timeSpan, _, element = OvaleBestAction:Compute(node) - start = timeSpan[1] + start = NextTime(timeSpan, state.currentTime) icons[2]:Update(element, start, OvaleBestAction:GetActionInfo(element)) else icons[2]:Update(element, nil) diff --git a/OvaleTimeSpan.lua b/OvaleTimeSpan.lua index 1f098b9..88d6b1b 100644 --- a/OvaleTimeSpan.lua +++ b/OvaleTimeSpan.lua @@ -147,6 +147,18 @@ function OvaleTimeSpan:HasTime(atTime) return false end +function OvaleTimeSpan:NextTime(atTime) + local A = self + local countA = A and #A or 0 + for i = 1, countA, 2 do + if atTime < A[i] then + return A[i] + elseif A[i] <= atTime and atTime <= A[i+1] then + return atTime + end + end +end + function OvaleTimeSpan:Measure() local A = self local countA = A and #A or 0 diff --git a/compiler.pl b/compiler.pl index 0aad2b8..bf8b2f5 100644 --- a/compiler.pl +++ b/compiler.pl @@ -115,6 +115,7 @@ $sp{OvaleTimeSpan}{HasTime} = true; $sp{OvaleTimeSpan}{Intersect} = true; $sp{OvaleTimeSpan}{IntersectInterval} = true; $sp{OvaleTimeSpan}{Measure} = true; +$sp{OvaleTimeSpan}{NextTime} = true; $sp{OvaleTimeSpan}{Union} = true; sub ParseDirectory -- 1.7.9.5