more tests done, more functions, more progress

This commit is contained in:
jill 2020-12-31 01:48:36 +03:00
parent 316d667c93
commit 006e506901
Signed by: oat
GPG key ID: DD83A9617A252385

View file

@ -4,6 +4,7 @@
+ - tested, implemented, works fine + - tested, implemented, works fine
/ - implemented, but not tested / - implemented, but not tested
- - not implemented, not tested - - not implemented, not tested
? - needs more testing
-- c2l -- c2l
@ -42,42 +43,45 @@
- beatobj:reverse([perc], mod) - beatobj:reverse([perc], mod)
-beatobk:velocitymap([perc], mod) -- kick(), but without aligning the ease at 0 -beatobk:velocitymap([perc], mod) -- kick(), but without aligning the ease at 0
-beatobj:temp([perc], mod) -- does a createTemp() version of the mod -beatobj:temp([perc], mod) -- does a createTemp() version of the mod
/beatobj:addm([perc], mod) -- adds a mod value every beat, useful for offsets +beatobj:addm([perc], mod) -- adds a mod value every beat, useful for offsets
-- perc: mod percentage, defaults to 100 -- perc: mod percentage, defaults to 100
-- mod: mod name -- mod: mod name
/beatobj:f(function(beat, i, off, len) end) -- for custom mods, runs a function for each beat +beatobj:f(function(beat, i, off, len) end) -- for custom mods, runs a function for each beat
-- beat: guess -- beat: guess
-- i: index of beat -- i: index of beat
-- off: offset, is equal to i%2*2-1 -- off: offset, is equal to i%2*2-1
-- len: length until next beat -- len: length until next beat
/beatobj:ease(ease) -- sets an ease function for trailing functions to use +beatobj:ease(ease) -- sets an ease function for trailing functions to use
-- ease: ease function -- ease: ease function
/beatobj:align(a) -- aligns all ease functions with the snapping/fastest point at a +beatobj:align(a) -- aligns all ease functions with the snapping/fastest point at a
-- a: snapping point -- a: snapping point
/beatobj:mixease(ease1, ease2, a) -- does :ease(mixEase(ease1, ease2, a)) and :align(a) +beatobj:mixease(ease1, ease2, a) -- does :ease(mixEase(ease1, ease2, a)) and :align(a)
-- ease1: in easing function -- ease1: in easing function
-- ease2: out easing function -- ease2: out easing function
-- a: snapping point -- a: snapping point
/beatobj:setl(a) -- sets a to the length of each ease +beatobj:setl(a) -- sets a to the length of each ease
-- a: length -- a: length
+beatobj:add(beatobj) -- merges another beatobj table +beatobj:add(beatobj) -- merges another beatobj table
-- beatobj: the merged beatobj -- beatobj: the merged beatobj
/beatobj:clone(beat) -- clones the beat timings from the first beat onward to the beat +beatobj:clone(beat) -- clones the beat timings from the first beat onward to the beat
-- beat: the beat to copy the rhythm to -- beat: the beat to copy the rhythm to
/beatobj:forclone(start, ending, add) -- clone(), but as a for loop +beatobj:forclone(start, ending, add) -- clone(), but as a for loop
-- start, ending and add act like arguments to a for loop -- start, ending and add act like arguments to a for loop
/beatobj:filter(filterfunc) -- filters the beatobj with a filter function, return true to keep the element and false to discard it +beatobj:filter(filterfunc) -- filters the beatobj with a filter function, return true to keep the element and false to discard it
-- filterfunc(value, index): the filter function -- filterfunc(value, index): the filter function
/beatobj:filtermines() -- remove all mines from the c2l +beatobj:filtermines() -- remove all mines from the c2l
?beatobj:merge() -- merge beats that are on the same beat and column
+beatobj:aggressivemerge() -- merge beats that are on the same beat
]] ]]
local function copyTable(datatable) local function copyTable(datatable)
@ -123,6 +127,7 @@
mixease = function(self, e1, e2, a) mixease = function(self, e1, e2, a)
self._ease = mixEase(e1, e2, a) self._ease = mixEase(e1, e2, a)
self._align = a self._align = a
return self
end, end,
-- meta / manipulators -- meta / manipulators
@ -136,7 +141,7 @@
return self return self
end, end,
filtermines = function(self) filtermines = function(self)
self = self:filter(function(v) v[3] ~= 'M' end) self = self:filter(function(v) return v[3] ~= 'M' end)
return self return self
end, end,
f = function(self, forfunc) f = function(self, forfunc)
@ -148,10 +153,11 @@
return self return self
end, end,
clone = function(self, beat) clone = function(self, beat)
local newbeats = self._beats local newbeats = copyTable(self._beats)
for i,v in ipairs(self._beats) do for i,v in ipairs(self._beats) do
local newv = {} local newv = {}
newv[1] = v[1] - self._beats[1][1] + beat newv[1] = v[1] - self._beats[1][1] + beat
print(newv[1])
table.insert(newbeats, newv) table.insert(newbeats, newv)
end end
@ -163,11 +169,47 @@
local oldself = copyTable(self) local oldself = copyTable(self)
for i = start, ending, add do for i = start, ending, add do
self = oldself:clone(i) self = self:add(oldself:clone(i))
end end
return self return self
end, end,
merge = function(self)
local seen = {}
local merged = {}
for _,v in ipairs(self._beats) do
local doMerge = true
for _,s in ipairs(seen) do
if v[1] == s[1] and ((v[2] == nil or s[2] == nil) or v[2] == s[2]) then
doMerge = false
end
end
if doMerge then table.insert(merged, v) end
table.insert(seen, {v[1], v[2]})
end
self._beats = merged
return self
end,
aggressivemerge = function(self)
local seen = {}
local merged = {}
for _,v in ipairs(self._beats) do
local doMerge = true
for _,s in ipairs(seen) do
if v[1] == s[1] then
doMerge = false
end
end
if doMerge then table.insert(merged, v) end
table.insert(seen, {v[1], v[2]})
end
self._beats = merged
return self
end,
-- mods -- mods
wiggle = function(self, perc, mod) wiggle = function(self, perc, mod)
@ -192,7 +234,6 @@
return self return self
end, end,
wiggle0 = beatobjTemplate.onoff,
addm = function(self, perc, mod) addm = function(self, perc, mod)
if mod == nil then mod = perc; perc = 100 end if mod == nil then mod = perc; perc = 100 end
@ -203,7 +244,7 @@
end end
return self return self
end end,
bounce = function(self, perc, mod) bounce = function(self, perc, mod)
if mod == nil then mod = perc; perc = 100 end if mod == nil then mod = perc; perc = 100 end
@ -226,6 +267,9 @@
end end
} }
-- aliases
beatobjTemplate.wiggle0 = beatobjTemplate.onoff
function c2l(start, ending, trunc) function c2l(start, ending, trunc)
local self = copyTable(beatobjTemplate) local self = copyTable(beatobjTemplate)
self._beats = P1:GetNoteData(start, ending) self._beats = P1:GetNoteData(start, ending)