| 619 | void ParseModelDefLump(int Lump); |
| 620 | |
| 621 | void InitModels() |
| 622 | { |
| 623 | Models.DeleteAndClear(); |
| 624 | SpriteModelFrames.Clear(); |
| 625 | SpriteModelHash.Clear(); |
| 626 | |
| 627 | // First, create models for each voxel |
| 628 | for (unsigned i = 0; i < Voxels.Size(); i++) |
| 629 | { |
| 630 | FVoxelModel *md = new FVoxelModel(Voxels[i], false); |
| 631 | Voxels[i]->VoxelIndex = Models.Push(md); |
| 632 | } |
| 633 | // now create GL model frames for the voxeldefs |
| 634 | for (unsigned i = 0; i < VoxelDefs.Size(); i++) |
| 635 | { |
| 636 | FVoxelModel *md = (FVoxelModel*)Models[VoxelDefs[i]->Voxel->VoxelIndex]; |
| 637 | FSpriteModelFrame smf; |
| 638 | memset(&smf, 0, sizeof(smf)); |
| 639 | smf.isVoxel = true; |
| 640 | smf.modelsAmount = 1; |
| 641 | smf.modelframes.Alloc(1); |
| 642 | smf.modelframes[0] = -1; |
| 643 | smf.modelIDs.Alloc(1); |
| 644 | smf.modelIDs[0] = VoxelDefs[i]->Voxel->VoxelIndex; |
| 645 | smf.skinIDs.Alloc(1); |
| 646 | smf.skinIDs[0] = md->GetPaletteTexture(); |
| 647 | smf.animationIDs.Alloc(1); |
| 648 | smf.animationIDs[0] = -1; |
| 649 | smf.xscale = smf.yscale = smf.zscale = VoxelDefs[i]->Scale; |
| 650 | smf.angleoffset = VoxelDefs[i]->AngleOffset.Degrees(); |
| 651 | smf.xoffset = VoxelDefs[i]->xoffset; |
| 652 | smf.yoffset = VoxelDefs[i]->yoffset; |
| 653 | smf.zoffset = VoxelDefs[i]->zoffset; |
| 654 | // this helps catching uninitialized data. |
| 655 | assert(VoxelDefs[i]->PitchFromMomentum == true || VoxelDefs[i]->PitchFromMomentum == false); |
| 656 | if (VoxelDefs[i]->PitchFromMomentum) smf.flags |= MDL_PITCHFROMMOMENTUM; |
| 657 | if (VoxelDefs[i]->UseActorPitch) smf.flags |= MDL_USEACTORPITCH; |
| 658 | if (VoxelDefs[i]->UseActorRoll) smf.flags |= MDL_USEACTORROLL; |
| 659 | if (VoxelDefs[i]->PlacedSpin != 0) |
| 660 | { |
| 661 | smf.yrotate = 1.f; |
| 662 | smf.rotationSpeed = VoxelDefs[i]->PlacedSpin / 55.55f; |
| 663 | smf.flags |= MDL_ROTATING; |
| 664 | } |
| 665 | VoxelDefs[i]->VoxeldefIndex = SpriteModelFrames.Push(smf); |
| 666 | if (VoxelDefs[i]->PlacedSpin != VoxelDefs[i]->DroppedSpin) |
| 667 | { |
| 668 | if (VoxelDefs[i]->DroppedSpin != 0) |
| 669 | { |
| 670 | smf.yrotate = 1.f; |
| 671 | smf.rotationSpeed = VoxelDefs[i]->DroppedSpin / 55.55f; |
| 672 | smf.flags |= MDL_ROTATING; |
| 673 | } |
| 674 | else |
| 675 | { |
| 676 | smf.yrotate = 0; |
| 677 | smf.rotationSpeed = 0; |
| 678 | smf.flags &= ~MDL_ROTATING; |
no test coverage detected