openage icon indicating copy to clipboard operation
openage copied to clipboard

Array Curve container

Open heinezen opened this issue 1 year ago • 0 comments

We should add a curve::Array type to our curve container classes to record changes to a fixed size sequence over time. In comparison to https://github.com/SFTtech/openage/issues/1677 we can probably optimize a lot more since the size doesn't change over time (i.e. no inserts or erasures).

The new array type should implement these methods:

Read

Method Description
get(t, i) Get value of index i at time t
get(t) Get vector at time t
size() Get size of the array
frame(t, i) Get the previous keyframe (time and value) of index i before or at t
next_frame(t, i) Get the next keyframe (time and value) of index i after t

There should also be an iterator type to iterate over the array at time t.

Modify

Method Description
set_insert(t, i, value) Insert a new keyframe value at time t at index i
set_last(t, i, value) Insert a new keyframe value at time t; delete all keyframes after time t at index i
set_replace(t, i, value) Insert a new keyframe value at time t at index i; remove all other keyframes with time t at index i

Copy

Method Description
sync(Curve, t) Replace all keyframes from self after time t with keyframes from source Curve after time t

heinezen avatar Aug 25 '24 03:08 heinezen