Initial revision of animqueue
This commit is contained in:
61
luprex/syscpp/animqueue.cpp
Normal file
61
luprex/syscpp/animqueue.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user