From 4b0f147d0f578ce0afd6b682ff28da54389b96b4 Mon Sep 17 00:00:00 2001 From: Tazpn <tazpn@users.sourceforge.net> Date: Sun, 10 Sep 2006 16:41:04 +0000 Subject: [PATCH] Update to last changes before the lower case/upper case problem --- obj/ABoneLODController.cpp | 58 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/obj/ABoneLODController.cpp b/obj/ABoneLODController.cpp index a2d55ae5..a3d47c39 100644 --- a/obj/ABoneLODController.cpp +++ b/obj/ABoneLODController.cpp @@ -4,6 +4,7 @@ All rights reserved. Please see niflib.h for licence. */ #include "ABoneLODController.h" #include "../gen/NodeGroup.h" #include "NiNode.h" +#include <algorithm> using namespace Niflib; //Definition of TYPE constant @@ -37,3 +38,60 @@ const Type & ABoneLODController::GetType() const { return TYPE; }; +/*! + * A list of node groups (each group a sequence of bones?). + */ +int ABoneLODController::GetNodeGroupCount() const { + return int(nodeGroups.size()); +} + +vector<Ref<NiNode> > ABoneLODController::GetNodeGroup( int index ) const { + if (index < 0 || index >= int(nodeGroups.size()) ) { + throw runtime_error("Invalid index referenced."); + } + return nodeGroups[index].nodes; +} + +void ABoneLODController::AddNodeToGroup( int index, Ref<NiNode> node ) { + while (index >= int(nodeGroups.size())) + nodeGroups.insert(nodeGroups.end(), NodeGroup() ); + numNodeGroups2 = nodeGroups.size(); + + vector<NiNodeRef>& nodes = nodeGroups[index].nodes; + vector<NiNodeRef>::iterator itr = std::find(nodes.begin(), nodes.end(), node); + if (itr == nodes.end()) + nodes.push_back(node); +} + +void ABoneLODController::RemoveNodeFromGroup( int index, Ref<NiNode> node ) { + if (index < 0 || index >= int(nodeGroups.size()) ) { + throw runtime_error("Invalid index referenced."); + } + vector<NiNodeRef>& nodes = nodeGroups[index].nodes; + vector<NiNodeRef>::iterator itr = std::find(nodes.begin(), nodes.end(), node); + if (itr == nodes.end()) + return; + nodes.erase(itr); +} + +void ABoneLODController::SetNodeGroup( int index, const vector<Ref<NiNode> >& group ) { + while (index >= int(nodeGroups.size())) + nodeGroups.insert(nodeGroups.end(), NodeGroup() ); + numNodeGroups2 = nodeGroups.size(); + nodeGroups[index].nodes.assign(group.begin(), group.end()); +} + +void ABoneLODController::RemoveNodeGroup( int index ) { + if (index < 0 || index >= int(nodeGroups.size()) ) { + throw runtime_error("Invalid index referenced."); + } + vector<NodeGroup>::iterator itr = nodeGroups.begin(); + std::advance(itr, index); + nodeGroups.erase(itr); + numNodeGroups2 = nodeGroups.size(); +} + +void ABoneLODController::ClearNodeGroups() { + nodeGroups.clear(); + numNodeGroups2 = nodeGroups.size(); +} -- GitLab