Improved Docs, AnimationStepApplyMesh+Materials, some other minor tweaks

This commit is contained in:
2026-02-06 17:34:26 -05:00
parent a2e179e15b
commit 56765fdc16
28 changed files with 731 additions and 165 deletions

View File

@@ -85,11 +85,11 @@ static AnimValue parse_anim_value(LuaCoreStack &LS, LuaSlot val) {
return result;
}
void AnimState::set_persistent(const eng::string &name) {
void AnimStepEditor::set_persistent(const eng::string &name) {
map_[name].persistent = true;
}
void AnimState::print_debug_string(eng::ostringstream &oss) {
void AnimStepEditor::print_debug_string(eng::ostringstream &oss) {
bool first = true;
if (map_.empty()) {
oss << "[empty]";
@@ -117,13 +117,13 @@ void AnimState::print_debug_string(eng::ostringstream &oss) {
}
}
eng::string AnimState::debug_string() {
eng::string AnimStepEditor::debug_string() {
eng::ostringstream oss;
print_debug_string(oss);
return oss.str();
}
eng::string AnimState::encode() const {
eng::string AnimStepEditor::encode() const {
StreamBuffer sb;
for (const auto &pair : map_) {
const eng::string &name = pair.first;
@@ -135,7 +135,7 @@ eng::string AnimState::encode() const {
return eng::string(sb.view());
}
void AnimState::decode(std::string_view s) {
void AnimStepEditor::decode(std::string_view s) {
map_.clear();
StreamBuffer sb(s);
while (!sb.empty()) {
@@ -146,7 +146,7 @@ void AnimState::decode(std::string_view s) {
}
}
void AnimState::decode_persistent(std::string_view s) {
void AnimStepEditor::decode_persistent(std::string_view s) {
map_.clear();
StreamBuffer sb(s);
AnimValue dummy;
@@ -163,7 +163,7 @@ void AnimState::decode_persistent(std::string_view s) {
}
}
eng::string AnimState::add_default(const eng::string &name, const AnimValue &def, const AnimState *other) {
eng::string AnimStepEditor::add_default(const eng::string &name, const AnimValue &def, const AnimStepEditor *other) {
AnimValue &value = map_[name];
value.persistent = true;
if (value.type == SimpleDynamicTag::UNINITIALIZED) {
@@ -185,7 +185,7 @@ eng::string AnimState::add_default(const eng::string &name, const AnimValue &def
return "";
}
eng::string AnimState::add_defaults(const AnimState *other) {
eng::string AnimStepEditor::add_defaults(const AnimStepEditor *other) {
eng::string err;
AnimValue defval;
@@ -209,7 +209,7 @@ eng::string AnimState::add_defaults(const AnimState *other) {
}
eng::string AnimState::from_lua(LuaCoreStack &LS0, LuaSlot tab, bool persistent, bool allowauto) {
eng::string AnimStepEditor::from_lua(LuaCoreStack &LS0, LuaSlot tab, bool persistent, bool allowauto) {
LuaVar key, val;
LuaExtStack LS(LS0.state(), key, val);
util::DXYZ xyz;
@@ -241,7 +241,7 @@ eng::string AnimState::from_lua(LuaCoreStack &LS0, LuaSlot tab, bool persistent,
return "";
}
eng::string AnimState::merge(const AnimState &previous, const AnimState &update) {
eng::string AnimStepEditor::merge(const AnimStepEditor &previous, const AnimStepEditor &update) {
// Copy everything over from the previous entry.
map_ = previous.map_;
@@ -286,7 +286,7 @@ eng::string AnimState::merge(const AnimState &previous, const AnimState &update)
}
void AnimState::to_lua(LuaCoreStack &LS0, LuaSlot tab, bool transient, bool persistent) {
void AnimStepEditor::to_lua(LuaCoreStack &LS0, LuaSlot tab, bool transient, bool persistent) {
LuaVar name, val;
LuaExtStack LS(LS0.state(), name, val);
LS.newtable(tab);
@@ -319,7 +319,7 @@ void AnimState::to_lua(LuaCoreStack &LS0, LuaSlot tab, bool transient, bool pers
// The syntax used by this parser is not general enough to represent all
// possible strings. That's OK, though, since it's just for unit testing.
void AnimState::parse(std::string_view config) {
void AnimStepEditor::parse(std::string_view config) {
while (true) {
config = sv::ltrim(config);
if (config.empty()) break;
@@ -336,7 +336,7 @@ void AnimState::parse(std::string_view config) {
}
}
void AnimState::clear_and_parse(std::string_view config) {
void AnimStepEditor::clear_and_parse(std::string_view config) {
map_.clear();
parse(config);
}
@@ -442,15 +442,15 @@ void AnimQueue::update_encqueue(int limit, bool add, std::string_view add_enc, i
}
AnimQueue::AnimQueue() {
update_encqueue(10, true, AnimState().encode(), 0, 0);
update_encqueue(10, true, AnimStepEditor().encode(), 0, 0);
}
void AnimQueue::clear(const AnimState &state) {
void AnimQueue::clear(const AnimStepEditor &state) {
update_encqueue(get_size_limit(), true, state.encode(), 0, 0);
}
void AnimQueue::clear() {
update_encqueue(get_size_limit(), true, AnimState().encode(), 0, 0);
update_encqueue(get_size_limit(), true, AnimStepEditor().encode(), 0, 0);
}
void AnimQueue::set_limit(int limit) {
@@ -458,12 +458,12 @@ void AnimQueue::set_limit(int limit) {
update_encqueue(limit, false, std::string_view(), 0, limit);
}
void AnimQueue::add(const AnimState &state) {
void AnimQueue::add(const AnimStepEditor &state) {
int limit = get_size_limit();
update_encqueue(limit, true, state.encode(), 0, limit - 1);
}
void AnimQueue::replace(const AnimState &state) {
void AnimQueue::replace(const AnimStepEditor &state) {
int limit = get_size_limit();
update_encqueue(limit, true, state.encode(), 1, limit);
}
@@ -528,7 +528,7 @@ void AnimQueue::print_debug_string(eng::ostringstream &oss, bool full) const {
assert(sb.empty());
for (int i = encsteps.size() - 1; i >= 0; i --) {
if (!first) oss << "; ";
AnimState state(encsteps[i]);
AnimStepEditor state(encsteps[i]);
state.print_debug_string(oss);
first = false;
}
@@ -553,16 +553,16 @@ AnimCoreState AnimQueue::get_final_core_state() const {
return result;
}
AnimState AnimQueue::get_final_persistent() const {
AnimStepEditor AnimQueue::get_final_persistent() const {
std::string_view encstep = get_final_encstep();
AnimState result;
AnimStepEditor result;
result.decode_persistent(encstep);
return result;
}
AnimState AnimQueue::get_final_everything() const {
AnimStepEditor AnimQueue::get_final_everything() const {
std::string_view encstep = get_final_encstep();
AnimState result;
AnimStepEditor result;
result.decode(encstep);
return result;
}
@@ -571,44 +571,44 @@ LuaDefine(unittests_animqueue, "", "some unit tests") {
// Useful objects.
AnimQueue aq, aqs;
StreamBuffer sb;
AnimState astate;
AnimStepEditor astate;
eng::string enc;
AnimCoreState core;
// Debug string of a newly initialized queue
LuaAssertStrEq(L, aq.full_debug_string(), "limit=10; [empty]");
// Test AnimState simple setters.
// Test AnimStepEditor simple setters.
astate.set_string("color", "blue");
astate.set_dxyz("xyz", util::DXYZ(1,2,3));
astate.set_number("half", 0.5);
astate.set_boolean("nice", true);
LuaAssertStrEq(L, astate.debug_string(), "color:blue half:0.5 nice:true xyz:1,2,3");
// // Test AnimState simple getters.
// // Test AnimStepEditor simple getters.
// LuaAssert(L, astate.get_string("color") == "blue");
// LuaAssert(L, astate.get_xyz("xyz") == util::DXYZ(1,2,3));
// LuaAssert(L, astate.get_number("half") == 0.5);
// LuaAssert(L, astate.get_boolean("nice") == true);
// // Test AnimState simple getters on nonexistent data.
// // Test AnimStepEditor simple getters on nonexistent data.
// LuaAssert(L, astate.get_string("q") == "");
// LuaAssert(L, astate.get_xyz("q") == util::DXYZ(0,0,0));
// LuaAssert(L, astate.get_number("q") == 0.0);
// LuaAssert(L, astate.get_boolean("q") == false);
// // Test AnimState simple getters on wrong-type data.
// // Test AnimStepEditor simple getters on wrong-type data.
// LuaAssert(L, astate.get_string("half") == "");
// LuaAssert(L, astate.get_xyz("half") == util::DXYZ(0,0,0));
// LuaAssert(L, astate.get_number("color") == 0.0);
// LuaAssert(L, astate.get_boolean("color") == false);
// Test AnimState persistence manipulation.
// Test AnimStepEditor persistence manipulation.
astate.set_persistent("color");
astate.set_persistent("nice");
LuaAssertStrEq(L, astate.debug_string(), "color=blue half:0.5 nice=true xyz:1,2,3");
// Test AnimState parser.
// Test AnimStepEditor parser.
astate.clear_and_parse("color:green mean=true pos=3,4,5 ok:false");
LuaAssertStrEq(L, astate.debug_string(), "color:green mean=true ok:false pos=3,4,5");