这是indexloc提供的服务,不要输入任何密码
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions libopenage/curve/base_curve.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ void BaseCurve<T>::set_last(const time::time_t &at, const T &value) {
auto hint = this->container.last(at, this->last_element);

// erase max one same-time value
if (hint->time == at) {
if (hint->time() == at) {
hint--;
}

Expand All @@ -221,7 +221,7 @@ template <typename T>
void BaseCurve<T>::set_insert(const time::time_t &at, const T &value) {
auto hint = this->container.insert_after(at, value, this->last_element);
// check if this is now the final keyframe
if (hint->time > this->last_element->time) {
if (hint->time() > this->last_element->time()) {
this->last_element = hint;
}
this->changes(at);
Expand All @@ -245,23 +245,23 @@ void BaseCurve<T>::erase(const time::time_t &at) {
template <typename T>
std::pair<time::time_t, const T> BaseCurve<T>::frame(const time::time_t &time) const {
auto e = this->container.last(time, this->container.end());
return std::make_pair(e->time, e->value);
return std::make_pair(e->time(), e->value());
}


template <typename T>
std::pair<time::time_t, const T> BaseCurve<T>::next_frame(const time::time_t &time) const {
auto e = this->container.last(time, this->container.end());
e++;
return std::make_pair(e->time, e->value);
return std::make_pair(e->time(), e->value());
}

template <typename T>
std::string BaseCurve<T>::str() const {
std::stringstream ss;
ss << "Curve[" << this->idstr() << "]{" << std::endl;
for (const auto &keyframe : this->container) {
ss << " " << keyframe.time << ": " << keyframe.value << "," << std::endl;
ss << " " << keyframe.time() << ": " << keyframe.value() << "," << std::endl;
}
ss << "}";

Expand All @@ -272,10 +272,10 @@ template <typename T>
void BaseCurve<T>::check_integrity() const {
time::time_t last_time = time::TIME_MIN;
for (const auto &keyframe : this->container) {
if (keyframe.time < last_time) {
if (keyframe.time() < last_time) {
throw Error{MSG(err) << "curve is broken after t=" << last_time << ": " << this->str()};
}
last_time = keyframe.time;
last_time = keyframe.time();
}
}

Expand Down
4 changes: 2 additions & 2 deletions libopenage/curve/continuous.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2017-2023 the openage authors. See copying.md for legal info.
// Copyright 2017-2024 the openage authors. See copying.md for legal info.

#pragma once

Expand Down Expand Up @@ -48,7 +48,7 @@ void Continuous<T>::set_last(const time::time_t &at, const T &value) {
auto hint = this->container.last(at, this->last_element);

// erase all same-time entries
while (hint->time == at) {
while (hint->time() == at) {
hint--;
}

Expand Down
8 changes: 4 additions & 4 deletions libopenage/curve/discrete.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2017-2023 the openage authors. See copying.md for legal info.
// Copyright 2017-2024 the openage authors. See copying.md for legal info.

#pragma once

Expand Down Expand Up @@ -55,7 +55,7 @@ template <typename T>
T Discrete<T>::get(const time::time_t &time) const {
auto e = this->container.last(time, this->last_element);
this->last_element = e; // TODO if Caching?
return e->value;
return e->value();
}


Expand All @@ -78,7 +78,7 @@ template <typename T>
std::pair<time::time_t, T> Discrete<T>::get_time(const time::time_t &time) const {
auto e = this->container.last(time, this->last_element);
this->last_element = e;
return std::make_pair(e->time, e->value);
return std::make_pair(e->time(), e->value());
}


Expand All @@ -94,7 +94,7 @@ std::optional<std::pair<time::time_t, T>> Discrete<T>::get_previous(const time::
}

e--;
return std::make_pair(e->time, e->value);
return std::make_pair(e->time(), e->value());
}

} // namespace openage::curve
2 changes: 1 addition & 1 deletion libopenage/curve/discrete_mod.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ void DiscreteMod<T>::erase(const time::time_t &at) {
BaseCurve<T>::erase(at);

if (this->time_length == at) {
this->time_length = this->last_element->time;
this->time_length = this->container.get(this->container.size() - 1).time();
}
}

Expand Down
8 changes: 4 additions & 4 deletions libopenage/curve/interpolated.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ T Interpolated<T>::get(const time::time_t &time) const {

time::time_t interval = 0;

auto offset = time - e->time;
auto offset = time - e->time();

if (nxt != this->container.end()) {
interval = nxt->time - e->time;
interval = nxt->time() - e->time();
}

// here, offset > interval will never hold.
Expand All @@ -62,7 +62,7 @@ T Interpolated<T>::get(const time::time_t &time) const {
|| offset == 0 // values equal -> don't need to interpolate
|| interval == 0) { // values at the same time -> division-by-zero-error

return e->value;
return e->value();
}
else {
// Interpolation between time(now) and time(next) that has elapsed
Expand All @@ -72,7 +72,7 @@ T Interpolated<T>::get(const time::time_t &time) const {
// TODO: nxt->value - e->value will produce wrong results if
// the nxt->value < e->value and curve element type is unsigned
// Example: nxt = 2, e = 4; type = uint8_t ==> 2 - 4 = 254
return e->value + (nxt->value - e->value) * elapsed_frac;
return e->value() + (nxt->value() - e->value()) * elapsed_frac;
}
}

Expand Down
39 changes: 33 additions & 6 deletions libopenage/curve/keyframe.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright 2019-2023 the openage authors. See copying.md for legal info.
// Copyright 2019-2024 the openage authors. See copying.md for legal info.

#pragma once

Expand All @@ -24,17 +24,44 @@ class Keyframe {
* New, default-constructed element at the given time
*/
Keyframe(const time::time_t &time) :
time{time} {}
timestamp{time} {}

/**
* New element fron time and value
*/
Keyframe(const time::time_t &time, const T &value) :
time{time},
value{value} {}
timestamp{time},
val{value} {}

const time::time_t time = time::TIME_MIN;
T value = T{};

/**
* Get the time of this keyframe.
*
* @return Keyframe time.
*/
const time::time_t &time() const {
return this->timestamp;
}

/**
* Get the value of this keyframe.
*
* @return Keyframe value.
*/
const T &value() const {
return this->val;
}

private:
/**
* The time of this keyframe.
*/
time::time_t timestamp = time::TIME_MIN;

/**
* The value of this keyframe.
*/
T val = T{};
};

} // namespace openage::curve
Loading