| 22 | std::array<DebrisFragment, MAX_DEBRIS> DebrisFragments; |
| 23 | |
| 24 | bool ExplodeItemNode(ItemInfo* item, int node, int noXZVel, int bits) |
| 25 | { |
| 26 | if (1 << node & item->MeshBits.ToPackedBits()) |
| 27 | { |
| 28 | int number = bits; |
| 29 | if (number == BODY_DO_EXPLOSION) |
| 30 | number = -64; |
| 31 | |
| 32 | auto spheres = item->GetSpheres(); |
| 33 | ShatterItem.yRot = item->Pose.Orientation.y; |
| 34 | ShatterItem.bit = 1 << node; |
| 35 | ShatterItem.meshIndex = (node < item->Model.MeshIndex.size()) ? item->Model.MeshIndex[node] : item->Model.BaseMesh; |
| 36 | ShatterItem.sphere.Center = spheres[node].Center; |
| 37 | ShatterItem.color = item->Model.Color; |
| 38 | ShatterItem.flags = item->ObjectNumber == ID_CROSSBOW_BOLT ? 0x400 : 0; |
| 39 | ShatterImpactData.impactDirection = Vector3(0, -1, 0); |
| 40 | ShatterImpactData.impactLocation = ShatterItem.sphere.Center; |
| 41 | ShatterObject(&ShatterItem, NULL, number, item->RoomNumber, noXZVel); |
| 42 | item->MeshBits &= ~ShatterItem.bit; |
| 43 | |
| 44 | return true; |
| 45 | } |
| 46 | |
| 47 | return false; |
| 48 | } |
| 49 | |
| 50 | DebrisFragment* GetFreeDebrisFragment() |
| 51 | { |
no test coverage detected