| 290 | } |
| 291 | |
| 292 | void KillItem(short const itemNumber) |
| 293 | { |
| 294 | if (itemNumber < 0 || itemNumber >= g_Level.Items.size()) |
| 295 | { |
| 296 | TENLog(fmt::format("Attempted to moveable item with invalid index {}.", itemNumber), LogLevel::Error); |
| 297 | return; |
| 298 | } |
| 299 | |
| 300 | if (InItemControlLoop) |
| 301 | { |
| 302 | ItemNewRooms[2 * ItemNewRoomNo] = itemNumber | 0x8000; |
| 303 | ItemNewRoomNo++; |
| 304 | } |
| 305 | else// if (NextItemActive != NO_VALUE) |
| 306 | { |
| 307 | auto* item = &g_Level.Items[itemNumber]; |
| 308 | |
| 309 | DetatchSpark(itemNumber, SP_ITEM); |
| 310 | item->Active = false; |
| 311 | |
| 312 | if (NextItemActive == itemNumber) |
| 313 | { |
| 314 | NextItemActive = item->NextActive; |
| 315 | } |
| 316 | else |
| 317 | { |
| 318 | short linkNumber; |
| 319 | for (linkNumber = NextItemActive; linkNumber != NO_VALUE; linkNumber = g_Level.Items[linkNumber].NextActive) |
| 320 | { |
| 321 | if (g_Level.Items[linkNumber].NextActive == itemNumber) |
| 322 | { |
| 323 | g_Level.Items[linkNumber].NextActive = item->NextActive; |
| 324 | break; |
| 325 | } |
| 326 | } |
| 327 | } |
| 328 | |
| 329 | if (item->RoomNumber != NO_VALUE) |
| 330 | { |
| 331 | if (g_Level.Rooms[item->RoomNumber].itemNumber == itemNumber) |
| 332 | { |
| 333 | g_Level.Rooms[item->RoomNumber].itemNumber = item->NextItem; |
| 334 | } |
| 335 | else |
| 336 | { |
| 337 | short linkNumber; |
| 338 | for (linkNumber = g_Level.Rooms[item->RoomNumber].itemNumber; linkNumber != NO_VALUE; linkNumber = g_Level.Items[linkNumber].NextItem) |
| 339 | { |
| 340 | if (g_Level.Items[linkNumber].NextItem == itemNumber) |
| 341 | { |
| 342 | g_Level.Items[linkNumber].NextItem = item->NextItem; |
| 343 | break; |
| 344 | } |
| 345 | } |
| 346 | } |
| 347 | } |
| 348 | |
| 349 | if (item == Lara.TargetEntity) |
no test coverage detected