| 92 | } |
| 93 | |
| 94 | void FireRopeControl(short itemNumber) |
| 95 | { |
| 96 | auto& item = g_Level.Items[itemNumber]; |
| 97 | |
| 98 | if (!TriggerActive(&item)) |
| 99 | return; |
| 100 | |
| 101 | int meshCount = Objects[item.ObjectNumber].nmeshes - 1; |
| 102 | |
| 103 | if (!(GlobalCounter & 3)) |
| 104 | { |
| 105 | auto spheres = item.GetSpheres(); |
| 106 | int prevMeshIndex = item.ItemFlags[FireRopeItemFlags::LowerMesh]; |
| 107 | |
| 108 | for (int i = item.ItemFlags[FireRopeItemFlags::LowerMesh]; i < item.ItemFlags[FireRopeItemFlags::UpperMesh]; i++) |
| 109 | { |
| 110 | bool oddMesh = (i & 1); |
| 111 | |
| 112 | if (item.MeshBits.Test(i)) |
| 113 | { |
| 114 | if (oddMesh && prevMeshIndex < spheres.size() && GlobalCounter & 4) |
| 115 | { |
| 116 | auto pos = Vector3((spheres[prevMeshIndex].Center + spheres[i].Center) / 2); |
| 117 | TriggerRopeFlame(pos); |
| 118 | } |
| 119 | else if (!(GlobalCounter & 4)) |
| 120 | { |
| 121 | TriggerRopeFlame(Vector3i(spheres[i].Center)); |
| 122 | } |
| 123 | } |
| 124 | |
| 125 | if (oddMesh) |
| 126 | prevMeshIndex++; |
| 127 | } |
| 128 | |
| 129 | if (item.ItemFlags[FireRopeItemFlags::Timeout]) |
| 130 | { |
| 131 | if (item.ItemFlags[FireRopeItemFlags::LowerMesh] > 0) |
| 132 | item.ItemFlags[FireRopeItemFlags::LowerMesh]--; |
| 133 | |
| 134 | if (item.ItemFlags[FireRopeItemFlags::UpperMesh] < meshCount) |
| 135 | item.ItemFlags[FireRopeItemFlags::UpperMesh]++; |
| 136 | } |
| 137 | } |
| 138 | |
| 139 | if (item.ItemFlags[FireRopeItemFlags::Timeout]) |
| 140 | { |
| 141 | item.ItemFlags[FireRopeItemFlags::Timeout]--; |
| 142 | |
| 143 | if (!item.ItemFlags[FireRopeItemFlags::Timeout]) |
| 144 | { |
| 145 | item.ItemFlags[FireRopeItemFlags::UpperMesh] = |
| 146 | item.ItemFlags[FireRopeItemFlags::LowerMesh] = item.ItemFlags[FireRopeItemFlags::StartMesh]; |
| 147 | |
| 148 | ExplodeItemNode(&item, item.ItemFlags[FireRopeItemFlags::StartMesh], 0, BODY_DO_EXPLOSION); |
| 149 | } |
| 150 | } |
| 151 | else if (GlobalCounter & 1) |
nothing calls this directly
no test coverage detected