62 lines
1.4 KiB
C++
62 lines
1.4 KiB
C++
|
|
#include "animqueue.hpp"
|
|
#include <limits>
|
|
|
|
|
|
AnimStep::AnimStep() {}
|
|
AnimStep::~AnimStep() {}
|
|
|
|
AnimQueue::AnimQueue(int size_limit) {
|
|
assert(size_limit >= 2);
|
|
size_limit_ = size_limit;
|
|
steps_.emplace_back();
|
|
AnimStep &init = steps_.back();
|
|
init.id_ = 0;
|
|
init.facing_ = 0;
|
|
init.xyz_ = util::XYZ(0,0,0);
|
|
init.graphic_ = "nothing";
|
|
init.plane_ = "nowhere";
|
|
init.bits_ = 0;
|
|
}
|
|
|
|
void AnimQueue::add(int64_t id, const std::string &action) {
|
|
steps_.emplace_back();
|
|
AnimStep &last = steps_.back();
|
|
last = steps_[steps_.size() - 2];
|
|
last.id_ = id;
|
|
last.action_ = action;
|
|
last.bits_ = 0;
|
|
|
|
while (int(steps_.size()) > size_limit_) {
|
|
steps_.pop_front();
|
|
}
|
|
AnimStep &init = steps_.front();
|
|
init.id_ = 0;
|
|
init.action_ = "";
|
|
init.bits_ = 0;
|
|
}
|
|
|
|
void AnimQueue::set_facing(float f) {
|
|
AnimStep &last = steps_.back();
|
|
last.bits_ |= AnimStep::HAS_FACING;
|
|
last.facing_ = f;
|
|
}
|
|
|
|
void AnimQueue::set_xyz(util::XYZ xyz) {
|
|
AnimStep &last = steps_.back();
|
|
last.bits_ |= AnimStep::HAS_XYZ;
|
|
last.xyz_ = xyz;
|
|
}
|
|
|
|
void AnimQueue::set_graphic(const std::string &g) {
|
|
AnimStep &last = steps_.back();
|
|
last.bits_ |= AnimStep::HAS_GRAPHIC;
|
|
last.graphic_ = g;
|
|
}
|
|
|
|
void AnimQueue::set_plane(const std::string &p) {
|
|
AnimStep &last = steps_.back();
|
|
last.bits_ |= AnimStep::HAS_PLANE;
|
|
last.plane_ = p;
|
|
}
|