haul out the critter skele, add theropod

This commit is contained in:
jshipsey 2020-08-29 04:23:12 -04:00
parent aa440c02bb
commit cd6e1ad45f
106 changed files with 1771 additions and 825 deletions

View File

@ -461,6 +461,30 @@
"frog": {
"keyword": "frog",
"generic": "Frog"
},
"rat": {
"keyword": "rat",
"generic": "Rat"
},
"axolotl": {
"keyword": "axolotl",
"generic": "Axolotl"
},
"gecko": {
"keyword": "gecko",
"generic": "Gecko"
},
"turtle": {
"keyword": "turtle",
"generic": "Turtle"
},
"squirrel": {
"keyword": "squirrel",
"generic": "Squirrel"
},
"fungome": {
"keyword": "fungome",
"generic": "Fungome"
}
}
},
@ -550,37 +574,21 @@
}
}
},
"critter": {
"theropod": {
"body": {
"keyword": "critter",
"keyword": "theropod",
"names": [
"Remy"
]
},
"species": {
"rat": {
"keyword": "rat",
"generic": "Rat"
"archaeos": {
"keyword": "archaeos",
"generic": "Archaeos"
},
"axolotl": {
"keyword": "axolotl",
"generic": "Axolotl"
},
"gecko": {
"keyword": "gecko",
"generic": "Gecko"
},
"turtle": {
"keyword": "turtle",
"generic": "Turtle"
},
"squirrel": {
"keyword": "squirrel",
"generic": "Squirrel"
},
"fungome": {
"keyword": "fungome",
"generic": "Fungome"
"odontotyrannos": {
"keyword": "odontotyrannos",
"generic": "Odontotyrannos"
}
}
},

View File

@ -1,266 +0,0 @@
({
(Rat, Male): (
head: (
offset: (-4.5, -4.0, -4.0),
center: ("npc.rat.male.head"),
),
chest: (
offset: (-4.5, -6.0, -4.0),
center: ("npc.rat.male.chest"),
),
feet_f: (
offset: (-4.0, -1.5, -1.0),
center: ("npc.rat.male.feet_f"),
),
feet_b: (
offset: (-4.0, -1.5, -1.0),
center: ("npc.rat.male.feet_b"),
),
tail: (
offset: (-0.5, -4.0, -1.5),
center: ("npc.rat.male.tail"),
),
),
(Rat, Female): (
head: (
offset: (-4.5, -4.0, -4.0),
center: ("npc.rat.male.head"),
),
chest: (
offset: (-4.5, -6.0, -4.0),
center: ("npc.rat.male.chest"),
),
feet_f: (
offset: (-4.0, -1.5, -1.0),
center: ("npc.rat.male.feet_f"),
),
feet_b: (
offset: (-4.0, -1.5, -1.0),
center: ("npc.rat.male.feet_b"),
),
tail: (
offset: (-0.5, -4.0, -1.5),
center: ("npc.rat.male.tail"),
),
),
(Axolotl, Male): (
head: (
offset: (-3.5, -4.0, -2.0),
center: ("npc.axolotl.male.head"),
),
chest: (
offset: (-2.5, -4.0, -1.5),
center: ("npc.axolotl.male.chest"),
),
feet_f: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.axolotl.male.feet_f"),
),
feet_b: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.axolotl.male.feet_b"),
),
tail: (
offset: (-1.5, -2.5, -1.5),
center: ("npc.axolotl.male.tail"),
),
),
(Axolotl, Female): (
head: (
offset: (-3.5, -4.0, -2.0),
center: ("npc.axolotl.male.head"),
),
chest: (
offset: (-2.5, -4.0, -1.5),
center: ("npc.axolotl.male.chest"),
),
feet_f: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.axolotl.male.feet_f"),
),
feet_b: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.axolotl.male.feet_b"),
),
tail: (
offset: (-1.5, -2.5, -1.5),
center: ("npc.axolotl.male.tail"),
),
),
(Gecko, Male): (
head: (
offset: (-2.5, -3.0, -2.0),
center: ("npc.gecko.male.head"),
),
chest: (
offset: (-1.5, -4.0, -2.0),
center: ("npc.gecko.male.chest"),
),
feet_f: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.gecko.male.feet_f"),
),
feet_b: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.gecko.male.feet_b"),
),
tail: (
offset: (-0.5, -2.5, -1.0),
center: ("npc.gecko.male.tail"),
),
),
(Gecko, Female): (
head: (
offset: (-2.5, -3.0, -2.0),
center: ("npc.gecko.male.head"),
),
chest: (
offset: (-1.5, -4.0, -1.5),
center: ("npc.gecko.male.chest"),
),
feet_f: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.gecko.male.feet_f"),
),
feet_b: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.gecko.male.feet_b"),
),
tail: (
offset: (-0.5, -2.5, -1.0),
center: ("npc.gecko.male.tail"),
),
),
(Turtle, Male): (
head: (
offset: (-2.5, -2.5, -2.5),
center: ("npc.turtle.male.head"),
),
chest: (
offset: (-6.0, -6.0, -4.0),
center: ("npc.turtle.male.chest"),
),
feet_f: (
offset: (-5.0, -0.5, -1.0),
center: ("npc.turtle.male.feet_f"),
),
feet_b: (
offset: (-5.0, -0.5, -1.0),
center: ("npc.turtle.male.feet_b"),
),
tail: (
offset: (-0.5, -2.0, -1.0),
center: ("npc.turtle.male.tail"),
),
),
(Turtle, Female): (
head: (
offset: (-2.5, -2.5, -2.5),
center: ("npc.turtle.male.head"),
),
chest: (
offset: (-6.0, -6.0, -4.0),
center: ("npc.turtle.male.chest"),
),
feet_f: (
offset: (-5.0, -0.5, -1.0),
center: ("npc.turtle.male.feet_f"),
),
feet_b: (
offset: (-5.0, -0.5, -1.0),
center: ("npc.turtle.male.feet_b"),
),
tail: (
offset: (-0.5, -2.0, -1.0),
center: ("npc.turtle.male.tail"),
),
),
(Squirrel, Male): (
head: (
offset: (-1.5, -2.0, -2.0),
center: ("npc.squirrel.male.head"),
),
chest: (
offset: (-1.5, -3.0, -1.5),
center: ("npc.squirrel.male.chest"),
),
feet_f: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.squirrel.male.feet_f"),
),
feet_b: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.squirrel.male.feet_b"),
),
tail: (
offset: (-1.5, -1.5, -3.0),
center: ("npc.squirrel.male.tail"),
),
),
(Squirrel, Female): (
head: (
offset: (-1.5, -2.0, -2.0),
center: ("npc.squirrel.male.head"),
),
chest: (
offset: (-1.5, -3.0, -1.5),
center: ("npc.squirrel.male.chest"),
),
feet_f: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.squirrel.male.feet_f"),
),
feet_b: (
offset: (-2.0, -0.5, -1.0),
center: ("npc.squirrel.male.feet_b"),
),
tail: (
offset: (-1.5, -1.5, -3.0),
center: ("npc.squirrel.male.tail"),
),
),
(Fungome, Male): (
head: (
offset: (-2.5, -1.5, -2.0),
center: ("npc.fungome.male.head"),
),
chest: (
offset: (-6.0, -6.0, -4.0),
center: ("npc.fungome.male.chest"),
),
feet_f: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.fungome.male.feet_f"),
),
feet_b: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.fungome.male.feet_b"),
),
tail: (
offset: (-1.0, -0.5, -1.0),
center: ("npc.fungome.male.tail"),
),
),
(Fungome, Female): (
head: (
offset: (-2.5, -1.5, -2.0),
center: ("npc.fungome.male.head"),
),
chest: (
offset: (-6.0, -6.0, -4.0),
center: ("npc.fungome.male.chest"),
),
feet_f: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.fungome.male.feet_f"),
),
feet_b: (
offset: (-3.0, -0.5, -1.0),
center: ("npc.fungome.male.feet_b"),
),
tail: (
offset: (-1.0, -0.5, -1.0),
center: ("npc.fungome.male.tail"),
),
),
})

BIN
assets/voxygen/voxel/npc/archaeos/male/chest_back.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/chest_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/foot_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/foot_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/hand_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/hand_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/head.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/jaw.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/leg_l.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/leg_r.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/neck.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/tail_back.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/archaeos/male/tail_front.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axolotl/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/axolotl/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/fungome/male/foot_bl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/fungome/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/fungome/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/fungome/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/gecko/male/foot_bl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/gecko/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/gecko/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/gecko/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-0.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-1.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-2.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-3.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-4.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-5.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-6.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-7.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-8.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/odontotyrannos/Odontotyrannos-9.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/foot_bl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/head.vox (Stored with Git LFS)

Binary file not shown.

BIN
assets/voxygen/voxel/npc/rat/male/tail.vox (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/squirrel/male/foot_bl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/squirrel/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/squirrel/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/squirrel/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/voxygen/voxel/npc/turtle/male/foot_bl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/turtle/male/foot_br.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/turtle/male/foot_fl.vox (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/voxygen/voxel/npc/turtle/male/foot_fr.vox (Stored with Git LFS) Normal file

Binary file not shown.

View File

@ -462,4 +462,172 @@
central: ("armor.empty"),
),
),
(Rat, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.frog.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Rat, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.frog.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Axolotl, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.frog.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Axolotl, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.frog.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Gecko, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.frog.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Gecko, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.frog.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.gecko.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Turtle, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.turtle.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.turtle.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Turtle, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.turtle.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.turtle.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Squirrel, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.squirrel.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.squirrel.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Squirrel, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.squirrel.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.squirrel.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Fungome, Male):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.fungome.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.fungome.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
(Fungome, Female):(
head: (
offset: (-3.5, 0.0, -3.0),
central: ("npc.fungome.male.head"),
),
chest: (
offset: (-3.5, -5.0, -3.0),
central: ("npc.fungome.male.chest"),
),
tail: (
offset: (0.0, 0.0, 0.0),
central: ("armor.empty"),
),
),
})

View File

@ -575,7 +575,6 @@
lateral: ("npc.frog.male.foot_br"),
),
),
(Frog, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
@ -594,4 +593,220 @@
lateral: ("npc.frog.male.foot_br"),
),
),
(Rat, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.rat.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.rat.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.rat.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.rat.male.foot_br"),
),
),
(Rat, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.rat.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.rat.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.rat.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.rat.male.foot_br"),
),
),
(Axolotl, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.axolotl.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.axolotl.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.axolotl.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.axolotl.male.foot_br"),
),
),
(Axolotl, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.axolotl.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.axolotl.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.axolotl.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.axolotl.male.foot_br"),
),
),
(Gecko, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.gecko.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.gecko.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.gecko.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.gecko.male.foot_br"),
),
),
(Gecko, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.gecko.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.gecko.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.gecko.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.gecko.male.foot_br"),
),
),
(Turtle, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.turtle.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.turtle.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.turtle.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.turtle.male.foot_br"),
),
),
(Turtle, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.turtle.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.turtle.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.turtle.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.turtle.male.foot_br"),
),
),
(Squirrel, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.squirrel.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.squirrel.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.squirrel.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.squirrel.male.foot_br"),
),
),
(Squirrel, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.squirrel.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.squirrel.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.squirrel.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.squirrel.male.foot_br"),
),
),
(Fungome, Male): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.fungome.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.fungome.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.fungome.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.fungome.male.foot_br"),
),
),
(Fungome, Female): (
left_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.fungome.male.foot_fl"),
),
right_front: (
offset: (-2.5, -2.5, -4.0),
lateral: ("npc.fungome.male.foot_fr"),
),
left_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.fungome.male.foot_bl"),
),
right_back: (
offset: (-2.5, -3.5, -4.0),
lateral: ("npc.fungome.male.foot_br"),
),
),
})

View File

@ -0,0 +1,122 @@
({
(Archaeos, Male): (
head: (
offset: (-4.5, 0.0, -5.0),
central: ("npc.archaeos.male.head"),
),
jaw: (
offset: (-4.5, -9.0, -3.0),
central: ("npc.archaeos.male.jaw"),
),
neck: (
offset: (-4.5, 0.0, -3.0),
central: ("npc.archaeos.male.neck"),
),
chest_front: (
offset: (-7.5, -5.5, -7.0),
central: ("npc.archaeos.male.chest_front"),
),
chest_back: (
offset: (-4.5, -9.0, -7.0),
central: ("npc.archaeos.male.chest_back"),
),
tail_front: (
offset: (-3.5, -8.0, -3.5),
central: ("npc.archaeos.male.tail_front"),
),
tail_back: (
offset: (-7.5, -11.0, -3.0),
central: ("npc.archaeos.male.tail_back"),
),
),
(Archaeos, Female): (
head: (
offset: (-4.5, 0.0, -5.0),
central: ("npc.archaeos.male.head"),
),
jaw: (
offset: (-4.5, -9.0, -3.0),
central: ("npc.archaeos.male.jaw"),
),
neck: (
offset: (-4.5, 0.0, -3.0),
central: ("npc.archaeos.male.neck"),
),
chest_front: (
offset: (-7.5, -5.5, -7.0),
central: ("npc.archaeos.male.chest_front"),
),
chest_back: (
offset: (-4.5, -9.0, -7.0),
central: ("npc.archaeos.male.chest_back"),
),
tail_front: (
offset: (-3.5, -8.0, -3.5),
central: ("npc.archaeos.male.tail_front"),
),
tail_back: (
offset: (-7.5, -11.0, -3.0),
central: ("npc.archaeos.male.tail_back"),
),
),
(Odontotyrannos, Male): (
head: (
offset: (-4.5, -4.0, -4.0),
central: ("npc.rat.male.head"),
),
jaw: (
offset: (-4.5, -6.0, -4.0),
central: ("npc.rat.male.chest"),
),
neck: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
chest_front: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
chest_back: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
tail_front: (
offset: (-0.5, -4.0, -1.5),
central: ("npc.rat.male.chest"),
),
tail_back: (
offset: (-0.5, -4.0, -1.5),
central: ("npc.rat.male.chest"),
),
),
(Odontotyrannos, Female): (
head: (
offset: (-4.5, -4.0, -4.0),
central: ("npc.rat.male.head"),
),
jaw: (
offset: (-4.5, -6.0, -4.0),
central: ("npc.rat.male.chest"),
),
neck: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
chest_front: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
chest_back: (
offset: (-4.0, -1.5, -1.0),
central: ("npc.rat.male.chest"),
),
tail_front: (
offset: (-0.5, -4.0, -1.5),
central: ("npc.rat.male.chest"),
),
tail_back: (
offset: (-0.5, -4.0, -1.5),
central: ("npc.rat.male.chest"),
),
),
})

View File

@ -0,0 +1,106 @@
({
(Archaeos, Male): (
hand_l: (
offset: (-4.0, 2.0, -9.0),
lateral: ("npc.archaeos.male.hand_l"),
),
hand_r: (
offset: (0.0, -2.0, -4.0),
lateral: ("npc.archaeos.male.hand_r"),
),
leg_l: (
offset: (-6.0, -4.5, -8.0),
lateral: ("npc.archaeos.male.leg_l"),
),
leg_r: (
offset: (0.0, -4.5, -8.0),
lateral: ("npc.archaeos.male.leg_r"),
),
foot_l: (
offset: (-11.0, -1.0, -8.0),
lateral: ("npc.archaeos.male.foot_l"),
),
foot_r: (
offset: (0.0, -1.0, -8.0),
lateral: ("npc.archaeos.male.foot_r"),
),
),
(Archaeos, Female): (
hand_l: (
offset: (-4.0, 2.0, -9.0),
lateral: ("npc.archaeos.male.hand_l"),
),
hand_r: (
offset: (0.0, -2.0, -4.0),
lateral: ("npc.archaeos.male.hand_r"),
),
leg_l: (
offset: (-6.0, -4.5, -8.0),
lateral: ("npc.archaeos.male.leg_l"),
),
leg_r: (
offset: (0.0, -4.5, -8.0),
lateral: ("npc.archaeos.male.leg_r"),
),
foot_l: (
offset: (-11.0, -1.0, -8.0),
lateral: ("npc.archaeos.male.foot_l"),
),
foot_r: (
offset: (0.0, -1.0, -8.0),
lateral: ("npc.archaeos.male.foot_r"),
),
),
(Odontotyrannos, Male): (
hand_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
hand_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
leg_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
leg_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
foot_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
foot_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
),
(Odontotyrannos, Female): (
hand_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
hand_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
leg_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
leg_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
foot_l: (
offset: (-6.0, -3.5, -4.0),
lateral: ("npc.ogre.male.shoulder_l"),
),
foot_r: (
offset: (-6.0, -4.5, -4.0),
lateral: ("npc.ogre.male.shoulder_r"),
),
),
})

View File

@ -1,5 +1,5 @@
use crate::{
comp::{critter, humanoid, quadruped_low, quadruped_medium, quadruped_small, Body},
comp::{humanoid, quadruped_low, quadruped_medium, quadruped_small, theropod, Body},
path::Chaser,
sync::Uid,
};
@ -97,6 +97,7 @@ impl<'a> From<&'a Body> for Psyche {
quadruped_small::Species::Rabbit => 0.1,
quadruped_small::Species::Truffler => 0.8,
quadruped_small::Species::Frog => 0.6,
_ => 1.0,
},
Body::QuadrupedMedium(quadruped_medium) => match quadruped_medium.species {
quadruped_medium::Species::Tuskram => 0.8,
@ -123,10 +124,7 @@ impl<'a> From<&'a Body> for Psyche {
Body::BipedLarge(_) => 1.0,
Body::Object(_) => 1.0,
Body::Golem(_) => 1.0,
Body::Critter(critter) => match critter.species {
critter::Species::Axolotl => 1.0,
critter::Species::Turtle => 1.0,
critter::Species::Fungome => 1.0,
Body::Theropod(theropod) => match theropod.species {
_ => 0.4,
},
Body::Dragon(_) => 1.0,

View File

@ -1,7 +1,6 @@
pub mod biped_large;
pub mod bird_medium;
pub mod bird_small;
pub mod critter;
pub mod dragon;
pub mod fish_medium;
pub mod fish_small;
@ -11,6 +10,7 @@ pub mod object;
pub mod quadruped_low;
pub mod quadruped_medium;
pub mod quadruped_small;
pub mod theropod;
use crate::{
assets::{self, Asset},
@ -39,7 +39,7 @@ make_case_elim!(
BipedLarge(body: biped_large::Body)= 8,
Object(body: object::Body) = 9,
Golem(body: golem::Body) = 10,
Critter(body: critter::Body) = 11,
Theropod(body: theropod::Body) = 11,
QuadrupedLow(body: quadruped_low::Body) = 12,
}
);
@ -72,7 +72,7 @@ pub struct AllBodies<BodyMeta, SpeciesMeta> {
pub biped_large: BodyData<BodyMeta, biped_large::AllSpecies<SpeciesMeta>>,
pub object: BodyData<BodyMeta, ()>,
pub golem: BodyData<BodyMeta, golem::AllSpecies<SpeciesMeta>>,
pub critter: BodyData<BodyMeta, critter::AllSpecies<SpeciesMeta>>,
pub theropod: BodyData<BodyMeta, theropod::AllSpecies<SpeciesMeta>>,
pub quadruped_low: BodyData<BodyMeta, quadruped_low::AllSpecies<SpeciesMeta>>,
}
@ -89,7 +89,7 @@ impl<BodyMeta, SpeciesMeta> core::ops::Index<NpcKind> for AllBodies<BodyMeta, Sp
NpcKind::Duck => &self.bird_medium.body,
NpcKind::Ogre => &self.biped_large.body,
NpcKind::StoneGolem => &self.golem.body,
NpcKind::Rat => &self.critter.body,
NpcKind::Archaeos => &self.theropod.body,
NpcKind::Reddragon => &self.dragon.body,
NpcKind::Crocodile => &self.quadruped_low.body,
}
@ -114,7 +114,7 @@ impl<'a, BodyMeta, SpeciesMeta> core::ops::Index<&'a Body> for AllBodies<BodyMet
Body::BipedLarge(_) => &self.biped_large.body,
Body::Object(_) => &self.object.body,
Body::Golem(_) => &self.golem.body,
Body::Critter(_) => &self.critter.body,
Body::Theropod(_) => &self.theropod.body,
Body::QuadrupedLow(_) => &self.quadruped_low.body,
}
}
@ -158,7 +158,7 @@ impl Body {
quadruped_low::Species::Pangolin => 1.3,
_ => 1.6,
},
Body::Critter(_) => 0.3,
Body::Theropod(_) => 0.3,
Body::BirdMedium(_) => 0.35,
Body::FishMedium(_) => 0.35,
Body::Dragon(_) => 8.0,
@ -198,7 +198,7 @@ impl Body {
quadruped_low::Species::Maneater => 4.0,
_ => 1.3,
},
Body::Critter(_) => 0.7,
Body::Theropod(_) => 0.7,
Body::BirdMedium(body) => match body.species {
bird_medium::Species::Cockatrice => 1.8,
_ => 1.1,
@ -264,7 +264,7 @@ impl Body {
},
Body::Object(_) => 10000,
Body::Golem(_) => 1500,
Body::Critter(_) => 50,
Body::Theropod(_) => 50,
Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {
quadruped_low::Species::Crocodile => 600,
quadruped_low::Species::Alligator => 600,
@ -331,7 +331,7 @@ impl Body {
},
Body::Object(_) => 10,
Body::Golem(_) => 150,
Body::Critter(_) => 20,
Body::Theropod(_) => 20,
Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {
quadruped_low::Species::Crocodile => 20,
quadruped_low::Species::Alligator => 20,
@ -396,7 +396,7 @@ impl Body {
},
Body::Object(_) => 1,
Body::Golem(_) => 75,
Body::Critter(_) => 2,
Body::Theropod(_) => 2,
Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {
quadruped_low::Species::Crocodile => 10,
quadruped_low::Species::Alligator => 10,
@ -426,7 +426,7 @@ impl Body {
Body::BipedLarge(_) => 2,
Body::Object(_) => 0,
Body::Golem(_) => 5,
Body::Critter(_) => 1,
Body::Theropod(_) => 1,
Body::QuadrupedLow(_) => 1,
}
}
@ -473,7 +473,7 @@ impl Body {
},
Body::Object(_) => 0,
Body::Golem(_) => 250,
Body::Critter(_) => 10,
Body::Theropod(_) => 10,
Body::QuadrupedLow(quadruped_low) => match quadruped_low.species {
quadruped_low::Species::Crocodile => 50,
quadruped_low::Species::Alligator => 50,
@ -502,7 +502,7 @@ impl Body {
Body::BipedLarge(_) => 10.0,
Body::Object(_) => 3.0,
Body::Golem(_) => 7.5,
Body::Critter(_) => 3.0,
Body::Theropod(_) => 3.0,
Body::QuadrupedLow(_) => 4.5,
}
}

View File

@ -29,29 +29,32 @@ impl From<Body> for super::Body {
fn from(body: Body) -> Self { super::Body::QuadrupedSmall(body) }
}
make_case_elim!(
species,
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u32)]
pub enum Species {
Pig = 0,
Fox = 1,
Sheep = 2,
Boar = 3,
Jackalope = 4,
Skunk = 5,
Cat = 6,
Batfox = 7,
Raccoon = 8,
Quokka = 9,
Dodarock = 10,
Holladon = 11,
Hyena = 12,
Rabbit = 13,
Truffler = 14,
Frog = 15,
}
);
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[repr(u32)]
pub enum Species {
Pig = 0,
Fox = 1,
Sheep = 2,
Boar = 3,
Jackalope = 4,
Skunk = 5,
Cat = 6,
Batfox = 7,
Raccoon = 8,
Quokka = 9,
Dodarock = 10,
Holladon = 11,
Hyena = 12,
Rabbit = 13,
Truffler = 14,
Frog = 15,
Rat = 16,
Axolotl = 17,
Gecko = 18,
Turtle = 19,
Squirrel = 20,
Fungome = 21,
}
/// Data representing per-species generic data.
///
@ -74,6 +77,12 @@ pub struct AllSpecies<SpeciesMeta> {
pub rabbit: SpeciesMeta,
pub truffler: SpeciesMeta,
pub frog: SpeciesMeta,
pub rat: SpeciesMeta,
pub axolotl: SpeciesMeta,
pub gecko: SpeciesMeta,
pub turtle: SpeciesMeta,
pub squirrel: SpeciesMeta,
pub fungome: SpeciesMeta,
}
impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta> {
@ -98,11 +107,17 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
Species::Rabbit => &self.rabbit,
Species::Truffler => &self.truffler,
Species::Frog => &self.frog,
Species::Rat => &self.rat,
Species::Axolotl => &self.axolotl,
Species::Gecko => &self.gecko,
Species::Turtle => &self.turtle,
Species::Squirrel => &self.squirrel,
Species::Fungome => &self.fungome,
}
}
}
pub const ALL_SPECIES: [Species; 16] = [
pub const ALL_SPECIES: [Species; 22] = [
Species::Pig,
Species::Fox,
Species::Sheep,
@ -119,6 +134,12 @@ pub const ALL_SPECIES: [Species; 16] = [
Species::Rabbit,
Species::Truffler,
Species::Frog,
Species::Rat,
Species::Axolotl,
Species::Gecko,
Species::Turtle,
Species::Squirrel,
Species::Fungome,
];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {

View File

@ -22,7 +22,7 @@ impl Body {
}
impl From<Body> for super::Body {
fn from(body: Body) -> Self { super::Body::Critter(body) }
fn from(body: Body) -> Self { super::Body::Theropod(body) }
}
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
@ -30,7 +30,6 @@ impl From<Body> for super::Body {
pub enum Species {
Archaeos = 0,
Odontotyrannos = 1,
}
/// Data representing per-species generic data.
@ -52,10 +51,7 @@ impl<'a, SpeciesMeta> core::ops::Index<&'a Species> for AllSpecies<SpeciesMeta>
}
}
pub const ALL_SPECIES: [Species; 2] = [
Species::Archaeos,
Species::Odontotyrannos,
];
pub const ALL_SPECIES: [Species; 2] = [Species::Archaeos, Species::Odontotyrannos];
impl<'a, SpeciesMeta: 'a> IntoIterator for &'a AllSpecies<SpeciesMeta> {
type IntoIter = std::iter::Copied<std::slice::Iter<'static, Self::Item>>;

View File

@ -25,8 +25,8 @@ pub use ability::{CharacterAbility, CharacterAbilityType, ItemConfig, Loadout};
pub use admin::{Admin, AdminList};
pub use agent::{Agent, Alignment};
pub use body::{
biped_large, bird_medium, bird_small, critter, dragon, fish_medium, fish_small, golem,
humanoid, object, quadruped_low, quadruped_medium, quadruped_small, AllBodies, Body, BodyData,
biped_large, bird_medium, bird_small, dragon, fish_medium, fish_small, golem, humanoid, object,
quadruped_low, quadruped_medium, quadruped_small, theropod, AllBodies, Body, BodyData,
};
pub use character_state::{Attacking, CharacterState, StateUpdate};
pub use chat::{

View File

@ -110,7 +110,7 @@ impl EntityInfo {
Some(get_npc_name(&NPC_NAMES.quadruped_medium, body.species))
},
Body::BirdMedium(body) => Some(get_npc_name(&NPC_NAMES.bird_medium, body.species)),
Body::Critter(body) => Some(get_npc_name(&NPC_NAMES.critter, body.species)),
Body::Theropod(body) => Some(get_npc_name(&NPC_NAMES.theropod, body.species)),
Body::QuadrupedSmall(body) => {
Some(get_npc_name(&NPC_NAMES.quadruped_small, body.species))
},

View File

@ -55,7 +55,7 @@ impl LoadoutBuilder {
.lantern(Some(Item::new_from_asset_expect(
"common.items.armor.starter.lantern",
)))
.glider(Some(assets::load_expect_cloned(
.glider(Some(ItemAsset::load_expect_cloned(
"common.items.armor.starter.glider",
)))
}

View File

@ -14,7 +14,7 @@ pub enum NpcKind {
Pig,
Duck,
Ogre,
Rat,
Archaeos,
StoneGolem,
Reddragon,
Crocodile,
@ -26,7 +26,7 @@ pub const ALL_NPCS: [NpcKind; 9] = [
NpcKind::Pig,
NpcKind::Duck,
NpcKind::Ogre,
NpcKind::Rat,
NpcKind::Archaeos,
NpcKind::StoneGolem,
NpcKind::Reddragon,
NpcKind::Crocodile,
@ -94,7 +94,7 @@ pub fn kind_to_body(kind: NpcKind) -> Body {
NpcKind::Wolf => comp::quadruped_medium::Body::random().into(),
NpcKind::Duck => comp::bird_medium::Body::random().into(),
NpcKind::Ogre => comp::biped_large::Body::random().into(),
NpcKind::Rat => comp::critter::Body::random().into(),
NpcKind::Archaeos => comp::theropod::Body::random().into(),
NpcKind::StoneGolem => comp::golem::Body::random().into(),
NpcKind::Reddragon => comp::dragon::Body::random().into(),
NpcKind::Crocodile => comp::quadruped_low::Body::random().into(),
@ -206,9 +206,9 @@ impl NpcBody {
.or_else(|| {
parse(
s,
NpcKind::Rat,
&npc_names.critter,
comp::critter::Body::random_with,
NpcKind::Archaeos,
&npc_names.theropod,
comp::theropod::Body::random_with,
)
})
.or_else(|| {

View File

@ -41,7 +41,7 @@ impl Body {
Body::BipedLarge(_) => 75.0,
Body::Object(_) => 40.0,
Body::Golem(_) => 60.0,
Body::Critter(_) => 85.0,
Body::Theropod(_) => 85.0,
Body::QuadrupedLow(_) => 120.0,
}
}
@ -59,7 +59,7 @@ impl Body {
Body::BipedLarge(_) => 12.0,
Body::Object(_) => 5.0,
Body::Golem(_) => 8.0,
Body::Critter(_) => 35.0,
Body::Theropod(_) => 35.0,
Body::QuadrupedLow(_) => 12.0,
}
}

View File

@ -317,9 +317,7 @@ pub fn handle_destroy(server: &mut Server, entity: EcsEntity, cause: HealthSourc
7 => "common.loot_tables.loot_table_weapon_rare",
_ => "common.loot_tables.loot_table",
},
Some(common::comp::Body::Critter(_)) => {
"common.loot_tables.loot_table_animal_parts"
},
Some(common::comp::Body::Theropod(_)) => "common.loot_tables.loot_table_animal_parts",
Some(common::comp::Body::Dragon(_)) => "common.loot_tables.loot_table_weapon_rare",
Some(common::comp::Body::QuadrupedLow(_)) => match rng.gen_range(0, 3) {
0 => "common.loot_tables.loot_table_food",

View File

@ -1,68 +0,0 @@
use super::{super::Animation, CritterAttr, CritterSkeleton};
//use std::{f32::consts::PI, ops::Mul};
use super::super::vek::*;
use std::{f32::consts::PI, ops::Mul};
pub struct IdleAnimation;
impl Animation for IdleAnimation {
type Dependency = f64;
type Skeleton = CritterSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"critter_idle\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "critter_idle")]
fn update_skeleton_inner(
skeleton: &Self::Skeleton,
global_time: Self::Dependency,
anim_time: f64,
_rate: &mut f32,
skeleton_attr: &CritterAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
let wave = (anim_time as f32 * 10.0).sin();
let wave_slow = (anim_time as f32 * 5.5 + PI).sin();
let rat_head_look = Vec2::new(
((global_time + anim_time) as f32 / 3.0)
.floor()
.mul(7331.0)
.sin()
* 0.5,
((global_time + anim_time) as f32 / 3.0)
.floor()
.mul(1337.0)
.sin()
* 0.25,
);
next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1);
next.head.orientation = Quaternion::rotation_z(rat_head_look.x)
* Quaternion::rotation_x(rat_head_look.y + wave * 0.03);
next.head.scale = Vec3::one();
next.chest.position = Vec3::new(
0.0,
skeleton_attr.chest.0,
skeleton_attr.chest.1 + wave * 0.3,
) / 18.0;
next.chest.orientation = Quaternion::rotation_y(wave_slow * 0.06);
next.chest.scale = Vec3::one() / 18.0;
next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1);
next.feet_f.orientation = Quaternion::rotation_z(0.0);
next.feet_f.scale = Vec3::one();
next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1);
next.feet_b.orientation = Quaternion::rotation_x(0.0);
next.feet_b.scale = Vec3::one();
next.tail.position =
Vec3::new(0.0, skeleton_attr.tail.0 + wave * 0.2, skeleton_attr.tail.1);
next.tail.orientation = Quaternion::rotation_y(wave_slow * 0.05);
next.tail.scale = Vec3::one();
next
}
}

View File

@ -1,48 +0,0 @@
use super::{super::Animation, CritterAttr, CritterSkeleton};
//use std::f32::consts::PI;
use super::super::vek::*;
pub struct JumpAnimation;
impl Animation for JumpAnimation {
type Dependency = (f32, f64);
type Skeleton = CritterSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"critter_jump\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "critter_jump")]
fn update_skeleton_inner(
skeleton: &Self::Skeleton,
_global_time: Self::Dependency,
_anim_time: f64,
_rate: &mut f32,
skeleton_attr: &CritterAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
let wave = (_anim_time as f32 * 1.0).sin();
next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1);
next.head.orientation = Quaternion::rotation_z(0.8) * Quaternion::rotation_x(0.5);
next.head.scale = Vec3::one();
next.chest.position = Vec3::new(0.0, skeleton_attr.chest.0, skeleton_attr.chest.1) / 18.0;
next.chest.orientation = Quaternion::rotation_y(0.0);
next.chest.scale = Vec3::one() / 18.0;
next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1);
next.feet_f.orientation = Quaternion::rotation_x(wave * 0.4);
next.feet_f.scale = Vec3::one();
next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1);
next.feet_b.orientation = Quaternion::rotation_x(wave * 0.4);
next.feet_b.scale = Vec3::one();
next.tail.position = Vec3::new(0.0, skeleton_attr.tail.0, skeleton_attr.tail.1);
next.tail.orientation = Quaternion::rotation_y(0.0);
next.tail.scale = Vec3::one();
next
}
}

View File

@ -1,136 +0,0 @@
pub mod idle;
pub mod jump;
pub mod run;
// Reexports
pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation};
use super::{make_bone, vek::*, FigureBoneData, Skeleton};
use common::comp::{self};
use core::convert::TryFrom;
pub type Body = comp::critter::Body;
skeleton_impls!(struct CritterSkeleton {
+ head,
+ chest,
+ feet_f,
+ feet_b,
+ tail,
});
pub struct CritterAttr {
head: (f32, f32),
chest: (f32, f32),
feet_f: (f32, f32),
feet_b: (f32, f32),
tail: (f32, f32),
}
impl Skeleton for CritterSkeleton {
type Attr = CritterAttr;
type Body = Body;
const BONE_COUNT: usize = 5;
#[cfg(feature = "use-dyn-lib")]
const COMPUTE_FN: &'static [u8] = b"critter_compute_mats\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "critter_compute_mats")]
fn compute_matrices_inner(
&self,
base_mat: Mat4<f32>,
buf: &mut [FigureBoneData; super::MAX_BONE_COUNT],
) -> Vec3<f32> {
let chest_mat = base_mat * Mat4::<f32>::from(self.chest);
*(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [
make_bone(chest_mat * Mat4::<f32>::from(self.head)),
make_bone(chest_mat),
make_bone(chest_mat * Mat4::<f32>::from(self.feet_f)),
make_bone(chest_mat * Mat4::<f32>::from(self.feet_b)),
make_bone(chest_mat * Mat4::<f32>::from(self.tail)),
];
Vec3::default()
}
}
impl<'a> std::convert::TryFrom<&'a comp::Body> for CritterAttr {
type Error = ();
fn try_from(body: &'a comp::Body) -> Result<Self, Self::Error> {
match body {
comp::Body::Critter(body) => Ok(CritterAttr::from(body)),
_ => Err(()),
}
}
}
impl CritterAttr {
#[allow(clippy::match_single_binding)] // TODO: Pending review in #587
pub fn calculate_scale(body: &comp::critter::Body) -> f32 {
match (body.species, body.body_type) {
(_, _) => 0.0,
}
}
}
impl Default for CritterAttr {
fn default() -> Self {
Self {
head: (0.0, 0.0),
chest: (0.0, 0.0),
feet_f: (0.0, 0.0),
feet_b: (0.0, 0.0),
tail: (0.0, 0.0),
}
}
}
impl<'a> From<&'a Body> for CritterAttr {
fn from(body: &'a Body) -> Self {
use comp::critter::Species::*;
Self {
head: match (body.species, body.body_type) {
(Rat, _) => (6.5, 3.0),
(Axolotl, _) => (5.0, 1.0),
(Gecko, _) => (5.0, 0.0),
(Turtle, _) => (8.0, 3.0),
(Squirrel, _) => (5.0, 0.0),
(Fungome, _) => (4.0, 0.0),
},
chest: match (body.species, body.body_type) {
(Rat, _) => (0.0, 6.0),
(Axolotl, _) => (-1.0, 3.0),
(Gecko, _) => (-2.0, 3.0),
(Turtle, _) => (0.0, 6.0),
(Squirrel, _) => (0.0, 3.0),
(Fungome, _) => (0.0, 5.0),
},
feet_f: match (body.species, body.body_type) {
(Rat, _) => (2.0, -5.0),
(Axolotl, _) => (2.0, -5.0),
(Gecko, _) => (1.0, -2.0),
(Turtle, _) => (3.0, -5.0),
(Squirrel, _) => (1.0, -2.0),
(Fungome, _) => (1.0, -4.0),
},
feet_b: match (body.species, body.body_type) {
(Rat, _) => (-2.0, -5.0),
(Axolotl, _) => (-2.0, -5.0),
(Gecko, _) => (-2.0, -2.0),
(Turtle, _) => (-2.0, -5.0),
(Squirrel, _) => (-1.0, -2.0),
(Fungome, _) => (-2.0, -4.0),
},
tail: match (body.species, body.body_type) {
(Rat, _) => (-8.0, -1.0),
(Axolotl, _) => (-7.0, -1.0),
(Gecko, _) => (-6.5, -2.0),
(Turtle, _) => (-6.0, 0.0),
(Squirrel, _) => (-3.0, 0.0),
(Fungome, _) => (-6.0, -1.0),
},
}
}
}

View File

@ -1,59 +0,0 @@
use super::{super::Animation, CritterAttr, CritterSkeleton};
//use std::{f32::consts::PI, ops::Mul};
use super::super::vek::*;
use std::f32::consts::PI;
pub struct RunAnimation;
impl Animation for RunAnimation {
type Dependency = (f32, f64);
type Skeleton = CritterSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"critter_run\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "critter_run")]
fn update_skeleton_inner(
skeleton: &Self::Skeleton,
(_velocity, _global_time): Self::Dependency,
anim_time: f64,
_rate: &mut f32,
skeleton_attr: &CritterAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
let wave = (anim_time as f32 * 8.0).sin();
let wavealt = (anim_time as f32 * 8.0 + PI / 2.0).sin();
let wave_slow = (anim_time as f32 * 6.5 + PI).sin();
next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1);
next.head.orientation =
Quaternion::rotation_z(0.0) * Quaternion::rotation_x(0.0 + wave * 0.03);
next.head.scale = Vec3::one();
next.chest.position = Vec3::new(
0.0,
skeleton_attr.chest.0 + wave * 1.0,
skeleton_attr.chest.1,
) / 18.0;
next.chest.orientation = Quaternion::rotation_x(wave * 0.1);
next.chest.scale = Vec3::one() / 18.0;
next.feet_f.position = Vec3::new(0.0, skeleton_attr.feet_f.0, skeleton_attr.feet_f.1);
next.feet_f.orientation =
Quaternion::rotation_x(wave * 0.8) * Quaternion::rotation_z(wavealt / 6.0);
next.feet_f.scale = Vec3::one();
next.feet_b.position = Vec3::new(0.0, skeleton_attr.feet_b.0, skeleton_attr.feet_b.1);
next.feet_b.orientation =
Quaternion::rotation_x(wavealt * 0.8) * Quaternion::rotation_z(wavealt / 6.0);
next.feet_b.scale = Vec3::one();
next.tail.position =
Vec3::new(0.0, skeleton_attr.tail.0 + wave * 1.0, skeleton_attr.tail.1);
next.tail.orientation = Quaternion::rotation_y(wave_slow * 0.08);
next.tail.scale = Vec3::one();
next
}
}

View File

@ -43,7 +43,6 @@ pub mod biped_large;
pub mod bird_medium;
pub mod bird_small;
pub mod character;
pub mod critter;
pub mod dragon;
#[cfg(feature = "use-dyn-lib")] pub mod dyn_lib;
pub mod fish_medium;
@ -54,6 +53,7 @@ pub mod object;
pub mod quadruped_low;
pub mod quadruped_medium;
pub mod quadruped_small;
pub mod theropod;
pub mod vek;
#[cfg(feature = "use-dyn-lib")]

View File

@ -114,6 +114,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (4.0, 3.0),
(Truffler, _) => (7.5, -9.0),
(Frog, _) => (4.0, 2.0),
(Rat, _) => (6.0, -2.0),
(Axolotl, _) => (7.0, 1.0),
(Gecko, _) => (7.5, 2.0),
(Turtle, _) => (4.0, 3.0),
(Squirrel, _) => (7.5, -9.0),
(Fungome, _) => (4.0, 2.0),
},
chest: match (body.species, body.body_type) {
(Pig, _) => (0.0, 6.0),
@ -132,6 +138,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (-2.0, 6.0),
(Truffler, _) => (-2.0, 16.0),
(Frog, _) => (-2.0, 4.5),
(Rat, _) => (6.0, -2.0),
(Axolotl, _) => (7.0, 1.0),
(Gecko, _) => (7.5, 2.0),
(Turtle, _) => (4.0, 3.0),
(Squirrel, _) => (7.5, -9.0),
(Fungome, _) => (4.0, 2.0),
},
feet_f: match (body.species, body.body_type) {
(Pig, _) => (4.5, 3.5, -1.0),
@ -150,6 +162,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (3.0, 3.0, -3.0),
(Truffler, _) => (2.5, 5.0, -9.0),
(Frog, _) => (4.5, 6.5, 0.0),
(Rat, _) => (6.0, -2.0, 0.0),
(Axolotl, _) => (7.0, 1.0, 0.0),
(Gecko, _) => (7.5, 2.0, 0.0),
(Turtle, _) => (4.0, 3.0, 0.0),
(Squirrel, _) => (7.5, -9.0, 0.0),
(Fungome, _) => (4.0, 2.0, 0.0),
},
feet_b: match (body.species, body.body_type) {
(Pig, _) => (3.5, -2.0, 0.0),
@ -168,6 +186,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (3.5, -2.0, -1.0),
(Truffler, _) => (3.0, -5.0, -9.5),
(Frog, _) => (5.0, -3.5, 0.0),
(Rat, _) => (6.0, -2.0, 0.0),
(Axolotl, _) => (7.0, 1.0, 0.0),
(Gecko, _) => (7.5, 2.0, 0.0),
(Turtle, _) => (4.0, 3.0, 0.0),
(Squirrel, _) => (7.5, -9.0, 0.0),
(Fungome, _) => (4.0, 2.0, 0.0),
},
tail: match (body.species, body.body_type) {
(Pig, _) => (-4.5, 2.5),
@ -186,6 +210,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (-4.0, -0.0),
(Truffler, _) => (0.0, 0.0),
(Frog, _) => (0.0, -0.0),
(Rat, _) => (6.0, -2.0),
(Axolotl, _) => (7.0, 1.0),
(Gecko, _) => (7.5, 2.0),
(Turtle, _) => (4.0, 3.0),
(Squirrel, _) => (7.5, -9.0),
(Fungome, _) => (4.0, 2.0),
},
scaler: match (body.species, body.body_type) {
(Pig, _) => (0.9),
@ -204,6 +234,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (0.7),
(Truffler, _) => (1.0),
(Frog, _) => (0.7),
(Rat, _) => (6.0),
(Axolotl, _) => (7.0),
(Gecko, _) => (7.5),
(Turtle, _) => (4.0),
(Squirrel, _) => (7.5),
(Fungome, _) => (4.0),
},
tempo: match (body.species, body.body_type) {
(Pig, _) => (1.0),
@ -222,6 +258,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (1.15),
(Truffler, _) => (1.0),
(Frog, _) => (1.15),
(Rat, _) => (6.0),
(Axolotl, _) => (7.0),
(Gecko, _) => (7.5),
(Turtle, _) => (4.0),
(Squirrel, _) => (7.5),
(Fungome, _) => (4.0),
},
maximize: match (body.species, body.body_type) {
(Pig, _) => (1.0),
@ -240,6 +282,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (1.3),
(Truffler, _) => (1.0),
(Frog, _) => (1.3),
(Rat, _) => (0.1),
(Axolotl, _) => (0.1),
(Gecko, _) => (0.1),
(Turtle, _) => (0.1),
(Squirrel, _) => (0.1),
(Fungome, _) => (0.1),
},
minimize: match (body.species, body.body_type) {
(Pig, _) => (0.6),
@ -258,6 +306,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (0.8),
(Truffler, _) => (1.0),
(Frog, _) => (0.8),
(Rat, _) => (0.1),
(Axolotl, _) => (0.1),
(Gecko, _) => (0.1),
(Turtle, _) => (0.1),
(Squirrel, _) => (0.1),
(Fungome, _) => (0.1),
},
spring: match (body.species, body.body_type) {
(Pig, _) => (1.0),
@ -276,6 +330,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (2.5),
(Truffler, _) => (0.8),
(Frog, _) => (2.5),
(Rat, _) => (0.1),
(Axolotl, _) => (0.1),
(Gecko, _) => (0.1),
(Turtle, _) => (0.1),
(Squirrel, _) => (0.1),
(Fungome, _) => (0.1),
},
feed: match (body.species, body.body_type) {
(Pig, _) => (1.0),
@ -294,6 +354,12 @@ impl<'a> From<&'a Body> for SkeletonAttr {
(Rabbit, _) => (1.2),
(Truffler, _) => (0.6),
(Frog, _) => (0.7),
(Rat, _) => (0.1),
(Axolotl, _) => (0.1),
(Gecko, _) => (0.1),
(Turtle, _) => (0.1),
(Squirrel, _) => (0.1),
(Fungome, _) => (0.1),
},
}
}

View File

@ -0,0 +1,109 @@
use super::{super::Animation, SkeletonAttr, TheropodSkeleton};
//use std::{f32::consts::PI, ops::Mul};
use super::super::vek::*;
use std::{f32::consts::PI, ops::Mul};
pub struct IdleAnimation;
impl Animation for IdleAnimation {
type Dependency = f64;
type Skeleton = TheropodSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"theropod_idle\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_idle")]
fn update_skeleton_inner(
skeleton: &Self::Skeleton,
global_time: Self::Dependency,
anim_time: f64,
_rate: &mut f32,
skeleton_attr: &SkeletonAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1);
next.head.orientation = Quaternion::rotation_z(0.0);
next.head.scale = Vec3::one();
next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1);
next.jaw.orientation = Quaternion::rotation_z(0.0);
next.jaw.scale = Vec3::one();
next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1);
next.neck.orientation = Quaternion::rotation_z(0.0);
next.neck.scale = Vec3::one();
next.chest_front.position = Vec3::new(
0.0,
skeleton_attr.chest_front.0,
skeleton_attr.chest_front.1,
);
next.chest_front.orientation = Quaternion::rotation_z(0.0);
next.chest_front.scale = Vec3::one();
next.chest_back.position =
Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1);
next.chest_back.orientation = Quaternion::rotation_z(0.0);
next.chest_back.scale = Vec3::one();
next.tail_front.position =
Vec3::new(0.0, skeleton_attr.tail_front.0, skeleton_attr.tail_front.1);
next.tail_front.orientation = Quaternion::rotation_z(0.0);
next.tail_front.scale = Vec3::one();
next.tail_back.position =
Vec3::new(0.0, skeleton_attr.tail_back.0, skeleton_attr.tail_back.1);
next.tail_back.orientation = Quaternion::rotation_z(0.0);
next.tail_back.scale = Vec3::one();
next.hand_l.position = Vec3::new(
skeleton_attr.hand_l.0,
skeleton_attr.hand_l.0,
skeleton_attr.hand_l.1,
);
next.hand_l.orientation = Quaternion::rotation_z(0.0);
next.hand_l.scale = Vec3::one();
next.hand_r.position = Vec3::new(
skeleton_attr.hand_r.0,
skeleton_attr.hand_r.0,
skeleton_attr.hand_r.1,
);
next.hand_r.orientation = Quaternion::rotation_z(0.0);
next.hand_l.scale = Vec3::one();
next.leg_l.position = Vec3::new(
skeleton_attr.leg_l.0,
skeleton_attr.leg_l.0,
skeleton_attr.leg_l.1,
);
next.leg_l.orientation = Quaternion::rotation_z(0.0);
next.leg_l.scale = Vec3::one();
next.leg_r.position = Vec3::new(
skeleton_attr.leg_r.0,
skeleton_attr.leg_r.0,
skeleton_attr.leg_r.1,
);
next.leg_r.orientation = Quaternion::rotation_z(0.0);
next.leg_r.scale = Vec3::one();
next.foot_l.position = Vec3::new(
skeleton_attr.foot_l.0,
skeleton_attr.foot_l.0,
skeleton_attr.foot_l.1,
);
next.foot_l.orientation = Quaternion::rotation_z(0.0);
next.foot_l.scale = Vec3::one();
next.foot_r.position = Vec3::new(
skeleton_attr.foot_r.0,
skeleton_attr.foot_r.0,
skeleton_attr.foot_r.1,
);
next.foot_r.orientation = Quaternion::rotation_z(0.0);
next.foot_r.scale = Vec3::one();
next
}
}

View File

@ -0,0 +1,111 @@
use super::{super::Animation, SkeletonAttr, TheropodSkeleton};
//use std::f32::consts::PI;
use super::super::vek::*;
pub struct JumpAnimation;
impl Animation for JumpAnimation {
type Dependency = (f32, f64);
type Skeleton = TheropodSkeleton;
#[cfg(feature = "use-dyn-lib")]
const UPDATE_FN: &'static [u8] = b"theropod_jump\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_jump")]
fn update_skeleton_inner(
skeleton: &Self::Skeleton,
_global_time: Self::Dependency,
_anim_time: f64,
_rate: &mut f32,
skeleton_attr: &SkeletonAttr,
) -> Self::Skeleton {
let mut next = (*skeleton).clone();
let wave = (_anim_time as f32 * 1.0).sin();
next.head.position = Vec3::new(0.0, skeleton_attr.head.0, skeleton_attr.head.1);
next.head.orientation = Quaternion::rotation_z(0.0);
next.head.scale = Vec3::one();
next.jaw.position = Vec3::new(0.0, skeleton_attr.jaw.0, skeleton_attr.jaw.1);
next.jaw.orientation = Quaternion::rotation_z(0.0);
next.jaw.scale = Vec3::one();
next.neck.position = Vec3::new(0.0, skeleton_attr.neck.0, skeleton_attr.neck.1);
next.neck.orientation = Quaternion::rotation_z(0.0);
next.neck.scale = Vec3::one();
next.chest_front.position = Vec3::new(
0.0,
skeleton_attr.chest_front.0,
skeleton_attr.chest_front.1,
);
next.chest_front.orientation = Quaternion::rotation_z(0.0);
next.chest_front.scale = Vec3::one();
next.chest_back.position =
Vec3::new(0.0, skeleton_attr.chest_back.0, skeleton_attr.chest_back.1);
next.chest_back.orientation = Quaternion::rotation_z(0.0);
next.chest_back.scale = Vec3::one();
next.tail_front.position =
Vec3::new(0.0, skeleton_attr.tail_front.0, skeleton_attr.tail_front.1);
next.tail_front.orientation = Quaternion::rotation_z(0.0);
next.tail_front.scale = Vec3::one();
next.tail_back.position =
Vec3::new(0.0, skeleton_attr.tail_back.0, skeleton_attr.tail_back.1);
next.tail_back.orientation = Quaternion::rotation_z(0.0);
next.tail_back.scale = Vec3::one();
next.hand_l.position = Vec3::new(
skeleton_attr.hand_l.0,
skeleton_attr.hand_l.0,
skeleton_attr.hand_l.1,
);
next.hand_l.orientation = Quaternion::rotation_z(0.0);
next.hand_l.scale = Vec3::one();
next.hand_r.position = Vec3::new(
skeleton_attr.hand_r.0,
skeleton_attr.hand_r.0,
skeleton_attr.hand_r.1,
);
next.hand_r.orientation = Quaternion::rotation_z(0.0);
next.hand_l.scale = Vec3::one();
next.leg_l.position = Vec3::new(
skeleton_attr.leg_l.0,
skeleton_attr.leg_l.0,
skeleton_attr.leg_l.1,
);
next.leg_l.orientation = Quaternion::rotation_z(0.0);
next.leg_l.scale = Vec3::one();
next.leg_r.position = Vec3::new(
skeleton_attr.leg_r.0,
skeleton_attr.leg_r.0,
skeleton_attr.leg_r.1,
);
next.leg_r.orientation = Quaternion::rotation_z(0.0);
next.leg_r.scale = Vec3::one();
next.foot_l.position = Vec3::new(
skeleton_attr.foot_l.0,
skeleton_attr.foot_l.0,
skeleton_attr.foot_l.1,
);
next.foot_l.orientation = Quaternion::rotation_z(0.0);
next.foot_l.scale = Vec3::one();
next.foot_r.position = Vec3::new(
skeleton_attr.foot_r.0,
skeleton_attr.foot_r.0,
skeleton_attr.foot_r.1,
);
next.foot_r.orientation = Quaternion::rotation_z(0.0);
next.foot_r.scale = Vec3::one();
next
}
}

View File

@ -0,0 +1,177 @@
pub mod idle;
pub mod jump;
pub mod run;
// Reexports
pub use self::{idle::IdleAnimation, jump::JumpAnimation, run::RunAnimation};
use super::{make_bone, vek::*, FigureBoneData, Skeleton};
use common::comp::{self};
use core::convert::TryFrom;
pub type Body = comp::theropod::Body;
skeleton_impls!(struct TheropodSkeleton {
+ head,
+ jaw,
+ neck,
+ chest_front,
+ chest_back,
+ tail_front,
+ tail_back,
+ hand_l,
+ hand_r,
+ leg_l,
+ leg_r,
+ foot_l,
+ foot_r,
});
impl Skeleton for TheropodSkeleton {
type Attr = SkeletonAttr;
type Body = Body;
const BONE_COUNT: usize = 13;
#[cfg(feature = "use-dyn-lib")]
const COMPUTE_FN: &'static [u8] = b"theropod_compute_mats\0";
#[cfg_attr(feature = "be-dyn-lib", export_name = "theropod_compute_mats")]
fn compute_matrices_inner(
&self,
base_mat: Mat4<f32>,
buf: &mut [FigureBoneData; super::MAX_BONE_COUNT],
) -> Vec3<f32> {
let chest_front_mat = base_mat * Mat4::<f32>::from(self.chest_front);
let neck_mat = chest_front_mat * Mat4::<f32>::from(self.neck);
let head_mat = neck_mat * Mat4::<f32>::from(self.head);
let chest_back_mat = chest_front_mat * Mat4::<f32>::from(self.chest_back);
let tail_front_mat = chest_back_mat * Mat4::<f32>::from(self.tail_front);
let leg_l_mat = chest_front_mat * Mat4::<f32>::from(self.leg_l);
let leg_r_mat = chest_front_mat * Mat4::<f32>::from(self.leg_r);
*(<&mut [_; Self::BONE_COUNT]>::try_from(&mut buf[0..Self::BONE_COUNT]).unwrap()) = [
make_bone(head_mat),
make_bone(head_mat * Mat4::<f32>::from(self.jaw)),
make_bone(neck_mat),
make_bone(chest_front_mat),
make_bone(chest_back_mat),
make_bone(tail_front_mat),
make_bone(tail_front_mat * Mat4::<f32>::from(self.tail_back)),
make_bone(chest_front_mat * Mat4::<f32>::from(self.hand_l)),
make_bone(chest_front_mat * Mat4::<f32>::from(self.hand_r)),
make_bone(leg_l_mat),
make_bone(leg_r_mat),
make_bone(leg_l_mat * Mat4::<f32>::from(self.foot_l)),
make_bone(leg_r_mat * Mat4::<f32>::from(self.foot_r)),
];
Vec3::default()
}
}
pub struct SkeletonAttr {
head: (f32, f32),
neck: (f32, f32),
jaw: (f32, f32),
chest_front: (f32, f32),
chest_back: (f32, f32),
tail_front: (f32, f32),
tail_back: (f32, f32),
hand_l: (f32, f32, f32),
hand_r: (f32, f32, f32),
leg_l: (f32, f32, f32),
leg_r: (f32, f32, f32),
foot_l: (f32, f32, f32),
foot_r: (f32, f32, f32),
}
impl<'a> std::convert::TryFrom<&'a comp::Body> for SkeletonAttr {
type Error = ();
fn try_from(body: &'a comp::Body) -> Result<Self, Self::Error> {
match body {
comp::Body::Theropod(body) => Ok(SkeletonAttr::from(body)),
_ => Err(()),
}
}
}
impl Default for SkeletonAttr {
fn default() -> Self {
Self {
head: (0.0, 0.0),
neck: (0.0, 0.0),
jaw: (0.0, 0.0),
chest_front: (0.0, 0.0),
chest_back: (0.0, 0.0),
tail_front: (0.0, 0.0),
tail_back: (0.0, 0.0),
hand_l: (0.0, 0.0, 0.0),
hand_r: (0.0, 0.0, 0.0),
leg_l: (0.0, 0.0, 0.0),
leg_r: (0.0, 0.0, 0.0),
foot_l: (0.0, 0.0, 0.0),
foot_r: (0.0, 0.0, 0.0),
}
}
}
impl<'a> From<&'a Body> for SkeletonAttr {
fn from(body: &'a Body) -> Self {
use comp::theropod::Species::*;
Self {
head: match (body.species, body.body_type) {
(Archaeos, _) => (6.5, 3.0),
(Odontotyrannos, _) => (5.0, 1.0),
},
jaw: match (body.species, body.body_type) {
(Archaeos, _) => (0.0, 6.0),
(Odontotyrannos, _) => (-1.0, 3.0),
},
neck: match (body.species, body.body_type) {
(Archaeos, _) => (0.0, 6.0),
(Odontotyrannos, _) => (-1.0, 3.0),
},
chest_front: match (body.species, body.body_type) {
(Archaeos, _) => (0.0, 6.0),
(Odontotyrannos, _) => (-1.0, 3.0),
},
chest_back: match (body.species, body.body_type) {
(Archaeos, _) => (0.0, 6.0),
(Odontotyrannos, _) => (-1.0, 3.0),
},
tail_front: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -1.0),
(Odontotyrannos, _) => (-7.0, -1.0),
},
tail_back: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -1.0),
(Odontotyrannos, _) => (-7.0, -1.0),
},
hand_l: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -1.0, 0.0),
(Odontotyrannos, _) => (-7.0, -1.0, 0.0),
},
hand_r: match (body.species, body.body_type) {
(Archaeos, _) => (8.0, -1.0, 0.0),
(Odontotyrannos, _) => (7.0, -1.0, 0.0),
},
leg_l: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -1.0, 0.0),
(Odontotyrannos, _) => (-7.0, -1.0, 0.0),
},
leg_r: match (body.species, body.body_type) {
(Archaeos, _) => (8.0, -1.0, 0.0),
(Odontotyrannos, _) => (7.0, -1.0, 0.0),
},
foot_l: match (body.species, body.body_type) {
(Archaeos, _) => (-8.0, -1.0, 0.0),
(Odontotyrannos, _) => (-7.0, -1.0, 0.0),
},
foot_r: match (body.species, body.body_type) {
(Archaeos, _) => (8.0, -1.0, 0.0),
(Odontotyrannos, _) => (7.0, -1.0, 0.0),
},
}
}
}

Some files were not shown because too many files have changed in this diff Show More