the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 635 lines 18 kB view raw
1#include "stdafx.h" 2#include "..\Minecraft.World\Mth.h" 3#include "..\Minecraft.World\net.minecraft.world.entity.animal.h" 4#include "ModelHorse.h" 5#include "ModelPart.h" 6 7ModelHorse::ModelHorse() 8{ 9 texWidth = 128; 10 texHeight = 128; 11 12 // TODO: All rotation magic numbers in this method 13 Body = new ModelPart(this, 0, 34); 14 Body->addBox(-5.f, -8.f, -19.f, 10, 10, 24); 15 Body->setPos(0.f, 11.f, 9.f); 16 17 TailA = new ModelPart(this, 44, 0); 18 TailA->addBox(-1.f, -1.f, 0.f, 2, 2, 3); 19 TailA->setPos(0.f, 3.f, 14.f); 20 setRotation(TailA, -1.134464f, 0.f, 0.f); 21 22 TailB = new ModelPart(this, 38, 7); 23 TailB->addBox(-1.5f, -2.f, 3.f, 3, 4, 7); 24 TailB->setPos(0.f, 3.f, 14.f); 25 setRotation(TailB, -1.134464f, 0.f, 0.f); 26 27 TailC = new ModelPart(this, 24, 3); 28 TailC->addBox(-1.5f, -4.5f, 9.f, 3, 4, 7); 29 TailC->setPos(0.f, 3.f, 14.f); 30 setRotation(TailC, -1.40215f, 0.f, 0.f); 31 32 Leg1A = new ModelPart(this, 78, 29); 33 Leg1A->addBox(-2.5f, -2.f, -2.5f, 4, 9, 5); 34 Leg1A->setPos(4.f, 9.f, 11.f); 35 36 Leg1B = new ModelPart(this, 78, 43); 37 Leg1B->addBox(-2.f, 0.f, -1.5f, 3, 5, 3); 38 Leg1B->setPos(4.f, 16.f, 11.f); 39 40 Leg1C = new ModelPart(this, 78, 51); 41 Leg1C->addBox(-2.5f, 5.1f, -2.f, 4, 3, 4); 42 Leg1C->setPos(4.f, 16.f, 11.f); 43 44 Leg2A = new ModelPart(this, 96, 29); 45 Leg2A->addBox(-1.5f, -2.f, -2.5f, 4, 9, 5); 46 Leg2A->setPos(-4.f, 9.f, 11.f); 47 48 Leg2B = new ModelPart(this, 96, 43); 49 Leg2B->addBox(-1.f, 0.f, -1.5f, 3, 5, 3); 50 Leg2B->setPos(-4.f, 16.f, 11.f); 51 52 Leg2C = new ModelPart(this, 96, 51); 53 Leg2C->addBox(-1.5f, 5.1f, -2.f, 4, 3, 4); 54 Leg2C->setPos(-4.f, 16.f, 11.f); 55 56 Leg3A = new ModelPart(this, 44, 29); 57 Leg3A->addBox(-1.9f, -1.f, -2.1f, 3, 8, 4); 58 Leg3A->setPos(4.f, 9.f, -8.f); 59 60 Leg3B = new ModelPart(this, 44, 41); 61 Leg3B->addBox(-1.9f, 0.f, -1.6f, 3, 5, 3); 62 Leg3B->setPos(4.f, 16.f, -8.f); 63 64 Leg3C = new ModelPart(this, 44, 51); 65 Leg3C->addBox(-2.4f, 5.1f, -2.1f, 4, 3, 4); 66 Leg3C->setPos(4.f, 16.f, -8.f); 67 68 Leg4A = new ModelPart(this, 60, 29); 69 Leg4A->addBox(-1.1f, -1.f, -2.1f, 3, 8, 4); 70 Leg4A->setPos(-4.f, 9.f, -8.f); 71 72 Leg4B = new ModelPart(this, 60, 41); 73 Leg4B->addBox(-1.1f, 0.f, -1.6f, 3, 5, 3); 74 Leg4B->setPos(-4.f, 16.f, -8.f); 75 76 Leg4C = new ModelPart(this, 60, 51); 77 Leg4C->addBox(-1.6f, 5.1f, -2.1f, 4, 3, 4); 78 Leg4C->setPos(-4.f, 16.f, -8.f); 79 80 Head = new ModelPart(this, 0, 0); 81 Head->addBox(-2.5f, -10.f, -1.5f, 5, 5, 7); 82 Head->setPos(0.f, 4.f, -10.f); 83 setRotation(Head, 0.5235988f, 0.f, 0.f); 84 85 UMouth = new ModelPart(this, 24, 18); 86 UMouth->addBox(-2.f, -10.f, -7.f, 4, 3, 6); 87 UMouth->setPos(0.f, 3.95f, -10.f); 88 setRotation(UMouth, 0.5235988f, 0.f, 0.f); 89 90 LMouth = new ModelPart(this, 24, 27); 91 LMouth->addBox(-2.f, -7.f, -6.5f, 4, 2, 5); 92 LMouth->setPos(0.f, 4.f, -10.f); 93 setRotation(LMouth, 0.5235988f, 0.f, 0.f); 94 95 Head->addChild(UMouth); 96 Head->addChild(LMouth); 97 98 Ear1 = new ModelPart(this, 0, 0); 99 Ear1->addBox(0.45f, -12.f, 4.f, 2, 3, 1); 100 Ear1->setPos(0.f, 4.f, -10.f); 101 setRotation(Ear1, 0.5235988f, 0.f, 0.f); 102 103 Ear2 = new ModelPart(this, 0, 0); 104 Ear2->addBox(-2.45f, -12.f, 4.f, 2, 3, 1); 105 Ear2->setPos(0.f, 4.f, -10.f); 106 setRotation(Ear2, 0.5235988f, 0.f, 0.f); 107 108 MuleEarL = new ModelPart(this, 0, 12); 109 MuleEarL->addBox(-2.f, -16.f, 4.f, 2, 7, 1); 110 MuleEarL->setPos(0.f, 4.f, -10.f); 111 setRotation(MuleEarL, 0.5235988f, 0.f, 0.2617994f); 112 113 MuleEarR = new ModelPart(this, 0, 12); 114 MuleEarR->addBox(0.f, -16.f, 4.f, 2, 7, 1); 115 MuleEarR->setPos(0.f, 4.f, -10.f); 116 setRotation(MuleEarR, 0.5235988f, 0.f, -0.2617994f); 117 118 Neck = new ModelPart(this, 0, 12); 119 Neck->addBox(-2.05f, -9.8f, -2.f, 4, 14, 8); 120 Neck->setPos(0.f, 4.f, -10.f); 121 setRotation(Neck, 0.5235988f, 0.f, 0.f); 122 123 Bag1 = new ModelPart(this, 0, 34); 124 Bag1->addBox(-3.f, 0.f, 0.f, 8, 8, 3); 125 Bag1->setPos(-7.5f, 3.f, 10.f); 126 setRotation(Bag1, 0.f, 1.570796f, 0.f); 127 128 Bag2 = new ModelPart(this, 0, 47); 129 Bag2->addBox(-3.f, 0.f, 0.f, 8, 8, 3); 130 Bag2->setPos(4.5f, 3.f, 10.f); 131 setRotation(Bag2, 0.f, 1.570796f, 0.f); 132 133 Saddle = new ModelPart(this, 80, 0); 134 Saddle->addBox(-5.f, 0.f, -3.f, 10, 1, 8); 135 Saddle->setPos(0.f, 2.f, 2.f); 136 137 SaddleB = new ModelPart(this, 106, 9); 138 SaddleB->addBox(-1.5f, -1.f, -3.f, 3, 1, 2); 139 SaddleB->setPos(0.f, 2.f, 2.f); 140 141 SaddleC = new ModelPart(this, 80, 9); 142 SaddleC->addBox(-4.f, -1.f, 3.f, 8, 1, 2); 143 SaddleC->setPos(0.f, 2.f, 2.f); 144 145 SaddleL2 = new ModelPart(this, 74, 0); 146 SaddleL2->addBox(-0.5f, 6.f, -1.f, 1, 2, 2); 147 SaddleL2->setPos(5.f, 3.f, 2.f); 148 149 SaddleL = new ModelPart(this, 70, 0); 150 SaddleL->addBox(-0.5f, 0.f, -0.5f, 1, 6, 1); 151 SaddleL->setPos(5.f, 3.f, 2.f); 152 153 SaddleR2 = new ModelPart(this, 74, 4); 154 SaddleR2->addBox(-0.5f, 6.f, -1.f, 1, 2, 2); 155 SaddleR2->setPos(-5.f, 3.f, 2.f); 156 157 SaddleR = new ModelPart(this, 80, 0); 158 SaddleR->addBox(-0.5f, 0.f, -0.5f, 1, 6, 1); 159 SaddleR->setPos(-5.f, 3.f, 2.f); 160 161 SaddleMouthL = new ModelPart(this, 74, 13); 162 SaddleMouthL->addBox(1.5f, -8.f, -4.f, 1, 2, 2); 163 SaddleMouthL->setPos(0.f, 4.f, -10.f); 164 setRotation(SaddleMouthL, 0.5235988f, 0.f, 0.f); 165 166 SaddleMouthR = new ModelPart(this, 74, 13); 167 SaddleMouthR->addBox(-2.5f, -8.f, -4.f, 1, 2, 2); 168 SaddleMouthR->setPos(0.f, 4.f, -10.f); 169 setRotation(SaddleMouthR, 0.5235988f, 0.f, 0.f); 170 171 SaddleMouthLine = new ModelPart(this, 44, 10); 172 SaddleMouthLine->addBox(2.6f, -6.f, -6.f, 0, 3, 16); 173 SaddleMouthLine->setPos(0.f, 4.f, -10.f); 174 175 SaddleMouthLineR = new ModelPart(this, 44, 5); 176 SaddleMouthLineR->addBox(-2.6f, -6.f, -6.f, 0, 3, 16); 177 SaddleMouthLineR->setPos(0.f, 4.f, -10.f); 178 179 Mane = new ModelPart(this, 58, 0); 180 Mane->addBox(-1.f, -11.5f, 5.f, 2, 16, 4); 181 Mane->setPos(0.f, 4.f, -10.f); 182 setRotation(Mane, 0.5235988f, 0.f, 0.f); 183 184 HeadSaddle = new ModelPart(this, 80, 12); 185 HeadSaddle->addBox(-2.5f, -10.1f, -7.f, 5, 5, 12, 0.2f); 186 HeadSaddle->setPos(0.f, 4.f, -10.f); 187 setRotation(HeadSaddle, 0.5235988f, 0.f, 0.f); 188 189 // 4J added - compile now to avoid random performance hit first time cubes are rendered 190 Head->compile(1.0f/16.0f);; 191 UMouth->compile(1.0f/16.0f);; 192 LMouth->compile(1.0f/16.0f);; 193 Ear1->compile(1.0f/16.0f);; 194 Ear2->compile(1.0f/16.0f);; 195 MuleEarL->compile(1.0f/16.0f);; 196 MuleEarR->compile(1.0f/16.0f);; 197 Neck->compile(1.0f/16.0f);; 198 HeadSaddle->compile(1.0f/16.0f);; 199 Mane->compile(1.0f/16.0f);; 200 201 Body->compile(1.0f/16.0f);; 202 TailA->compile(1.0f/16.0f);; 203 TailB->compile(1.0f/16.0f);; 204 TailC->compile(1.0f/16.0f);; 205 206 Leg1A->compile(1.0f/16.0f);; 207 Leg1B->compile(1.0f/16.0f);; 208 Leg1C->compile(1.0f/16.0f);; 209 210 Leg2A->compile(1.0f/16.0f);; 211 Leg2B->compile(1.0f/16.0f);; 212 Leg2C->compile(1.0f/16.0f);; 213 214 Leg3A->compile(1.0f/16.0f);; 215 Leg3B->compile(1.0f/16.0f);; 216 Leg3C->compile(1.0f/16.0f);; 217 218 Leg4A->compile(1.0f/16.0f);; 219 Leg4B->compile(1.0f/16.0f);; 220 Leg4C->compile(1.0f/16.0f);; 221 222 Bag1->compile(1.0f/16.0f);; 223 Bag2->compile(1.0f/16.0f);; 224 225 Saddle->compile(1.0f/16.0f);; 226 SaddleB->compile(1.0f/16.0f);; 227 SaddleC->compile(1.0f/16.0f);; 228 229 SaddleL->compile(1.0f/16.0f);; 230 SaddleL2->compile(1.0f/16.0f);; 231 232 SaddleR->compile(1.0f/16.0f);; 233 SaddleR2->compile(1.0f/16.0f);; 234 235 SaddleMouthL->compile(1.0f/16.0f);; 236 SaddleMouthR->compile(1.0f/16.0f);; 237 238 SaddleMouthLine->compile(1.0f/16.0f);; 239 SaddleMouthLineR->compile(1.0f/16.0f);; 240} 241 242 243void ModelHorse::render(shared_ptr<Entity> entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled) 244{ 245 shared_ptr<EntityHorse> entityhorse = dynamic_pointer_cast<EntityHorse>(entity); 246 247 int type = entityhorse->getType(); 248 float eating = entityhorse->getEatAnim(0); 249 bool adult = (entityhorse->isAdult()); 250 bool saddled = adult && entityhorse->isSaddled(); 251 bool chested = adult && entityhorse->isChestedHorse(); 252 bool largeEars = type == EntityHorse::TYPE_DONKEY || type == EntityHorse::TYPE_MULE; 253 float sizeFactor = entityhorse->getFoalScale(); 254 255 bool rider = (entityhorse->rider.lock() != NULL); 256 257 if (saddled) 258 { 259 HeadSaddle->render(scale, usecompiled); 260 Saddle->render(scale, usecompiled); 261 SaddleB->render(scale, usecompiled); 262 SaddleC->render(scale, usecompiled); 263 SaddleL->render(scale, usecompiled); 264 SaddleL2->render(scale, usecompiled); 265 SaddleR->render(scale, usecompiled); 266 SaddleR2->render(scale, usecompiled); 267 SaddleMouthL->render(scale, usecompiled); 268 SaddleMouthR->render(scale, usecompiled); 269 270 if (rider) 271 { 272 SaddleMouthLine->render(scale, usecompiled); 273 SaddleMouthLineR->render(scale, usecompiled); 274 } 275 } 276 277 // render legs 278 if (!adult) 279 { 280 glPushMatrix(); 281 glScalef(sizeFactor, .5f + sizeFactor * .5f, sizeFactor); 282 glTranslatef(0, .95f * (1.0f - sizeFactor), 0); 283 } 284 Leg1A->render(scale, usecompiled); 285 Leg1B->render(scale, usecompiled); 286 Leg1C->render(scale, usecompiled); 287 288 Leg2A->render(scale, usecompiled); 289 Leg2B->render(scale, usecompiled); 290 Leg2C->render(scale, usecompiled); 291 292 Leg3A->render(scale, usecompiled); 293 Leg3B->render(scale, usecompiled); 294 Leg3C->render(scale, usecompiled); 295 296 Leg4A->render(scale, usecompiled); 297 Leg4B->render(scale, usecompiled); 298 Leg4C->render(scale, usecompiled); 299 if (!adult) 300 { 301 glPopMatrix(); 302 303 glPushMatrix(); 304 glScalef(sizeFactor, sizeFactor, sizeFactor); 305 glTranslatef(0, 1.35f * (1.0f - sizeFactor), 0); 306 } 307 // render body 308 Body->render(scale, usecompiled); 309 TailA->render(scale, usecompiled); 310 TailB->render(scale, usecompiled); 311 TailC->render(scale, usecompiled); 312 Neck->render(scale, usecompiled); 313 Mane->render(scale, usecompiled); 314 if (!adult) 315 { 316 glPopMatrix(); 317 318 glPushMatrix(); 319 float headScale = .5f + (sizeFactor * sizeFactor) * .5f; 320 glScalef(headScale, headScale, headScale); 321 if (eating <= 0) 322 { 323 glTranslatef(0, 1.35f * (1.0f - sizeFactor), 0); 324 } 325 else 326 { 327 glTranslatef(0, .9f * (1.0f - sizeFactor) * eating + (1.35f * (1.0f - sizeFactor)) * (1.0f - eating), .15f * (1.0f - sizeFactor) * eating); 328 } 329 } 330 // render head 331 if (largeEars) 332 { 333 MuleEarL->render(scale, usecompiled); 334 MuleEarR->render(scale, usecompiled); 335 } 336 else 337 { 338 Ear1->render(scale, usecompiled); 339 Ear2->render(scale, usecompiled); 340 } 341 Head->render(scale, usecompiled); 342 if (!adult) 343 { 344 glPopMatrix(); 345 } 346 if (chested) 347 { 348 Bag1->render(scale, usecompiled); 349 Bag2->render(scale, usecompiled); 350 } 351} 352 353void ModelHorse::setRotation(ModelPart *model, float x, float y, float z) 354{ 355 model->xRot = x; 356 model->yRot = y; 357 model->zRot = z; 358} 359 360float ModelHorse::rotlerp(float from, float to, float a) 361{ 362 float diff = to - from; 363 while (diff < -180) 364 diff += 360; 365 while (diff >= 180) 366 diff -= 360; 367 return from + a * diff; 368} 369 370void ModelHorse::prepareMobModel(shared_ptr<LivingEntity> mob, float wp, float ws, float a) 371{ 372 Model::prepareMobModel(mob, wp, ws, a); 373 374 float bodyRot = rotlerp(mob->yBodyRotO, mob->yBodyRot, a); 375 float headRot = rotlerp(mob->yHeadRotO, mob->yHeadRot, a); 376 float headRotx = (mob->xRotO + (mob->xRot - mob->xRotO) * a); 377 float headRotMinusBodyRot = headRot - bodyRot; 378 379 // TODO: Magic numbers 380 float HeadXRot = (headRotx / 57.29578f); 381 if (headRotMinusBodyRot > 20.f) { 382 headRotMinusBodyRot = 20.f; 383 } 384 if (headRotMinusBodyRot < -20.f) { 385 headRotMinusBodyRot = -20.f; 386 } 387 388 /** 389 * f = distance walked f1 = speed 0 - 1 f2 = timer 390 */ 391 if (ws > 0.2f) 392 { 393 HeadXRot = HeadXRot + (cos(wp * 0.4f) * 0.15f * ws); 394 } 395 396 shared_ptr<EntityHorse> entityhorse = dynamic_pointer_cast<EntityHorse>(mob); 397 398 float eating = entityhorse->getEatAnim(a); 399 float standing = entityhorse->getStandAnim(a); 400 float iStanding = 1.0f - standing; 401 float openMouth = entityhorse->getMouthAnim(a); 402 bool tail = entityhorse->tailCounter != 0; 403 bool saddled = entityhorse->isSaddled(); 404 bool rider = entityhorse->rider.lock() != NULL; 405 float bob = mob->tickCount + a; 406 407 float legAnim1 = cos((wp * 0.6662f) + 3.141593f); 408 float legXRotAnim = legAnim1 * 0.8f * ws; 409 410 Head->y = 4.0f; 411 Head->z = -10.f; 412 TailA->y = 3.f; 413 TailB->z = 14.f; 414 Bag2->y = 3.f; 415 Bag2->z = 10.f; 416 Body->xRot = 0.f; 417 418 // TODO: Fix these magical numbers 419 Head->xRot = 0.5235988f + (HeadXRot); 420 Head->yRot = (headRotMinusBodyRot / 57.29578f);// fixes SMP bug 421 422 // interpolate positions and rotations based on current eating and standing animations 423 { 424 // TODO: Magic numbers 425 Head->xRot = standing * ((15 * Mth::DEGRAD) + (HeadXRot)) + eating * 2.18166f + (1.0f - max(standing, eating)) * Head->xRot; 426 Head->yRot = standing * (headRotMinusBodyRot / 57.29578f) + (1.0f - max(standing, eating)) * Head->yRot; 427 428 Head->y = standing * -6.f + eating * 11.0f + (1.0f - max(standing, eating)) * Head->y; 429 Head->z = standing * -1.f + eating * -10.f + (1.0f - max(standing, eating)) * Head->z; 430 431 TailA->y = standing * 9.f + iStanding * TailA->y; 432 TailB->z = standing * 18.f + iStanding * TailB->z; 433 Bag2->y = standing * 5.5f + iStanding * Bag2->y; 434 Bag2->z = standing * 15.f + iStanding * Bag2->z; 435 Body->xRot = standing * (-45 / 57.29578f) + iStanding * Body->xRot; 436 } 437 438 Ear1->y = Head->y; 439 Ear2->y = Head->y; 440 MuleEarL->y = Head->y; 441 MuleEarR->y = Head->y; 442 Neck->y = Head->y; 443 UMouth->y = 0 + .02f; 444 LMouth->y = 0; 445 Mane->y = Head->y; 446 447 Ear1->z = Head->z; 448 Ear2->z = Head->z; 449 MuleEarL->z = Head->z; 450 MuleEarR->z = Head->z; 451 Neck->z = Head->z; 452 UMouth->z = 0 + .02f - openMouth * 1; 453 LMouth->z = 0 + openMouth * 1; 454 Mane->z = Head->z; 455 456 Ear1->xRot = Head->xRot; 457 Ear2->xRot = Head->xRot; 458 MuleEarL->xRot = Head->xRot; 459 MuleEarR->xRot = Head->xRot; 460 Neck->xRot = Head->xRot; 461 UMouth->xRot = 0 - (PI * .03f) * openMouth; 462 LMouth->xRot = 0 + (PI * .05f) * openMouth; 463 464 Mane->xRot = Head->xRot; 465 466 Ear1->yRot = Head->yRot; 467 Ear2->yRot = Head->yRot; 468 MuleEarL->yRot = Head->yRot; 469 MuleEarR->yRot = Head->yRot; 470 Neck->yRot = Head->yRot; 471 UMouth->yRot = 0; 472 LMouth->yRot = 0; 473 Mane->yRot = Head->yRot; 474 475 // (if chested) 476 Bag1->xRot = legXRotAnim / 5.f; 477 Bag2->xRot = -legXRotAnim / 5.f; 478 479 /** 480 * knee joints Leg1 and Leg4 use LLegXRot Leg2 and Leg3 use RLegXRot 481 */ 482 { 483 float r90 = PI * .5f; 484 float r270 = PI * 1.5f; 485 float r300 = -60 * Mth::DEGRAD; 486 float standAngle = 15 * Mth::DEGRAD * standing; 487 float bobValue = Mth::cos((bob * 0.6f) + 3.141593f); 488 489 Leg3A->y = -2.f * standing + 9.f * iStanding; 490 Leg3A->z = -2.f * standing + -8.f * iStanding; 491 Leg4A->y = Leg3A->y; 492 Leg4A->z = Leg3A->z; 493 494 Leg1B->y = Leg1A->y + (Mth::sin(r90 + standAngle + iStanding * (-legAnim1 * 0.5f * ws)) * 7.f); 495 Leg1B->z = Leg1A->z + (Mth::cos(r270 + standAngle + iStanding * (-legAnim1 * 0.5f * ws)) * 7.f); 496 497 Leg2B->y = Leg2A->y + (Mth::sin(r90 + standAngle + iStanding * (legAnim1 * 0.5f * ws)) * 7.f); 498 Leg2B->z = Leg2A->z + (Mth::cos(r270 + standAngle + iStanding * (legAnim1 * 0.5f * ws)) * 7.f); 499 500 float rlegRot = (r300 + bobValue) * standing + legXRotAnim * iStanding; 501 float llegRot = (r300 + -bobValue) * standing + -legXRotAnim * iStanding; 502 Leg3B->y = Leg3A->y + (Mth::sin(r90 + rlegRot) * 7.f); 503 Leg3B->z = Leg3A->z + (Mth::cos(r270 + rlegRot) * 7.f); 504 505 Leg4B->y = Leg4A->y + (Mth::sin(r90 + llegRot) * 7.f); 506 Leg4B->z = Leg4A->z + (Mth::cos(r270 + llegRot) * 7.f); 507 508 Leg1A->xRot = standAngle + (-legAnim1 * 0.5f * ws) * iStanding; 509 Leg1B->xRot = (-5 * Mth::DEGRAD) * standing + ((-legAnim1 * 0.5f * ws) - max(0.0f, legAnim1 * .5f * ws)) * iStanding; 510 Leg1C->xRot = Leg1B->xRot; 511 512 Leg2A->xRot = standAngle + (legAnim1 * 0.5f * ws) * iStanding; 513 Leg2B->xRot = (-5 * Mth::DEGRAD) * standing + ((legAnim1 * 0.5f * ws) - max(0.0f, -legAnim1 * .5f * ws)) * iStanding; 514 Leg2C->xRot = Leg2B->xRot; 515 516 Leg3A->xRot = rlegRot; 517 Leg3B->xRot = (Leg3A->xRot + PI * max(0.0f, (.2f + bobValue * .2f))) * standing + (legXRotAnim + max(0.0f, legAnim1 * 0.5f * ws)) * iStanding; 518 Leg3C->xRot = Leg3B->xRot; 519 520 Leg4A->xRot = llegRot; 521 Leg4B->xRot = (Leg4A->xRot + PI * max(0.0f, (.2f - bobValue * .2f))) * standing + (-legXRotAnim + max(0.0f, -legAnim1 * 0.5f * ws)) * iStanding; 522 Leg4C->xRot = Leg4B->xRot; 523 } 524 525 Leg1C->y = Leg1B->y; 526 Leg1C->z = Leg1B->z; 527 Leg2C->y = Leg2B->y; 528 Leg2C->z = Leg2B->z; 529 Leg3C->y = Leg3B->y; 530 Leg3C->z = Leg3B->z; 531 Leg4C->y = Leg4B->y; 532 Leg4C->z = Leg4B->z; 533 534 if (saddled) 535 { 536 537 Saddle->y = standing * .5f + iStanding * 2.f; 538 Saddle->z = standing * 11.f + iStanding * 2.f; 539 540 SaddleB->y = Saddle->y; 541 SaddleC->y = Saddle->y; 542 SaddleL->y = Saddle->y; 543 SaddleR->y = Saddle->y; 544 SaddleL2->y = Saddle->y; 545 SaddleR2->y = Saddle->y; 546 Bag1->y = Bag2->y; 547 548 SaddleB->z = Saddle->z; 549 SaddleC->z = Saddle->z; 550 SaddleL->z = Saddle->z; 551 SaddleR->z = Saddle->z; 552 SaddleL2->z = Saddle->z; 553 SaddleR2->z = Saddle->z; 554 Bag1->z = Bag2->z; 555 556 Saddle->xRot = Body->xRot; 557 SaddleB->xRot = Body->xRot; 558 SaddleC->xRot = Body->xRot; 559 560 SaddleMouthLine->y = Head->y; 561 SaddleMouthLineR->y = Head->y; 562 HeadSaddle->y = Head->y; 563 SaddleMouthL->y = Head->y; 564 SaddleMouthR->y = Head->y; 565 566 SaddleMouthLine->z = Head->z; 567 SaddleMouthLineR->z = Head->z; 568 HeadSaddle->z = Head->z; 569 SaddleMouthL->z = Head->z; 570 SaddleMouthR->z = Head->z; 571 572 SaddleMouthLine->xRot = HeadXRot; 573 SaddleMouthLineR->xRot = HeadXRot; 574 HeadSaddle->xRot = Head->xRot; 575 SaddleMouthL->xRot = Head->xRot; 576 SaddleMouthR->xRot = Head->xRot; 577 HeadSaddle->yRot = Head->yRot; 578 SaddleMouthL->yRot = Head->yRot; 579 SaddleMouthLine->yRot = Head->yRot; 580 SaddleMouthR->yRot = Head->yRot; 581 SaddleMouthLineR->yRot = Head->yRot; 582 583 if (rider) { 584 // TODO: Magic number (smells like radians :D) 585 SaddleL->xRot = -60 / 57.29578f; 586 SaddleL2->xRot = -60 / 57.29578f; 587 SaddleR->xRot = -60 / 57.29578f; 588 SaddleR2->xRot = -60 / 57.29578f; 589 590 SaddleL->zRot = 0.f; 591 SaddleL2->zRot = 0.f; 592 SaddleR->zRot = 0.f; 593 SaddleR2->zRot = 0.f; 594 } else { 595 SaddleL->xRot = legXRotAnim / 3.f; 596 SaddleL2->xRot = legXRotAnim / 3.f; 597 SaddleR->xRot = legXRotAnim / 3.f; 598 SaddleR2->xRot = legXRotAnim / 3.f; 599 600 SaddleL->zRot = legXRotAnim / 5.f; 601 SaddleL2->zRot = legXRotAnim / 5.f; 602 SaddleR->zRot = -legXRotAnim / 5.f; 603 SaddleR2->zRot = -legXRotAnim / 5.f; 604 } 605 } 606 607 // TODO: Magic number 608 float tailMov = -1.3089f + (ws * 1.5f); 609 if (tailMov > 0) 610 { 611 tailMov = 0; 612 } 613 614 if (tail) 615 { 616 TailA->yRot = Mth::cos(bob * 0.7f); 617 tailMov = 0; 618 } 619 else 620 { 621 TailA->yRot = 0.f; 622 } 623 TailB->yRot = TailA->yRot; 624 TailC->yRot = TailA->yRot; 625 626 TailB->y = TailA->y; 627 TailC->y = TailA->y; 628 TailB->z = TailA->z; 629 TailC->z = TailA->z; 630 631 // TODO: Magic number 632 TailA->xRot = tailMov; 633 TailB->xRot = tailMov; 634 TailC->xRot = -0.2618f + tailMov; 635}