Split skeleton definitions into multiple files, adds hotloading support for skeleton files. Fixes #190.

This was SVN commit r13544.
This commit is contained in:
leper 2013-07-08 20:25:06 +00:00
parent 041855e547
commit 27086be9c3
31 changed files with 2056 additions and 1950 deletions

View File

@ -0,0 +1,28 @@
<skeletons>
<standard_skeleton title="Ballista Weapon" id="ballista">
<bone name="main">
<bone name="weapon"></bone>
<bone name="lever"></bone>
<bone name="arm_left"></bone>
<bone name="arm_right"></bone>
<bone name="sling_left"></bone>
<bone name="sling"></bone>
<bone name="sling_right"></bone>
</bone>
</standard_skeleton>
<skeleton title="Ballista Weapon" target="ballista">
<identifier>
<root>ballista</root>
</identifier>
<bone name="main"><target>main</target>
<bone name="weapon"><target>weapon</target></bone>
<bone name="lever"><target>lever</target></bone>
<bone name="arm_left"><target>arm_left</target></bone>
<bone name="arm_right"><target>arm_right</target></bone>
<bone name="sling_left"><target>sling_left</target></bone>
<bone name="sling"><target>sling</target></bone>
<bone name="sling_right"><target>sling_right</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,186 @@
<skeletons>
<standard_skeleton title="Standard biped" id="biped">
<bone name="root">
<bone name="pelvis">
<bone name="spine">
<bone name="spine1">
<bone name="neck">
<bone name="head">
<bone name="DUMMY_headnub"/> <!-- kept for binary compatibility with PSA files -->
<bone name="l_clavicle">
<bone name="l_upperarm">
<bone name="l_forearm">
<bone name="l_hand">
<bone name="DUMMY_l_finger0">
<bone name="DUMMY_l_finger0nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="r_clavicle">
<bone name="r_upperarm">
<bone name="r_forearm">
<bone name="r_hand">
<bone name="DUMMY_r_finger0">
<bone name="DUMMY_r_finger0nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="l_thigh">
<bone name="l_calf">
<bone name="l_foot">
<bone name="DUMMY_l_toe0">
<bone name="DUMMY_l_toe0nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="r_thigh">
<bone name="r_calf">
<bone name="r_foot">
<bone name="DUMMY_r_toe0">
<bone name="DUMMY_r_toe0nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="3ds Max biped" target="biped">
<identifier>
<root>Bip01</root>
</identifier>
<bone name="Bip01"><target>root</target>
<bone name="Bip01_Pelvis"><target>pelvis</target>
<bone name="Bip01_Spine"><target>spine</target>
<bone name="Bip01_Spine1"><target>spine1</target>
<bone name="Bip01_Neck"><target>neck</target>
<bone name="Bip01_Head"><target>head</target>
<bone name="Bip01_HeadNub"/>
<bone name="Bip01_L_Clavicle"><target>l_clavicle</target>
<bone name="Bip01_L_UpperArm"><target>l_upperarm</target>
<bone name="Bip01_L_Forearm"><target>l_forearm</target>
<bone name="Bip01_L_Hand"><target>l_hand</target>
<bone name="Bip01_L_Finger0">
<bone name="Bip01_L_Finger0Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Bip01_R_Clavicle"><target>r_clavicle</target>
<bone name="Bip01_R_UpperArm"><target>r_upperarm</target>
<bone name="Bip01_R_Forearm"><target>r_forearm</target>
<bone name="Bip01_R_Hand"><target>r_hand</target>
<bone name="Bip01_R_Finger0">
<bone name="Bip01_R_Finger0Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Bip01_L_Thigh"><target>l_thigh</target>
<bone name="Bip01_L_Calf"><target>l_calf</target>
<bone name="Bip01_L_Foot"><target>l_foot</target>
<bone name="Bip01_L_Toe0">
<bone name="Bip01_L_Toe0Nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="Bip01_R_Thigh"><target>r_thigh</target>
<bone name="Bip01_R_Calf"><target>r_calf</target>
<bone name="Bip01_R_Foot"><target>r_foot</target>
<bone name="Bip01_R_Toe0">
<bone name="Bip01_R_Toe0Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</skeleton>
<skeleton title="XSI biped" target="biped">
<identifier>
<root>Biped_GlobalSRT</root>
</identifier>
<bone name="Biped_GlobalSRT">
<target>root</target>
<bone name="Biped_Spine01">
<target>pelvis</target>
<bone name="Biped_Spine02">
<target>spine</target>
<bone name="Biped_Spine03">
<target>spine1</target>
</bone>
</bone>
</bone>
<bone name="Biped_Lshoulder">
<target>l_clavicle</target>
</bone>
<bone name="Biped_Lbicept">
<target>l_upperarm</target>
<bone name="Biped_Lforearm">
<target>l_forearm</target>
</bone>
</bone>
<bone name="Biped_Rshoulder">
<target>r_clavicle</target>
</bone>
<bone name="Biped_Rbicept">
<target>r_upperarm</target>
<bone name="Biped_Rforearm">
<target>r_forearm</target>
</bone>
</bone>
<bone name="Biped_neck">
<target>neck</target>
<bone name="Biped_head">
<target>head</target>
</bone>
</bone>
<bone name="Biped_Lthigh">
<target>l_thigh</target>
<bone name="Biped_Lshin">
<target>l_calf</target>
</bone>
</bone>
<bone name="Biped_Rthigh">
<target>r_thigh</target>
<bone name="Biped_Rshin">
<target>r_calf</target>
</bone>
</bone>
<bone name="Biped_Lhand">
<target>l_hand</target>
<bone name="Biped_Lfingers"/>
</bone>
<bone name="Biped_Lfoot">
<target>l_foot</target>
<bone name="Biped_Ltoe"/>
</bone>
<bone name="Biped_Rhand">
<target>r_hand</target>
<bone name="Biped_Rfingers"/>
</bone>
<bone name="Biped_Rfoot">
<target>r_foot</target>
<bone name="Biped_Rtoe"/>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,94 @@
<skeletons>
<standard_skeleton title="Boar" id="Boar">
<bone name="BoarArmature">
<bone name="Body">
<bone name="Body2">
<bone name="Rear">
<bone name="Tail" />
<bone name="Hip_Left">
<bone name="Back_Leg_Left">
<bone name="Shin_Left">
<bone name="Back_Foot_Left" />
</bone>
</bone>
</bone>
<bone name="Hip_Right">
<bone name="Back_Leg_Right">
<bone name="Shin_Right">
<bone name="Back_Foot_Right" />
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Neck">
<bone name="Head">
<bone name="Ear_Left" />
<bone name="Ear_Right" />
</bone>
</bone>
<bone name="Shoulder_Left">
<bone name="Front_Leg_Left">
<bone name="Forearm_Left">
<bone name="Front_Foot_Left" />
</bone>
</bone>
</bone>
<bone name="Shoulder_Right">
<bone name="Front_Leg_Right">
<bone name="Forearm_Right">
<bone name="Front_Foot_Right" />
</bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="Boar" target="Boar">
<identifier><root>Armature</root></identifier>
<bone name="BoarArmature"><target>BoarArmature</target>
<bone name="Body"><target>Body</target>
<bone name="Body2"><target>Body2</target>
<bone name="Rear"><target>Rear</target>
<bone name="Tail"><target>Tail</target></bone>
<bone name="Hip_Left"><target>Hip_Left</target>
<bone name="Back_Leg_Left"><target>Back_Leg_Left</target>
<bone name="Shin_Left"><target>Shin_Left</target>
<bone name="Back_Foot_Left"><target>Back_Foot_Left</target></bone>
</bone>
</bone>
</bone>
<bone name="Hip_Right"><target>Hip_Right</target>
<bone name="Back_Leg_Right"><target>Back_Leg_Right</target>
<bone name="Shin_Right"><target>Shin_Right</target>
<bone name="Back_Foot_Right"><target>Back_Foot_Right</target></bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Neck"><target>Neck</target>
<bone name="Head"><target>Head</target>
<bone name="Ear_Left"><target>Ear_Left</target></bone>
<bone name="Ear_Right"><target>Ear_Right</target></bone>
</bone>
</bone>
<bone name="Shoulder_Left"><target>Shoulder_Left</target>
<bone name="Front_Leg_Left"><target>Front_Leg_Left</target>
<bone name="Forearm_Left"><target>Forearm_Left</target>
<bone name="Front_Foot_Left"><target>Front_Foot_Left</target></bone>
</bone>
</bone>
</bone>
<bone name="Shoulder_Right"><target>Shoulder_Right</target>
<bone name="Front_Leg_Right"><target>Front_Leg_Right</target>
<bone name="Forearm_Right"><target>Forearm_Right</target>
<bone name="Front_Foot_Right"><target>Front_Foot_Right</target></bone>
</bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,22 @@
<skeletons>
<standard_skeleton title="Chariot Skeleton" id="chariot">
<bone name="base">
<bone name="chariot">
<bone name="left_wheel"></bone>
<bone name="right_wheel"></bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="Chariot Skeleton" target="chariot">
<identifier>
<root>base</root>
</identifier>
<bone name="base"><target>base</target>
<bone name="chariot"><target>chariot</target>
<bone name="left_wheel"><target>left_wheel</target></bone>
<bone name="right_wheel"><target>right_wheel</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,62 @@
<skeletons>
<standard_skeleton title="BlenderChicken" id="BlenderChicken">
<bone name="Body">
<bone name="Neck_Low">
<bone name="Neck_High">
<bone name="Head"></bone>
</bone>
</bone>
<bone name="Leg_L">
<bone name="Shin_L">
<bone name="Foot_L"></bone>
</bone>
</bone>
<bone name="Leg_R">
<bone name="Shin_R">
<bone name="Foot_R"></bone>
</bone>
</bone>
<bone name="Rear">
<bone name="Tail"></bone>
</bone>
<bone name="Wing_R">
<bone name="WingTip_R"></bone>
</bone>
<bone name="Wing_L">
<bone name="WingTip_L"></bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="BlenderChicken" target="BlenderChicken">
<identifier>
<root>BlenderChicken</root>
</identifier>
<bone name="Body"><target>Body</target>
<bone name="Neck_Low"><target>Neck_Low</target>
<bone name="Neck_High"><target>Neck_High</target>
<bone name="Head"><target>Head</target></bone>
</bone>
</bone>
<bone name="Leg_L"><target>Leg_L</target>
<bone name="Shin_L"><target>Shin_L</target>
<bone name="Foot_L"><target>Foot_L</target></bone>
</bone>
</bone>
<bone name="Leg_R"><target>Leg_R</target>
<bone name="Shin_R"><target>Shin_R</target>
<bone name="Foot_R"><target>Foot_R</target></bone>
</bone>
</bone>
<bone name="Rear"><target>Rear</target>
<bone name="Tail"><target>Tail</target></bone>
</bone>
<bone name="Wing_R"><target>Wing_R</target>
<bone name="WingTip_R"><target>WingTip_R</target></bone>
</bone>
<bone name="Wing_L"><target>Wing_L</target>
<bone name="WingTip_L"><target>WingTip_L</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,130 @@
<skeletons>
<!--
This skeleton is for the deer and any other similiar shaped animals with the exact same number of bones.
-->
<standard_skeleton title="Deer Biped" id="Deer">
<bone name="root">
<bone name="pelvis">
<bone name="spine">
<bone name="spine1">
<bone name="neck">
<bone name="neck1">
<bone name="head">
<bone name="r_ear">
</bone>
<bone name="l_ear">
</bone>
</bone>
</bone>
<bone name="l_clavicle">
<bone name="l_upperarm">
<bone name="l_forearm">
<bone name="l_hand">
<bone name="l_finger">
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="r_clavicle">
<bone name="r_upperarm">
<bone name="r_forearm">
<bone name="r_hand">
<bone name="r_finger">
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="l_thigh">
<bone name="l_calf">
<bone name="l_foot">
<bone name="l_toe">
</bone>
</bone>
</bone>
</bone>
<bone name="r_thigh">
<bone name="r_calf">
<bone name="r_foot">
<bone name="r_toe">
</bone>
</bone>
</bone>
</bone>
<bone name="tail">
<bone name="tail1">
</bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="3ds Max deer biped" target="Deer">
<identifier>
<root>Deer01</root>
</identifier>
<bone name="Deer01"><target>root</target>
<bone name="Deer01_Pelvis"><target>pelvis</target>
<bone name="Deer01_Spine"><target>spine</target>
<bone name="Deer01_Spine1"><target>spine1</target>
<bone name="Deer01_Neck"><target>neck</target>
<bone name="Deer01_Neck1"><target>neck1</target>
<bone name="Deer01_Head"><target>head</target>
<bone name="Deer01_Ponytail1"><target>r_ear</target>
</bone>
<bone name="Deer01_Ponytail2"><target>l_ear</target>
</bone>
</bone>
</bone>
<bone name="Deer01_L_Clavicle"><target>l_clavicle</target>
<bone name="Deer01_L_UpperArm"><target>l_upperarm</target>
<bone name="Deer01_L_Forearm"><target>l_forearm</target>
<bone name="Deer01_L_Hand"><target>l_hand</target>
<bone name="Deer01_L_Finger0"><target>l_finger</target>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Deer01_R_Clavicle"><target>r_clavicle</target>
<bone name="Deer01_R_UpperArm"><target>r_upperarm</target>
<bone name="Deer01_R_Forearm"><target>r_forearm</target>
<bone name="Deer01_R_Hand"><target>r_hand</target>
<bone name="Deer01_R_Finger0"><target>r_finger</target>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Deer01_L_Thigh"><target>l_thigh</target>
<bone name="Deer01_L_Calf"><target>l_calf</target>
<bone name="Deer01_L_Foot"><target>l_foot</target>
<bone name="Deer01_L_Toe0"><target>l_toe</target>
</bone>
</bone>
</bone>
</bone>
<bone name="Deer01_R_Thigh"><target>r_thigh</target>
<bone name="Deer01_R_Calf"><target>r_calf</target>
<bone name="Deer01_R_Foot"><target>r_foot</target>
<bone name="Deer01_R_Toe0"><target>r_toe</target>
</bone>
</bone>
</bone>
</bone>
<bone name="Deer01_Tail"><target>tail</target>
<bone name="Deer01_Tail1"><target>tail1</target>
</bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,148 @@
<skeletons>
<standard_skeleton title="Elephant Biped" id="Ele01">
<bone name="root">
<bone name="pelvis">
<bone name="spine">
<bone name="spine1">
<bone name="neck">
<bone name="neck1">
<bone name="head">
<bone name="DUMMY_headnub"/> <!-- kept for binary compatibility with PSA files -->
<bone name="trunk">
<bone name="trunk1">
<bone name="trunk2">
<bone name="DUMMY_ponytail1nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="l_clavicle">
<bone name="l_upperarm">
<bone name="l_forearm">
<bone name="l_hand">
<bone name="l_finger">
<bone name="DUMMY_l_finger0nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="r_clavicle">
<bone name="r_upperarm">
<bone name="r_forearm">
<bone name="r_hand">
<bone name="r_finger">
<bone name="DUMMY_r_finger0nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="l_thigh">
<bone name="l_calf">
<bone name="l_foot">
<bone name="l_toe">
<bone name="DUMMY_l_toe0nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="r_thigh">
<bone name="r_calf">
<bone name="r_foot">
<bone name="r_toe">
<bone name="DUMMY_r_toe0nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="tail">
<bone name="tail1">
<bone name="tail2">
<bone name="DUMMY_tailnub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="3ds Max Elephant biped" target="Ele01">
<identifier>
<root>Ele01</root>
</identifier>
<bone name="Ele01"><target>root</target>
<bone name="Ele01_Pelvis"><target>pelvis</target>
<bone name="Ele01_Spine"><target>spine</target>
<bone name="Ele01_Spine1"><target>spine1</target>
<bone name="Ele01_Neck"><target>neck</target>
<bone name="Ele01_Neck1"><target>neck1</target>
<bone name="Ele01_Head"><target>head</target>
<bone name="Ele01_HeadNub"/>
<bone name="Ele01_Ponytail1"><target>trunk</target>
<bone name="Ele01_Ponytail11"><target>trunk1</target>
<bone name="Ele01_Ponytail12"><target>trunk2</target>
<bone name="Ele01_Ponytail1Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Ele01_L_Clavicle"><target>l_clavicle</target>
<bone name="Ele01_L_UpperArm"><target>l_upperarm</target>
<bone name="Ele01_L_Forearm"><target>l_forearm</target>
<bone name="Ele01_L_Hand"><target>l_hand</target>
<bone name="Ele01_L_Finger0"><target>l_finger</target>
<bone name="Ele01_L_Finger0Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Ele01_R_Clavicle"><target>r_clavicle</target>
<bone name="Ele01_R_UpperArm"><target>r_upperarm</target>
<bone name="Ele01_R_Forearm"><target>r_forearm</target>
<bone name="Ele01_R_Hand"><target>r_hand</target>
<bone name="Ele01_R_Finger0"><target>r_finger</target>
<bone name="Ele01_R_Finger0Nub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Ele01_L_Thigh"><target>l_thigh</target>
<bone name="Ele01_L_Calf"><target>l_calf</target>
<bone name="Ele01_L_Foot"><target>l_foot</target>
<bone name="Ele01_L_Toe0"><target>l_toe</target>
<bone name="Ele01_L_Toe0Nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="Ele01_R_Thigh"><target>r_thigh</target>
<bone name="Ele01_R_Calf"><target>r_calf</target>
<bone name="Ele01_R_Foot"><target>r_foot</target>
<bone name="Ele01_R_Toe0"><target>r_toe</target>
<bone name="Ele01_R_Toe0Nub"/>
</bone>
</bone>
</bone>
</bone>
<bone name="Ele01_Tail"><target>tail</target>
<bone name="Ele01_Tail1"><target>tail1</target>
<bone name="Ele01_Tail2"><target>tail1</target>
<bone name="Ele01_TailNub"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,216 @@
<skeletons>
<standard_skeleton title="BlenderElephant" id="BlenderElephant">
<bone name="Elephant">
<bone name="body_1">
<bone name="body_2">
<bone name="butt">
<bone name="tail_1">
<bone name="tail_2">
<bone name="tail_3">
<bone name="tail_4" />
<bone name="tail_3_joint" />
</bone>
<bone name="tail_2_joint" />
</bone>
<bone name="tail_1_joint" />
</bone>
</bone>
<bone name="pelvis" />
<bone name="Bone_001">
<bone name="leg_right">
<bone name="shin_right">
<bone name="foot_right" />
</bone>
<bone name="leg_right_joint" />
</bone>
</bone>
<bone name="Bone_002">
<bone name="leg_left">
<bone name="shin_left">
<bone name="foot_left" />
</bone>
<bone name="leg_left_joint" />
</bone>
</bone>
</bone>
<bone name="belly" />
</bone>
<bone name="shoulder_left">
<bone name="arm_left">
<bone name="forearm_left">
<bone name="hand_left" />
</bone>
<bone name="arm_left_joint_front">
<bone name="arm_left_joint_back" />
</bone>
</bone>
</bone>
<bone name="shoulder_right">
<bone name="arm_right">
<bone name="forearm_right">
<bone name="hand_right" />
</bone>
<bone name="arm_right_joint_front">
<bone name="arm_right_joint_back" />
</bone>
</bone>
</bone>
<bone name="neck">
<bone name="head">
<bone name="trunk_1">
<bone name="trunk_2">
<bone name="trunk_3">
<bone name="trunk_4">
<bone name="trunk_5">
<bone name="trunk_5_joint" />
<bone name="trunk_6">
<bone name="trunk_7">
<bone name="trunk_8">
<bone name="trunk_9">
<bone name="trunk_10">
<bone name="trunk_11" />
<bone name="trunk_10_joint" />
</bone>
<bone name="trunk_9_joint" />
</bone>
<bone name="trunk_8_joint" />
</bone>
<bone name="trunk_7_joint" />
</bone>
<bone name="trunk_6_joint" />
</bone>
</bone>
<bone name="trunk_4_joint" />
</bone>
<bone name="trunk_3_joint" />
</bone>
<bone name="trunk_2_joint" />
</bone>
<bone name="trunk_1_joint" />
</bone>
<bone name="head_trunk_joint" />
<bone name="ear_left" />
<bone name="ear_right" />
</bone>
</bone>
</bone>
<bone name="arm_left_target" />
<bone name="arm_right_target" />
<bone name="leg_left_poletarget" />
<bone name="leg_right_poletarget" />
<bone name="leg_right_target" />
<bone name="leg_left_target" />
<bone name="arm_right_kneetarget" />
<bone name="arm_left_kneetarget" />
<bone name="tail_target" />
<bone name="trunk_target" />
</standard_skeleton>
<skeleton title="BlenderElephant" target="BlenderElephant">
<identifier><root>Elephant</root></identifier>
<bone name="Elephant"><target>Elephant</target>
<bone name="body_1"><target>body_1</target>
<bone name="body_2"><target>body_2</target>
<bone name="butt"><target>butt</target>
<bone name="tail_1"><target>tail_1</target>
<bone name="tail_2"><target>tail_2</target>
<bone name="tail_3"><target>tail_3</target>
<bone name="tail_4"><target>tail_4</target></bone>
<bone name="tail_3_joint"><target>tail_3_joint</target></bone>
</bone>
<bone name="tail_2_joint"><target>tail_2_joint</target></bone>
</bone>
<bone name="tail_1_joint"><target>tail_1_joint</target></bone>
</bone>
</bone>
<bone name="pelvis"><target>pelvis</target></bone>
<bone name="Bone_001"><target>Bone_001</target>
<bone name="leg_right"><target>leg_right</target>
<bone name="shin_right"><target>shin_right</target>
<bone name="foot_right"><target>foot_right</target></bone>
</bone>
<bone name="leg_right_joint"><target>leg_right_joint</target></bone>
</bone>
</bone>
<bone name="Bone_002"><target>Bone_002</target>
<bone name="leg_left"><target>leg_left</target>
<bone name="shin_left"><target>shin_left</target>
<bone name="foot_left"><target>foot_left</target></bone>
</bone>
<bone name="leg_left_joint"><target>leg_left_joint</target></bone>
</bone>
</bone>
</bone>
<bone name="belly"><target>belly</target></bone>
</bone>
<bone name="shoulder_left"><target>shoulder_left</target>
<bone name="arm_left"><target>arm_left</target>
<bone name="forearm_left"><target>forearm_left</target>
<bone name="hand_left"><target>hand_left</target></bone>
</bone>
<bone name="arm_left_joint_front"><target>arm_left_joint_front</target>
<bone name="arm_left_joint_back"><target>arm_left_joint_back</target></bone>
</bone>
</bone>
</bone>
<bone name="shoulder_right"><target>shoulder_right</target>
<bone name="arm_right"><target>arm_right</target>
<bone name="forearm_right"><target>forearm_right</target>
<bone name="hand_right"><target>hand_right</target></bone>
</bone>
<bone name="arm_right_joint_front"><target>arm_right_joint_front</target>
<bone name="arm_right_joint_back"><target>arm_right_joint_back</target></bone>
</bone>
</bone>
</bone>
<bone name="neck"><target>neck</target>
<bone name="head"><target>head</target>
<bone name="trunk_1"><target>trunk_1</target>
<bone name="trunk_2"><target>trunk_2</target>
<bone name="trunk_3"><target>trunk_3</target>
<bone name="trunk_4"><target>trunk_4</target>
<bone name="trunk_5"><target>trunk_5</target>
<bone name="trunk_5_joint"><target>trunk_5_joint</target></bone>
<bone name="trunk_6"><target>trunk_6</target>
<bone name="trunk_7"><target>trunk_7</target>
<bone name="trunk_8"><target>trunk_8</target>
<bone name="trunk_9"><target>trunk_9</target>
<bone name="trunk_10"><target>trunk_10</target>
<bone name="trunk_11"><target>trunk_11</target></bone>
<bone name="trunk_10_joint"><target>trunk_10_joint</target></bone>
</bone>
<bone name="trunk_9_joint"><target>trunk_9_joint</target></bone>
</bone>
<bone name="trunk_8_joint"><target>trunk_8_joint</target></bone>
</bone>
<bone name="trunk_7_joint"><target>trunk_7_joint</target></bone>
</bone>
<bone name="trunk_6_joint"><target>trunk_6_joint</target></bone>
</bone>
</bone>
<bone name="trunk_4_joint"><target>trunk_4_joint</target></bone>
</bone>
<bone name="trunk_3_joint"><target>trunk_3_joint</target></bone>
</bone>
<bone name="trunk_2_joint"><target>trunk_2_joint</target></bone>
</bone>
<bone name="trunk_1_joint"><target>trunk_1_joint</target></bone>
</bone>
<bone name="head_trunk_joint"><target>head_trunk_joint</target></bone>
<bone name="ear_left"><target>ear_left</target></bone>
<bone name="ear_right"><target>ear_right</target></bone>
</bone>
</bone>
</bone>
<bone name="arm_left_target"><target>arm_left_target</target></bone>
<bone name="arm_right_target"><target>arm_right_target</target></bone>
<bone name="leg_left_poletarget"><target>leg_left_poletarget</target></bone>
<bone name="leg_right_poletarget"><target>leg_right_poletarget</target></bone>
<bone name="leg_right_target"><target>leg_right_target</target></bone>
<bone name="leg_left_target"><target>leg_left_target</target></bone>
<bone name="arm_right_kneetarget"><target>arm_right_kneetarget</target></bone>
<bone name="arm_left_kneetarget"><target>arm_left_kneetarget</target></bone>
<bone name="tail_target"><target>tail_target</target></bone>
<bone name="trunk_target"><target>trunk_target</target></bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,26 @@
<skeletons>
<standard_skeleton title="Fish School" id="fish">
<bone name="main">
<bone name="motion_head"></bone>
<bone name="motion_mid"></bone>
<bone name="motion_back"></bone>
<bone name="jump_first"></bone>
<bone name="jump_second"></bone>
<bone name="jump_third"></bone>
</bone>
</standard_skeleton>
<skeleton title="Fish School" target="fish">
<identifier>
<root>fish_shoal</root>
</identifier>
<bone name="main"><target>main</target>
<bone name="motion_head"><target>motion_head</target></bone>
<bone name="motion_mid"><target>motion_mid</target></bone>
<bone name="motion_back"><target>motion_back</target></bone>
<bone name="jump_first"><target>jump_first</target></bone>
<bone name="jump_second"><target>jump_second</target></bone>
<bone name="jump_third"><target>jump_third</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,25 @@
<skeletons>
<standard_skeleton title="FloatingBarrels" id="FloatingBarrels">
<bone name="Barrel_2">
<bone name="Barrel_2_Controller" />
</bone>
<bone name="Barrel_3">
<bone name="Barrel_3_Controller" />
</bone>
<bone name="Barrel_1">
<bone name="Barrel_1_Controller" />
</bone>
</standard_skeleton>
<skeleton title="FloatingBarrels" target="FloatingBarrels"><identifier><root>Barrel_2</root></identifier>
<bone name="Barrel_2"><target>Barrel_2</target>
<bone name="Barrel_2_Controller"><target>Barrel_2_Controller</target></bone>
</bone>
<bone name="Barrel_3"><target>Barrel_3</target>
<bone name="Barrel_3_Controller"><target>Barrel_3_Controller</target></bone>
</bone>
<bone name="Barrel_1"><target>Barrel_1</target>
<bone name="Barrel_1_Controller"><target>Barrel_1_Controller</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,26 @@
<skeletons>
<standard_skeleton title="Gate Skeleton" id="gate">
<bone name="origin">
<bone name="door_right">
<bone name="lock_right"></bone>
</bone>
<bone name="door_left">
<bone name="lock_left"></bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="Gate Skeleton" target="gate">
<identifier>
<root>gate</root>
</identifier>
<bone name="origin"><target>origin</target>
<bone name="door_right"><target>door_right</target>
<bone name="lock_right"><target>lock_right</target></bone>
</bone>
<bone name="door_left"><target>door_left</target>
<bone name="lock_left"><target>lock_left</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,122 @@
<skeletons>
<standard_skeleton title="GiraffeBones" id="giraffe">
<bone name="main_pelvis">
<bone name="left_r_pelvis_upper">
<bone name="left_r_leg_top">
<bone name="left_r_leg_mid">
<bone name="left_r_leg_bottom">
<bone name="left_r_foot"></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="right_r_pelvis_upper">
<bone name="right_r_leg_top">
<bone name="right_r_leg_mid">
<bone name="right_r_leg_bottom">
<bone name="right_r_foot"></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="spine_01">
<bone name="spine_02">
<bone name="spine_neck">
<bone name="right_f_pelvis_upper">
<bone name="right_f_leg_top">
<bone name="right_f_leg_mid">
<bone name="right_f_leg_bottom">
<bone name="right_f_foot"></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="left_f_pelvis_upper">
<bone name="left_f_leg_top">
<bone name="left_f_leg_mid">
<bone name="left_f_leg_bottom">
<bone name="left_f_foot"></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="neck_01">
<bone name="neck_02">
<bone name="neck_03">
<bone name="head"></bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="tail_01">
<bone name="tail_02">
<bone name="tail_03"></bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="GiraffeBones" target="giraffe">
<identifier>
<root>main_pelvis</root>
</identifier>
<bone name="main_pelvis"><target>main_pelvis</target>
<bone name="left_r_pelvis_upper"><target>left_r_pelvis_upper</target>
<bone name="left_r_leg_top"><target>left_r_leg_top</target>
<bone name="left_r_leg_mid"><target>left_r_leg_mid</target>
<bone name="left_r_leg_bottom"><target>left_r_leg_bottom</target>
<bone name="left_r_foot"><target>left_r_foot</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="right_r_pelvis_upper"><target>right_r_pelvis_upper</target>
<bone name="right_r_leg_top"><target>right_r_leg_top</target>
<bone name="right_r_leg_mid"><target>right_r_leg_mid</target>
<bone name="right_r_leg_bottom"><target>right_r_leg_bottom</target>
<bone name="right_r_foot"><target>right_r_foot</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="spine_01"><target>spine_01</target>
<bone name="spine_02"><target>spine_02</target>
<bone name="spine_neck"><target>spine_neck</target>
<bone name="right_f_pelvis_upper"><target>right_f_pelvis_upper</target>
<bone name="right_f_leg_top"><target>right_f_leg_top</target>
<bone name="right_f_leg_mid"><target>right_f_leg_mid</target>
<bone name="right_f_leg_bottom"><target>right_f_leg_bottom</target>
<bone name="right_f_foot"><target>right_f_foot</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="left_f_pelvis_upper"><target>left_f_pelvis_upper</target>
<bone name="left_f_leg_top"><target>left_f_leg_top</target>
<bone name="left_f_leg_mid"><target>left_f_leg_mid</target>
<bone name="left_f_leg_bottom"><target>left_f_leg_bottom</target>
<bone name="left_f_foot"><target>left_f_foot</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="neck_01"><target>neck_01</target>
<bone name="neck_02"><target>neck_02</target>
<bone name="neck_03"><target>neck_03</target>
<bone name="head"><target>head</target></bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="tail_01"><target>tail_01</target>
<bone name="tail_02"><target>tail_02</target>
<bone name="tail_03"><target>tail_03</target></bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,106 @@
<skeletons>
<standard_skeleton title="Horse Biped" id="Horse">
<bone name="root">
<bone name="pelvis">
<bone name="spine">
<bone name="spine1">
<bone name="neck">
<bone name="neck1">
<bone name="head"/>
</bone>
<bone name="l_clavicle">
<bone name="l_upperarm">
<bone name="l_forearm">
<bone name="l_hand">
<bone name="l_finger"/>
</bone>
</bone>
</bone>
</bone>
<bone name="r_clavicle">
<bone name="r_upperarm">
<bone name="r_forearm">
<bone name="r_hand">
<bone name="r_finger"/>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="l_thigh">
<bone name="l_calf">
<bone name="l_foot">
<bone name="l_toe"/>
</bone>
</bone>
</bone>
<bone name="r_thigh">
<bone name="r_calf">
<bone name="r_foot">
<bone name="r_toe"/>
</bone>
</bone>
</bone>
<bone name="tail">
<bone name="tail1"/>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="3ds Max Horse biped" target="Horse">
<identifier>
<root>Horse</root>
</identifier>
<bone name="Horse"><target>root</target>
<bone name="Horse_Pelvis"><target>pelvis</target>
<bone name="Horse_Spine"><target>spine</target>
<bone name="Horse_Spine1"><target>spine1</target>
<bone name="Horse_Neck"><target>neck</target>
<bone name="Horse_Neck1"><target>neck1</target>
<bone name="Horse_Head"><target>head</target></bone>
</bone>
<bone name="Horse_L_Clavicle"><target>l_clavicle</target>
<bone name="Horse_L_UpperArm"><target>l_upperarm</target>
<bone name="Horse_L_Forearm"><target>l_forearm</target>
<bone name="Horse_L_Hand"><target>l_hand</target>
<bone name="Horse_L_Finger0"><target>l_finger</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Horse_R_Clavicle"><target>r_clavicle</target>
<bone name="Horse_R_UpperArm"><target>r_upperarm</target>
<bone name="Horse_R_Forearm"><target>r_forearm</target>
<bone name="Horse_R_Hand"><target>r_hand</target>
<bone name="Horse_R_Finger0"><target>r_finger</target></bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="Horse_L_Thigh"><target>l_thigh</target>
<bone name="Horse_L_Calf"><target>l_calf</target>
<bone name="Horse_L_Foot"><target>l_foot</target>
<bone name="Horse_L_Toe0"><target>l_toe</target></bone>
</bone>
</bone>
</bone>
<bone name="Horse_R_Thigh"><target>r_thigh</target>
<bone name="Horse_R_Calf"><target>r_calf</target>
<bone name="Horse_R_Foot"><target>r_foot</target>
<bone name="Horse_R_Toe0"><target>r_toe</target></bone>
</bone>
</bone>
</bone>
<bone name="Horse_Tail"><target>tail</target>
<bone name="Horse_Tail1"><target>tail1</target></bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,104 @@
<skeletons>
<standard_skeleton title="Peacock" id="Peacock">
<bone name="PeacockArmature">
<bone name="Body">
<bone name="Neck1">
<bone name="Neck2">
<bone name="Neck3">
<bone name="Head">
<bone name="Mohawk" />
</bone>
</bone>
<bone name="Neck2_Joint" />
</bone>
</bone>
<bone name="tailHolder_Base">
<bone name="tailHolder_Middle">
<bone name="tailHolder_Top">
<bone name="tailFeather_Middle" />
<bone name="tailFeather_Right" />
<bone name="tailFeather_Rightmost" />
<bone name="tailFeather_Left" />
<bone name="tailFeather_Leftmost" />
<bone name="tailFeather_Right45" />
<bone name="tailFeather_Left45" />
<bone name="tailFeather_Right60" />
<bone name="tailFeather_Left60" />
<bone name="tailHolder_Back">
<bone name="tailHolder_Back_Fluff" />
</bone>
<bone name="tailFeather_Right90" />
<bone name="tailFeather_Left90" />
</bone>
</bone>
</bone>
<bone name="RightWing" />
<bone name="LeftWing" />
</bone>
<bone name="LeftLeg">
<bone name="LeftShin">
<bone name="LeftFoot" />
</bone>
<bone name="LeftKnee" />
</bone>
<bone name="RightLeg">
<bone name="RightShin">
<bone name="RightFoot" />
</bone>
<bone name="RightKnee" />
</bone>
</bone>
</standard_skeleton>
<skeleton title="Peacock" target="Peacock">
<identifier><root>PeacockArmature</root></identifier>
<bone name="PeacockArmature"><target>PeacockArmature</target>
<bone name="Body"><target>Body</target>
<bone name="Neck1"><target>Neck1</target>
<bone name="Neck2"><target>Neck2</target>
<bone name="Neck3"><target>Neck3</target>
<bone name="Head"><target>Head</target>
<bone name="Mohawk"><target>Mohawk</target></bone>
</bone>
</bone>
<bone name="Neck2_Joint"><target>Neck2_Joint</target></bone>
</bone>
</bone>
<bone name="tailHolder_Base"><target>tailHolder_Base</target>
<bone name="tailHolder_Middle"><target>tailHolder_Middle</target>
<bone name="tailHolder_Top"><target>tailHolder_Top</target>
<bone name="tailFeather_Middle"><target>tailFeather_Middle</target></bone>
<bone name="tailFeather_Right"><target>tailFeather_Right</target></bone>
<bone name="tailFeather_Rightmost"><target>tailFeather_Rightmost</target></bone>
<bone name="tailFeather_Left"><target>tailFeather_Left</target></bone>
<bone name="tailFeather_Leftmost"><target>tailFeather_Leftmost</target></bone>
<bone name="tailFeather_Right45"><target>tailFeather_Right45</target></bone>
<bone name="tailFeather_Left45"><target>tailFeather_Left45</target></bone>
<bone name="tailFeather_Right60"><target>tailFeather_Right60</target></bone>
<bone name="tailFeather_Left60"><target>tailFeather_Left60</target></bone>
<bone name="tailHolder_Back"><target>tailHolder_Back</target>
<bone name="tailHolder_Back_Fluff"><target>tailHolder_Back_Fluff</target></bone>
</bone>
<bone name="tailFeather_Right90"><target>tailFeather_Right90</target></bone>
<bone name="tailFeather_Left90"><target>tailFeather_Left90</target></bone>
</bone>
</bone>
</bone>
<bone name="RightWing"><target>RightWing</target></bone>
<bone name="LeftWing"><target>LeftWing</target></bone>
</bone>
<bone name="LeftLeg"><target>LeftLeg</target>
<bone name="LeftShin"><target>LeftShin</target>
<bone name="LeftFoot"><target>LeftFoot</target></bone>
</bone>
<bone name="LeftKnee"><target>LeftKnee</target></bone>
</bone>
<bone name="RightLeg"><target>RightLeg</target>
<bone name="RightShin"><target>RightShin</target>
<bone name="RightFoot"><target>RightFoot</target></bone>
</bone>
<bone name="RightKnee"><target>RightKnee</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,12 @@
The <skeleton>s must specify all the bones that may influence vertexes of
skinned meshes. The <bone name> is the name of the bone in the relevant
modelling/animation program. The <identifier> name is used to determine
whether this <skeleton> applies to the data found in a given model file.
<target> must be the name of a bone in the standard_skeleton identified by
<skeleton target>.
The hierarchy of bones is mostly irrelevant (though it makes sense to match
the structure used by the modelling program) - the only effect is that
the default <target> (i.e. when none is specified for a given bone) is
inherited from the parent node in this hierarchy.

View File

@ -0,0 +1,18 @@
<skeletons>
<standard_skeleton title="Rowing Boat" id="rowingboat">
<bone name="RowingBoatBone">
<bone name="RightRow"></bone>
<bone name="LeftRow"></bone>
</bone>
</standard_skeleton>
<skeleton title="Rowing Boat" target="rowingboat">
<identifier>
<root>RowingBoat</root>
</identifier>
<bone name="RowingBoatBone"><target>RowingBoatBone</target>
<bone name="RightRow"><target>RightRow</target></bone>
<bone name="LeftRow"><target>LeftRow</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,112 @@
<skeletons>
<standard_skeleton title="BlenderShark" id="BlenderShark">
<bone name="head" />
<bone name="spine1">
<bone name="spine2">
<bone name="spine3">
<bone name="spine4">
<bone name="spine5">
<bone name="spine6">
<bone name="spine7">
<bone name="reartopfin1">
<bone name="reartopfin2">
<bone name="reartopfin3">
<bone name="reartopfin4">
<bone name="reartopfintip" />
<bone name="reartopfin4back" />
</bone>
<bone name="reartopfin3back" />
</bone>
<bone name="reartopfin2back" />
</bone>
</bone>
<bone name="rearbottomfin1">
<bone name="rearbottomfin2">
<bone name="rearbottomfin3">
<bone name="rearbottomfin4" />
</bone>
<bone name="rearbottomfin2back" />
</bone>
<bone name="rearbottomfin1back" />
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="leftfin">
<bone name="leftfintip">
<bone name="leftfintipback" />
</bone>
<bone name="leftfinback" />
</bone>
<bone name="topfin">
<bone name="topfintip" />
<bone name="topfinback" />
</bone>
<bone name="rightfin">
<bone name="rightfintip">
<bone name="rightfintipback" />
</bone>
<bone name="rightfinback" />
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="BlenderShark" target="BlenderShark">
<identifier><root>SHARK_</root></identifier>
<bone name="head"><target>head</target></bone>
<bone name="spine1"><target>spine1</target>
<bone name="spine2"><target>spine2</target>
<bone name="spine3"><target>spine3</target>
<bone name="spine4"><target>spine4</target>
<bone name="spine5"><target>spine5</target>
<bone name="spine6"><target>spine6</target>
<bone name="spine7"><target>spine7</target>
<bone name="reartopfin1"><target>reartopfin1</target>
<bone name="reartopfin2"><target>reartopfin2</target>
<bone name="reartopfin3"><target>reartopfin3</target>
<bone name="reartopfin4"><target>reartopfin4</target>
<bone name="reartopfintip"><target>reartopfintip</target></bone>
<bone name="reartopfin4back"><target>reartopfin4back</target></bone>
</bone>
<bone name="reartopfin3back"><target>reartopfin3back</target></bone>
</bone>
<bone name="reartopfin2back"><target>reartopfin2back</target></bone>
</bone>
</bone>
<bone name="rearbottomfin1"><target>rearbottomfin1</target>
<bone name="rearbottomfin2"><target>rearbottomfin2</target>
<bone name="rearbottomfin3"><target>rearbottomfin3</target>
<bone name="rearbottomfin4"><target>rearbottomfin4</target></bone>
</bone>
<bone name="rearbottomfin2back"><target>rearbottomfin2back</target></bone>
</bone>
<bone name="rearbottomfin1back"><target>rearbottomfin1back</target></bone>
</bone>
</bone>
</bone>
</bone>
</bone>
</bone>
<bone name="leftfin"><target>leftfin</target>
<bone name="leftfintip"><target>leftfintip</target>
<bone name="leftfintipback"><target>leftfintipback</target></bone>
</bone>
<bone name="leftfinback"><target>leftfinback</target></bone>
</bone>
<bone name="topfin"><target>topfin</target>
<bone name="topfintip"><target>topfintip</target></bone>
<bone name="topfinback"><target>topfinback</target></bone>
</bone>
<bone name="rightfin"><target>rightfin</target>
<bone name="rightfintip"><target>rightfintip</target>
<bone name="rightfintipback"><target>rightfintipback</target></bone>
</bone>
<bone name="rightfinback"><target>rightfinback</target></bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,88 @@
<skeletons>
<standard_skeleton title="Sheep" id="Sheep">
<bone name="ThreeBagsFull">
<bone name="Neck">
<bone name="Head" />
</bone>
<bone name="Body_Front">
<bone name="Body_Rear">
<bone name="Pelvis_Left">
<bone name="Leg_Left">
<bone name="Shin_Left">
<bone name="Foot_Left" />
</bone>
</bone>
</bone>
<bone name="Pelvis_Right">
<bone name="Leg_Right">
<bone name="Shin_Right">
<bone name="Foot_Right" />
</bone>
</bone>
</bone>
<bone name="Butt">
<bone name="Tail" />
</bone>
</bone>
</bone>
<bone name="Shoulder_Left">
<bone name="Arm_Left">
<bone name="Forearm_Left">
<bone name="Hand_Left" />
</bone>
</bone>
</bone>
<bone name="Shoulder_Right">
<bone name="Arm_Right">
<bone name="Forearm_Right">
<bone name="Hand_Right" />
</bone>
</bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="Sheep" target="Sheep">
<identifier><root>ThreeBagsFull</root></identifier>
<bone name="ThreeBagsFull"><target>ThreeBagsFull</target>
<bone name="Neck"><target>Neck</target>
<bone name="Head"><target>Head</target></bone>
</bone>
<bone name="Body_Front"><target>Body_Front</target>
<bone name="Body_Rear"><target>Body_Rear</target>
<bone name="Pelvis_Left"><target>Pelvis_Left</target>
<bone name="Leg_Left"><target>Leg_Left</target>
<bone name="Shin_Left"><target>Shin_Left</target>
<bone name="Foot_Left"><target>Foot_Left</target></bone>
</bone>
</bone>
</bone>
<bone name="Pelvis_Right"><target>Pelvis_Right</target>
<bone name="Leg_Right"><target>Leg_Right</target>
<bone name="Shin_Right"><target>Shin_Right</target>
<bone name="Foot_Right"><target>Foot_Right</target></bone>
</bone>
</bone>
</bone>
<bone name="Butt"><target>Butt</target>
<bone name="Tail"><target>Tail</target></bone>
</bone>
</bone>
</bone>
<bone name="Shoulder_Left"><target>Shoulder_Left</target>
<bone name="Arm_Left"><target>Arm_Left</target>
<bone name="Forearm_Left"><target>Forearm_Left</target>
<bone name="Hand_Left"><target>Hand_Left</target></bone>
</bone>
</bone>
</bone>
<bone name="Shoulder_Right"><target>Shoulder_Right</target>
<bone name="Arm_Right"><target>Arm_Right</target>
<bone name="Forearm_Right"><target>Forearm_Right</target>
<bone name="Hand_Right"><target>Hand_Right</target></bone>
</bone>
</bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,18 @@
<skeletons>
<standard_skeleton title="Ship One Row" id="shiponerow">
<bone name="one_row_main">
<bone name="right_top_row"></bone>
<bone name="left_top_row"></bone>
</bone>
</standard_skeleton>
<skeleton title="Ship One Row" target="shiponerow">
<identifier>
<root>shiponerow</root>
</identifier>
<bone name="one_row_main"><target>one_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,26 @@
<skeletons>
<standard_skeleton title="Ship Three Row" id="shipthreerow">
<bone name="three_row_main">
<bone name="right_top_row"></bone>
<bone name="right_middle_row"></bone>
<bone name="right_bottom_row"></bone>
<bone name="left_top_row"></bone>
<bone name="left_middle_row"></bone>
<bone name="left_bottom_row"></bone>
</bone>
</standard_skeleton>
<skeleton title="Ship Three Row" target="shipthreerow">
<identifier>
<root>shipthreerow</root>
</identifier>
<bone name="three_row_main"><target>three_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="right_middle_row"><target>right_middle_row</target></bone>
<bone name="right_bottom_row"><target>right_bottom_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
<bone name="left_middle_row"><target>left_middle_row</target></bone>
<bone name="left_bottom_row"><target>left_bottom_row</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,22 @@
<skeletons>
<standard_skeleton title="Ship Two Row" id="shiptworow">
<bone name="two_row_main">
<bone name="right_top_row"></bone>
<bone name="right_bottom_row"></bone>
<bone name="left_top_row"></bone>
<bone name="left_bottom_row"></bone>
</bone>
</standard_skeleton>
<skeleton title="Ship Two Row" target="shiptworow">
<identifier>
<root>shiptworow</root>
</identifier>
<bone name="two_row_main"><target>two_row_main</target>
<bone name="right_top_row"><target>right_top_row</target></bone>
<bone name="right_bottom_row"><target>right_bottom_row</target></bone>
<bone name="left_top_row"><target>left_top_row</target></bone>
<bone name="left_bottom_row"><target>left_bottom_row</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,28 @@
<skeletons>
<standard_skeleton title="Siege Onager" id="onager">
<bone name="onagermain">
<bone name="windlass"></bone>
<bone name="spoke">
<bone name="sling"></bone>
<bone name="rope_left"></bone>
<bone name="rope_right"></bone>
<bone name="rope_center"></bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="Siege Onager" target="onager">
<identifier>
<root>onager</root>
</identifier>
<bone name="onagermain"><target>onagermain</target>
<bone name="windlass"><target>windlass</target></bone>
<bone name="spoke"><target>spoke</target>
<bone name="sling"><target>sling</target></bone>
<bone name="rope_left"><target>rope_left</target></bone>
<bone name="rope_right"><target>rope_right</target></bone>
<bone name="rope_center"><target>rope_center</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,24 @@
<skeletons>
<standard_skeleton title="Four Wheel Ram" id="Ram">
<bone name="RamBone">
<bone name="WheelLeftBack"></bone>
<bone name="WheelLeftFront"></bone>
<bone name="WheelRightBack"></bone>
<bone name="WheelRightFront"></bone>
<bone name="Weapon"></bone>
</bone>
</standard_skeleton>
<skeleton title="Four Wheel Ram" target="Ram">
<identifier>
<root>FourWheelRam</root>
</identifier>
<bone name="RamBone"><target>RamBone</target>
<bone name="WheelLeftBack"><target>WheelLeftBack</target></bone>
<bone name="WheelLeftFront"><target>WheelLeftFront</target></bone>
<bone name="WheelRightBack"><target>WheelRightBack</target></bone>
<bone name="WheelRightFront"><target>WheelRightFront</target></bone>
<bone name="Weapon"><target>Weapon</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,28 @@
<skeletons>
<standard_skeleton title="Six Wheel Vehicle" id="sixwheel">
<bone name="sixwheel">
<bone name="l_back"></bone>
<bone name="l_mid"></bone>
<bone name="l_front"></bone>
<bone name="r_back"></bone>
<bone name="r_mid"></bone>
<bone name="r_front"></bone>
<bone name="weapon"></bone>
</bone>
</standard_skeleton>
<skeleton title="Six Wheel Vehicle" target="sixwheel">
<identifier>
<root>SixWheeler</root>
</identifier>
<bone name="sixwheel"><target>sixwheel</target>
<bone name="l_back"><target>l_back</target></bone>
<bone name="l_mid"><target>l_mid</target></bone>
<bone name="l_front"><target>l_front</target></bone>
<bone name="r_back"><target>r_back</target></bone>
<bone name="r_mid"><target>r_mid</target></bone>
<bone name="r_front"><target>r_front</target></bone>
<bone name="weapon"><target>weapon</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,20 @@
<skeletons>
<standard_skeleton title="Two Wheel Vehicle" id="twowheel">
<bone name="twowheel">
<bone name="l_wheel"></bone>
<bone name="r_wheel"></bone>
<bone name="weapon"></bone>
</bone>
</standard_skeleton>
<skeleton title="Two Wheel Vehicle" target="twowheel">
<identifier>
<root>TwoWheeler</root>
</identifier>
<bone name="twowheel"><target>twowheel</target>
<bone name="l_wheel"><target>l_wheel</target></bone>
<bone name="r_wheel"><target>r_wheel</target></bone>
<bone name="weapon"><target>weapon</target></bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,34 @@
<skeletons>
<standard_skeleton title="whale skeleton1" id="whale1">
<bone name="main">
<bone name="body">
<bone name="head"></bone>
<bone name="spine">
<bone name="pelvis">
<bone name="tail"></bone>
</bone>
</bone>
<bone name="fin_r"></bone>
<bone name="fin_l"></bone>
</bone>
</bone>
</standard_skeleton>
<skeleton title="whale skeleton1" target="whale1">
<identifier>
<root>whale_1</root>
</identifier>
<bone name="main"><target>main</target>
<bone name="body"><target>body</target>
<bone name="head"><target>head</target></bone>
<bone name="spine"><target>spine</target>
<bone name="pelvis"><target>pelvis</target>
<bone name="tail"><target>tail</target></bone>
</bone>
</bone>
<bone name="fin_r"><target>fin_r</target></bone>
<bone name="fin_l"><target>fin_l</target></bone>
</bone>
</bone>
</skeleton>
</skeletons>

View File

@ -0,0 +1,140 @@
<skeletons>
<standard_skeleton title="ZebraArmature" id="ZebraArmature">
<bone name="ZebraArmature">
<bone name="body">
<bone name="rear_body">
<bone name="left_pelvis">
<bone name="rear_left_leg">
<bone name="rear_left_shin">
<bone name="rear_left_foot" />
</bone>
<bone name="rear_left_knee" />
</bone>
<bone name="left_pelvis_joint_front">
<bone name="left_pelvis_joint_rear" />
</bone>
</bone>
<bone name="butt">
<bone name="tail_start">
<bone name="tail_middle">
<bone name="tail_tip" />
</bone>
</bone>
</bone>
<bone name="right_pelvis">
<bone name="rear_right_leg">
<bone name="rear_right_shin">
<bone name="rear_right_foot" />
</bone>
<bone name="rear_right_knee" />
</bone>
<bone name="right_pelvis_joint_front">
<bone name="right_pelvis_joint_rear" />
</bone>
</bone>
<bone name="rear_belly" />
</bone>
<bone name="middle_belly" />
<bone name="front_belly" />
</bone>
<bone name="left_shoulder">
<bone name="left_leg">
<bone name="left_shin">
<bone name="left_foot" />
</bone>
</bone>
</bone>
<bone name="neck1">
<bone name="neck2">
<bone name="head">
<bone name="left_ear" />
<bone name="right_ear" />
</bone>
</bone>
</bone>
<bone name="right_shoulder">
<bone name="right_leg">
<bone name="right_shin">
<bone name="right_foot" />
</bone>
</bone>
</bone>
</bone>
<bone name="rear_right_leg-target" />
<bone name="rear_left_leg-target" />
<bone name="left_leg-target" />
<bone name="left_knee-target" />
<bone name="right_leg-target" />
<bone name="right_knee-target" />
</standard_skeleton>
<skeleton title="ZebraArmature" target="ZebraArmature">
<identifier><root>ZebraArmature</root></identifier>
<bone name="ZebraArmature"><target>ZebraArmature</target>
<bone name="body"><target>body</target>
<bone name="rear_body"><target>rear_body</target>
<bone name="left_pelvis"><target>left_pelvis</target>
<bone name="rear_left_leg"><target>rear_left_leg</target>
<bone name="rear_left_shin"><target>rear_left_shin</target>
<bone name="rear_left_foot"><target>rear_left_foot</target></bone>
</bone>
<bone name="rear_left_knee"><target>rear_left_knee</target></bone>
</bone>
<bone name="left_pelvis_joint_front"><target>left_pelvis_joint_front</target>
<bone name="left_pelvis_joint_rear"><target>left_pelvis_joint_rear</target></bone>
</bone>
</bone>
<bone name="butt"><target>butt</target>
<bone name="tail_start"><target>tail_start</target>
<bone name="tail_middle"><target>tail_middle</target>
<bone name="tail_tip"><target>tail_tip</target></bone>
</bone>
</bone>
</bone>
<bone name="right_pelvis"><target>right_pelvis</target>
<bone name="rear_right_leg"><target>rear_right_leg</target>
<bone name="rear_right_shin"><target>rear_right_shin</target>
<bone name="rear_right_foot"><target>rear_right_foot</target></bone>
</bone>
<bone name="rear_right_knee"><target>rear_right_knee</target></bone>
</bone>
<bone name="right_pelvis_joint_front"><target>right_pelvis_joint_front</target>
<bone name="right_pelvis_joint_rear"><target>right_pelvis_joint_rear</target></bone>
</bone>
</bone>
<bone name="rear_belly"><target>rear_belly</target></bone>
</bone>
<bone name="middle_belly"><target>middle_belly</target></bone>
<bone name="front_belly"><target>front_belly</target></bone>
</bone>
<bone name="left_shoulder"><target>left_shoulder</target>
<bone name="left_leg"><target>left_leg</target>
<bone name="left_shin"><target>left_shin</target>
<bone name="left_foot"><target>left_foot</target></bone>
</bone>
</bone>
</bone>
<bone name="neck1"><target>neck1</target>
<bone name="neck2"><target>neck2</target>
<bone name="head"><target>head</target>
<bone name="left_ear"><target>left_ear</target></bone>
<bone name="right_ear"><target>right_ear</target></bone>
</bone>
</bone>
</bone>
<bone name="right_shoulder"><target>right_shoulder</target>
<bone name="right_leg"><target>right_leg</target>
<bone name="right_shin"><target>right_shin</target>
<bone name="right_foot"><target>right_foot</target></bone>
</bone>
</bone>
</bone>
</bone>
<bone name="rear_right_leg-target"><target>rear_right_leg-target</target></bone>
<bone name="rear_left_leg-target"><target>rear_left_leg-target</target></bone>
<bone name="left_leg-target"><target>left_leg-target</target></bone>
<bone name="left_knee-target"><target>left_knee-target</target></bone>
<bone name="right_leg-target"><target>right_leg-target</target></bone>
<bone name="right_knee-target"><target>right_knee-target</target></bone>
</skeleton>
</skeletons>

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2009 Wildfire Games.
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -83,7 +83,7 @@ public:
/**
* Initialises the global state with skeleton data loaded from the
* given XML data. Must only be called once.
* given XML data.
* @todo Stop using global state.
* @param xmlData
* @param xmlLength

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2012 Wildfire Games.
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -19,6 +19,8 @@
#include "ColladaManager.h"
#include <boost/algorithm/string.hpp>
#include "graphics/ModelDef.h"
#include "lib/fnv_hash.h"
#include "maths/MD5.h"
@ -65,14 +67,62 @@ class CColladaManagerImpl
public:
CColladaManagerImpl(const PIVFS& vfs)
: dll("Collada"), m_VFS(vfs)
: dll("Collada"), m_VFS(vfs), m_skeletonHashInvalidated(false)
{
// Support hotloading
RegisterFileReloadFunc(ReloadChangedFileCB, this);
}
~CColladaManagerImpl()
{
if (dll.IsLoaded())
set_logger(NULL, NULL); // unregister the log handler
UnregisterFileReloadFunc(ReloadChangedFileCB, this);
}
Status ReloadChangedFile(const VfsPath& path)
{
// Ignore files that aren't in the right path
if (!boost::algorithm::starts_with(path.string(), L"art/skeletons/"))
return INFO::OK;
if (path.Extension() != L".xml")
return INFO::OK;
m_skeletonHashInvalidated = true;
// If the file doesn't exist (e.g. it was deleted), don't bother reloading
// or 'unloading' since that isn't possible
if (!VfsFileExists(path))
return INFO::OK;
if (!dll.IsLoaded() && !TryLoadDLL())
return ERR::FAIL;
LOGMESSAGE(L"Hotloading skeleton definitions from '%ls'", path.string().c_str());
// Set the filename for the logger to report
set_logger(ColladaLog, const_cast<void*>(static_cast<const void*>(&path)));
CVFSFile skeletonFile;
if (skeletonFile.Load(m_VFS, path) != PSRETURN_OK)
{
LOGERROR(L"Failed to read skeleton defintions from '%ls'", path.string().c_str());
return ERR::FAIL;
}
int ok = set_skeleton_definitions((const char*)skeletonFile.GetBuffer(), (int)skeletonFile.GetBufferSize());
if (ok < 0)
{
LOGERROR(L"Failed to load skeleton definitions from '%ls'", path.string().c_str());
return ERR::FAIL;
}
return INFO::OK;
}
static Status ReloadChangedFileCB(void* param, const VfsPath& path)
{
return static_cast<CColladaManagerImpl*>(param)->ReloadChangedFile(path);
}
bool Convert(const VfsPath& daeFilename, const VfsPath& pmdFilename, CColladaManager::FileType type)
@ -83,46 +133,14 @@ public:
// to get all the right libraries to build the COLLADA DLL), we load
// it dynamically when it is required, instead of using the exported
// functions and binding at link-time.
if (! dll.IsLoaded())
if (!dll.IsLoaded())
{
if (! dll.LoadDLL())
{
LOGERROR(L"Failed to load COLLADA conversion DLL");
if (!TryLoadDLL())
return false;
}
try
if (!LoadSkeletonDefinitions())
{
dll.LoadSymbol("set_logger", set_logger);
dll.LoadSymbol("set_skeleton_definitions", set_skeleton_definitions);
dll.LoadSymbol("convert_dae_to_pmd", convert_dae_to_pmd);
dll.LoadSymbol("convert_dae_to_psa", convert_dae_to_psa);
}
catch (PSERROR_DllLoader&)
{
LOGERROR(L"Failed to load symbols from COLLADA conversion DLL");
dll.Unload();
return false;
}
VfsPath skeletonPath("art/skeletons/skeletons.xml");
// Set the filename for the logger to report
set_logger(ColladaLog, static_cast<void*>(&skeletonPath));
CVFSFile skeletonFile;
if (skeletonFile.Load(m_VFS, skeletonPath) != PSRETURN_OK)
{
LOGERROR(L"Failed to read skeleton definitions");
dll.Unload();
return false;
}
int ok = set_skeleton_definitions((const char*)skeletonFile.GetBuffer(), (int)skeletonFile.GetBufferSize());
if (ok < 0)
{
LOGERROR(L"Failed to load skeleton definitions");
dll.Unload();
dll.Unload(); // Error should have been logged already
return false;
}
}
@ -167,8 +185,133 @@ public:
return (result == 0);
}
bool TryLoadDLL()
{
if (!dll.LoadDLL())
{
LOGERROR(L"Failed to load COLLADA conversion DLL");
return false;
}
try
{
dll.LoadSymbol("set_logger", set_logger);
dll.LoadSymbol("set_skeleton_definitions", set_skeleton_definitions);
dll.LoadSymbol("convert_dae_to_pmd", convert_dae_to_pmd);
dll.LoadSymbol("convert_dae_to_psa", convert_dae_to_psa);
}
catch (PSERROR_DllLoader&)
{
LOGERROR(L"Failed to load symbols from COLLADA conversion DLL");
dll.Unload();
return false;
}
return true;
}
bool LoadSkeletonDefinitions()
{
VfsPaths pathnames;
if (vfs::GetPathnames(m_VFS, L"art/skeletons/", L"*.xml", pathnames) < 0)
{
LOGERROR(L"No skeleton definition files present");
return false;
}
bool loaded = false;
for (VfsPaths::const_iterator it = pathnames.begin(); it != pathnames.end(); ++it)
{
LOGMESSAGE(L"Loading skeleton definitions from '%ls'", it->string().c_str());
// Set the filename for the logger to report
set_logger(ColladaLog, const_cast<void*>(static_cast<const void*>(&(*it))));
CVFSFile skeletonFile;
if (skeletonFile.Load(m_VFS, *it) != PSRETURN_OK)
{
LOGERROR(L"Failed to read skeleton defintions from '%ls'", it->string().c_str());
continue;
}
int ok = set_skeleton_definitions((const char*)skeletonFile.GetBuffer(), (int)skeletonFile.GetBufferSize());
if (ok < 0)
{
LOGERROR(L"Failed to load skeleton definitions from '%ls'", it->string().c_str());
continue;
}
loaded = true;
}
if (!loaded)
LOGERROR(L"Failed to load any skeleton definitions");
return loaded;
}
/**
* Creates MD5 hash key from skeletons.xml info and COLLADA converter version,
* used to invalidate cached .pmd/psas
*
* @param[out] hash resulting MD5 hash
* @param[out] version version passed to CCacheLoader, used if code change should force
* cache invalidation
*/
void PrepareCacheKey(MD5& hash, u32& version)
{
// Add converter version to the hash
version = COLLADA_CONVERTER_VERSION;
// Cache the skeleton files hash data
if (m_skeletonHashInvalidated)
{
VfsPaths paths;
if (vfs::GetPathnames(m_VFS, L"art/skeletons/", L".xml", paths) != INFO::OK)
{
LOGWARNING(L"Failed to load skeleton definitions");
return;
}
// Sort the paths to not invalidate the cache if mods are mounted in different order
// (No need to stable_sort as the VFS gurantees that we have no duplicates)
std::sort(paths.begin(), paths.end());
// We need two u64s per file
m_skeletonHashes.clear();
m_skeletonHashes.resize(paths.size()*2);
FileInfo fileInfo;
for (VfsPaths::const_iterator it = paths.begin(); it != paths.end(); ++it)
{
// This will cause an assertion failure if *it doesn't exist,
// because fileinfo is not a NULL pointer, which is annoying but that
// should never happen, unless there really is a problem
if (m_VFS->GetFileInfo(*it, &fileInfo) != INFO::OK)
{
LOGERROR(L"Failed to stat '%ls' for DAE caching", it->string().c_str());
}
else
{
m_skeletonHashes.push_back((u64)fileInfo.MTime() & ~1); //skip lowest bit, since zip and FAT don't preserve it
m_skeletonHashes.push_back((u64)fileInfo.Size());
}
}
// Check if we were able to load any skeleton files
if (m_skeletonHashes.empty())
LOGERROR(L"Failed to stat any skeleton definitions for DAE caching");
// We can continue, something else will break if we try loading a skeletal model
m_skeletonHashInvalidated = false;
}
for (std::vector<u64>::const_iterator it = m_skeletonHashes.begin(); it != m_skeletonHashes.end(); ++it)
hash.Update((const u8*)&(*it), sizeof(*it));
}
private:
PIVFS m_VFS;
bool m_skeletonHashInvalidated;
std::vector<u64> m_skeletonHashes;
};
CColladaManager::CColladaManager(const PIVFS& vfs)
@ -181,32 +324,6 @@ CColladaManager::~CColladaManager()
delete m;
}
void CColladaManager::PrepareCacheKey(MD5& hash, u32& version)
{
// Include skeletons.xml file info in the hash
VfsPath skeletonPath("art/skeletons/skeletons.xml");
FileInfo fileInfo;
// This will cause an assertion failure if skeletons.xml doesn't exist,
// because fileinfo is not a NULL pointer, which is annoying but that
// should never happen, unless there really is a problem
if (m_VFS->GetFileInfo(skeletonPath, &fileInfo) != INFO::OK)
{
LOGERROR(L"Failed to stat '%ls' for DAE caching", skeletonPath.string().c_str());
// We can continue, something else will break if we try loading a skeletal model
}
else
{
u64 skeletonsModifyTime = (u64)fileInfo.MTime() & ~1; // skip lowest bit, since zip and FAT don't preserve it
u64 skeletonsSize = (u64)fileInfo.Size();
hash.Update((const u8*)&skeletonsModifyTime, sizeof(skeletonsModifyTime));
hash.Update((const u8*)&skeletonsSize, sizeof(skeletonsSize));
}
// Add converter version to the hash
version = COLLADA_CONVERTER_VERSION;
}
VfsPath CColladaManager::GetLoadablePath(const VfsPath& pathnameNoExtension, FileType type)
{
std::wstring extn;
@ -255,22 +372,18 @@ VfsPath CColladaManager::GetLoadablePath(const VfsPath& pathnameNoExtension, Fil
CCacheLoader cacheLoader(m_VFS, extn);
MD5 hash;
u32 version;
PrepareCacheKey(hash, version);
m->PrepareCacheKey(hash, version);
VfsPath cachePath;
VfsPath sourcePath = pathnameNoExtension.ChangeExtension(L".dae");
Status ret = cacheLoader.TryLoadingCached(sourcePath, hash, version, cachePath);
if (ret == INFO::OK)
{
// Found a valid cached version
return cachePath;
}
else if (ret == INFO::SKIPPED)
{
// No valid cached version was found - but source .dae exists
// We'll try converting it
}
else
// No valid cached version, check if we have a source .dae
if (ret != INFO::SKIPPED)
{
// No valid cached version was found, and no source .dae exists
ENSURE(ret < 0);
@ -288,6 +401,9 @@ VfsPath CColladaManager::GetLoadablePath(const VfsPath& pathnameNoExtension, Fil
}
}
// No valid cached version was found - but source .dae exists
// We'll try converting it
// We have a source .dae and invalid cached version, so regenerate cached version
if (! m->Convert(sourcePath, cachePath, type))
{

View File

@ -61,16 +61,6 @@ public:
bool GenerateCachedFile(const VfsPath& sourcePath, FileType type, VfsPath& archiveCachePath);
private:
/**
* Creates MD5 hash key from skeletons.xml info and COLLADA converter version,
* used to invalidate cached .pmd/psas
*
* @param[out] hash resulting MD5 hash
* @param[out] version version passed to CCacheLoader, used if code change should force
* cache invalidation
*/
void PrepareCacheKey(MD5& hash, u32& version);
CColladaManagerImpl* m;
PIVFS m_VFS;
};