Add skeleton struct
parent
a4569fbe1e
commit
0d7e873045
|
@ -0,0 +1,68 @@
|
||||||
|
#include "skeleton.h"
|
||||||
|
#include "dmemory.h"
|
||||||
|
#include "osutil.h"
|
||||||
|
|
||||||
|
struct skeleton {
|
||||||
|
skeletonNode *root;
|
||||||
|
};
|
||||||
|
|
||||||
|
skeleton *skeletonCreate(void) {
|
||||||
|
return dcalloc(1, sizeof(skeleton));
|
||||||
|
}
|
||||||
|
|
||||||
|
void skeletonDestroy(skeleton *skl) {
|
||||||
|
dfree(skl);
|
||||||
|
}
|
||||||
|
|
||||||
|
skeletonNode *skeletonNewNode(skeleton *skl) {
|
||||||
|
unsued(skl);
|
||||||
|
return dcalloc(1, sizeof(skeletonNode));
|
||||||
|
}
|
||||||
|
|
||||||
|
void skeletonRemoveNode(skeleton *skl, skeletonNode *node) {
|
||||||
|
skeletonNode *parent = node->parent;
|
||||||
|
skeletonNode *pre = 0;
|
||||||
|
skeletonNode *loop;
|
||||||
|
skeletonNode *next;
|
||||||
|
if (parent) {
|
||||||
|
for (loop = parent->firstChild; loop; pre = loop, loop = loop->nextSib) {
|
||||||
|
if (loop == node) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pre) {
|
||||||
|
pre->nextSib = node->nextSib;
|
||||||
|
} else {
|
||||||
|
parent->firstChild = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (loop = node->firstChild; loop; loop = next) {
|
||||||
|
next = loop->nextSib;
|
||||||
|
skeletonRemoveNode(skl, loop);
|
||||||
|
}
|
||||||
|
if (skl->root == node) {
|
||||||
|
skl->root = 0;
|
||||||
|
}
|
||||||
|
dfree(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
void skeletonConnectNodes(skeleton *skl, skeletonNode *first,
|
||||||
|
skeletonNode *second) {
|
||||||
|
if (first->firstChild) {
|
||||||
|
skeletonNode *loop;
|
||||||
|
for (loop = first->firstChild; loop->nextSib; loop = loop->nextSib) {
|
||||||
|
// void
|
||||||
|
}
|
||||||
|
loop->nextSib = second;
|
||||||
|
} else {
|
||||||
|
first->firstChild = second;
|
||||||
|
}
|
||||||
|
second->parent = first;
|
||||||
|
if (!skl->root) {
|
||||||
|
skl->root = first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
skeletonNode *skeletonGetRoot(skeleton *skl) {
|
||||||
|
return skl->root;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef SKELETON_H
|
||||||
|
#define SKELETON_H
|
||||||
|
#include "3dstruct.h"
|
||||||
|
|
||||||
|
typedef struct skeleton skeleton;
|
||||||
|
typedef struct skeletonNode {
|
||||||
|
vec3 position;
|
||||||
|
float radius;
|
||||||
|
struct skeletonNode *parent;
|
||||||
|
struct skeletonNode *firstChild;
|
||||||
|
struct skeletonNode *nextSib;
|
||||||
|
} skeletonNode;
|
||||||
|
|
||||||
|
skeleton *skeletonCreate(void);
|
||||||
|
void skeletonDestroy(skeleton *skl);
|
||||||
|
skeletonNode *skeletonNewNode(skeleton *skl);
|
||||||
|
void skeletonRemoveNode(skeleton *skl, skeletonNode *node);
|
||||||
|
void skeletonConnectNodes(skeleton *skl, skeletonNode *first,
|
||||||
|
skeletonNode *second);
|
||||||
|
skeletonNode *skeletonGetRoot(skeleton *skl);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue