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