From b0023be41e889b8c273fac5c1a9ac2025ed2bb0b Mon Sep 17 00:00:00 2001 From: ephphatha Date: Sat, 10 Jul 2021 01:32:47 +1000 Subject: [PATCH] Remove unnecessary temporaries from SyncL3Doors Simplify checks in SyncL3Doors The function is only called with objects of type L3LDOOR or L3RDOOR so there's no real need to check again. Take door by reference in SyncL3Doors Removes one use of the Objects global. Door by reference 2, SyncL2Doors Simplify logic in SyncL2Doors to match L3Doors Almost the same code, can probably be combined to a single function with appropriate parameters. Use Point in DoorSet params Use switch in DoorSet Instead of a whole bunch of if statements where only one can be true Replace object index with type in DoorSet This function doesn't need any other object property. Still references the dPiece global unfortunately. SyncL1Doors door by reference Replace code that mutates a copy of door position with Direction Inline if/else statement for L1LDOOR Only difference is the value of the second parameter --- Source/objects.cpp | 284 +++++++++++++++++++++++++-------------------- 1 file changed, 156 insertions(+), 128 deletions(-) diff --git a/Source/objects.cpp b/Source/objects.cpp index 62e2c99e4..5dde481a8 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2274,75 +2274,106 @@ void ObjL2Special(int x1, int y1, int x2, int y2) } } -void DoorSet(int oi, int dx, int dy) +void DoorSet(Point position, _object_id doorType) { - int pn = dPiece[dx][dy]; + int pn = dPiece[position.x][position.y]; if (currlevel < 17) { - if (pn == 43) - ObjSetMicro({ dx, dy }, 392); - if (pn == 45) - ObjSetMicro({ dx, dy }, 394); - if (pn == 50 && Objects[oi]._otype == OBJ_L1LDOOR) - ObjSetMicro({ dx, dy }, 411); - if (pn == 50 && Objects[oi]._otype == OBJ_L1RDOOR) - ObjSetMicro({ dx, dy }, 412); - if (pn == 54) - ObjSetMicro({ dx, dy }, 397); - if (pn == 55) - ObjSetMicro({ dx, dy }, 398); - if (pn == 61) - ObjSetMicro({ dx, dy }, 399); - if (pn == 67) - ObjSetMicro({ dx, dy }, 400); - if (pn == 68) - ObjSetMicro({ dx, dy }, 401); - if (pn == 69) - ObjSetMicro({ dx, dy }, 403); - if (pn == 70) - ObjSetMicro({ dx, dy }, 404); - if (pn == 72) - ObjSetMicro({ dx, dy }, 406); - if (pn == 212) - ObjSetMicro({ dx, dy }, 407); - if (pn == 354) - ObjSetMicro({ dx, dy }, 409); - if (pn == 355) - ObjSetMicro({ dx, dy }, 410); - if (pn == 411) - ObjSetMicro({ dx, dy }, 396); - if (pn == 412) - ObjSetMicro({ dx, dy }, 396); - } else { - if (pn == 75) - ObjSetMicro({ dx, dy }, 204); - if (pn == 79) - ObjSetMicro({ dx, dy }, 208); - if (pn == 86 && Objects[oi]._otype == OBJ_L1LDOOR) { - ObjSetMicro({ dx, dy }, 232); + switch (pn) { + case 43: + ObjSetMicro(position, 392); + break; + case 45: + ObjSetMicro(position, 394); + break; + case 50: + if (doorType == _object_id::OBJ_L1LDOOR) + ObjSetMicro(position, 411); + else if (doorType == _object_id::OBJ_L1RDOOR) + ObjSetMicro(position, 412); + break; + case 54: + ObjSetMicro(position, 397); + break; + case 55: + ObjSetMicro(position, 398); + break; + case 61: + ObjSetMicro(position, 399); + break; + case 67: + ObjSetMicro(position, 400); + break; + case 68: + ObjSetMicro(position, 401); + break; + case 69: + ObjSetMicro(position, 403); + break; + case 70: + ObjSetMicro(position, 404); + break; + case 72: + ObjSetMicro(position, 406); + break; + case 212: + ObjSetMicro(position, 407); + break; + case 354: + ObjSetMicro(position, 409); + break; + case 355: + ObjSetMicro(position, 410); + break; + case 411: + case 412: + ObjSetMicro(position, 396); + break; } - if (pn == 86 && Objects[oi]._otype == OBJ_L1RDOOR) { - ObjSetMicro({ dx, dy }, 234); + } else { + switch (pn) { + case 75: + ObjSetMicro(position, 204); + break; + case 79: + ObjSetMicro(position, 208); + break; + case 86: + if (doorType == _object_id::OBJ_L1LDOOR) { + ObjSetMicro(position, 232); + } + if (doorType == _object_id::OBJ_L1RDOOR) { + ObjSetMicro(position, 234); + } + break; + case 91: + ObjSetMicro(position, 215); + break; + case 93: + ObjSetMicro(position, 218); + break; + case 99: + ObjSetMicro(position, 220); + break; + case 111: + ObjSetMicro(position, 222); + break; + case 113: + ObjSetMicro(position, 224); + break; + case 115: + ObjSetMicro(position, 226); + break; + case 117: + ObjSetMicro(position, 228); + break; + case 119: + ObjSetMicro(position, 230); + break; + case 232: + case 234: + ObjSetMicro(position, 212); + break; } - if (pn == 91) - ObjSetMicro({ dx, dy }, 215); - if (pn == 93) - ObjSetMicro({ dx, dy }, 218); - if (pn == 99) - ObjSetMicro({ dx, dy }, 220); - if (pn == 111) - ObjSetMicro({ dx, dy }, 222); - if (pn == 113) - ObjSetMicro({ dx, dy }, 224); - if (pn == 115) - ObjSetMicro({ dx, dy }, 226); - if (pn == 117) - ObjSetMicro({ dx, dy }, 228); - if (pn == 119) - ObjSetMicro({ dx, dy }, 230); - if (pn == 232) - ObjSetMicro({ dx, dy }, 212); - if (pn == 234) - ObjSetMicro({ dx, dy }, 212); } } @@ -2400,7 +2431,7 @@ void OperateL1RDoor(int pnum, int oi, bool sendflag) objects_set_door_piece(door.position + Direction::DIR_NE); door._oAnimFrame += 2; door._oPreFlag = true; - DoorSet(oi, door.position.x - 1, door.position.y); + DoorSet(door.position + Direction::DIR_NW, door._otype); door._oVar4 = 1; door._oSelFlag = 2; RedoPlayerVision(); @@ -2481,7 +2512,7 @@ void OperateL1LDoor(int pnum, int oi, bool sendflag) objects_set_door_piece(door.position + Direction::DIR_NW); door._oAnimFrame += 2; door._oPreFlag = true; - DoorSet(oi, door.position.x, door.position.y - 1); + DoorSet(door.position + Direction::DIR_NE, door._otype); door._oVar4 = 1; door._oSelFlag = 2; RedoPlayerVision(); @@ -5119,46 +5150,43 @@ void SyncBreakObj(int pnum, int oi) BreakBarrel(pnum, oi, 0, true, false); } -void SyncL1Doors(int i) +void SyncL1Doors(ObjectStruct &door) { - if (Objects[i]._oVar4 == 0) { - Objects[i]._oMissFlag = false; + if (door._oVar4 == 0) { + door._oMissFlag = false; return; } - Objects[i]._oMissFlag = true; + door._oMissFlag = true; + door._oSelFlag = 2; - auto doorPosition = Objects[i].position; - Objects[i]._oSelFlag = 2; + Direction doorSetDirection { Direction::DIR_OMNI }; if (currlevel < 17) { - if (Objects[i]._otype == OBJ_L1LDOOR) { - if (Objects[i]._oVar1 == 214) - ObjSetMicro(doorPosition, 408); - else - ObjSetMicro(doorPosition, 393); - dSpecial[doorPosition.x][doorPosition.y] = 7; - objects_set_door_piece(doorPosition + Direction::DIR_NW); - doorPosition.y--; + if (door._otype == _object_id::OBJ_L1LDOOR) { + ObjSetMicro(door.position, door._oVar1 == 214 ? 408 : 393); + dSpecial[door.position.x][door.position.y] = 7; + objects_set_door_piece(door.position + Direction::DIR_NW); + doorSetDirection = Direction::DIR_NE; } else { - ObjSetMicro(doorPosition, 395); - dSpecial[doorPosition.x][doorPosition.y] = 8; - objects_set_door_piece(doorPosition + Direction::DIR_NE); - doorPosition.x--; + ObjSetMicro(door.position, 395); + dSpecial[door.position.x][door.position.y] = 8; + objects_set_door_piece(door.position + Direction::DIR_NE); + doorSetDirection = Direction::DIR_NW; } } else { - if (Objects[i]._otype == OBJ_L1LDOOR) { - ObjSetMicro(doorPosition, 206); - dSpecial[doorPosition.x][doorPosition.y] = 1; - objects_set_door_piece(doorPosition + Direction::DIR_NW); - doorPosition.y--; + if (door._otype == _object_id::OBJ_L1LDOOR) { + ObjSetMicro(door.position, 206); + dSpecial[door.position.x][door.position.y] = 1; + objects_set_door_piece(door.position + Direction::DIR_NW); + doorSetDirection = Direction::DIR_NE; } else { - ObjSetMicro(doorPosition, 209); - dSpecial[doorPosition.x][doorPosition.y] = 2; - objects_set_door_piece(doorPosition + Direction::DIR_NE); - doorPosition.x--; + ObjSetMicro(door.position, 209); + dSpecial[door.position.x][door.position.y] = 2; + objects_set_door_piece(door.position + Direction::DIR_NE); + doorSetDirection = Direction::DIR_NW; } } - DoorSet(i, doorPosition.x, doorPosition.y); + DoorSet(door.position + doorSetDirection, door._otype); } void SyncCrux(int i) @@ -5212,41 +5240,41 @@ void SyncPedistal(int i) } } -void SyncL2Doors(int i) +void SyncL2Doors(ObjectStruct &door) { - Objects[i]._oMissFlag = Objects[i]._oVar4 != 0; - int x = Objects[i].position.x; - int y = Objects[i].position.y; - Objects[i]._oSelFlag = 2; - if (Objects[i]._otype == OBJ_L2LDOOR && Objects[i]._oVar4 == 0) { - ObjSetMicro({ x, y }, 538); - dSpecial[x][y] = 0; - } else if (Objects[i]._otype == OBJ_L2LDOOR && (Objects[i]._oVar4 == 1 || Objects[i]._oVar4 == 2)) { - ObjSetMicro({ x, y }, 13); - dSpecial[x][y] = 5; - } else if (Objects[i]._otype == OBJ_L2RDOOR && Objects[i]._oVar4 == 0) { - ObjSetMicro({ x, y }, 540); - dSpecial[x][y] = 0; - } else if (Objects[i]._otype == OBJ_L2RDOOR && (Objects[i]._oVar4 == 1 || Objects[i]._oVar4 == 2)) { - ObjSetMicro({ x, y }, 17); - dSpecial[x][y] = 6; + door._oMissFlag = door._oVar4 != 0; + door._oSelFlag = 2; + + bool isLeftDoor = door._otype == _object_id::OBJ_L2LDOOR; // otherwise the door is type OBJ_L2RDOOR + + switch (door._oVar4) { + case 0: + ObjSetMicro(door.position, isLeftDoor ? 538 : 540); + dSpecial[door.position.x][door.position.y] = 0; + break; + case 1: + case 2: + ObjSetMicro(door.position, isLeftDoor ? 13 : 17); + dSpecial[door.position.x][door.position.y] = isLeftDoor ? 5 : 6; + break; } } -void SyncL3Doors(int i) +void SyncL3Doors(ObjectStruct &door) { - Objects[i]._oMissFlag = true; - int x = Objects[i].position.x; - int y = Objects[i].position.y; - Objects[i]._oSelFlag = 2; - if (Objects[i]._otype == OBJ_L3LDOOR && Objects[i]._oVar4 == 0) { - ObjSetMicro({ x, y }, 531); - } else if (Objects[i]._otype == OBJ_L3LDOOR && (Objects[i]._oVar4 == 1 || Objects[i]._oVar4 == 2)) { - ObjSetMicro({ x, y }, 538); - } else if (Objects[i]._otype == OBJ_L3RDOOR && Objects[i]._oVar4 == 0) { - ObjSetMicro({ x, y }, 534); - } else if (Objects[i]._otype == OBJ_L3RDOOR && (Objects[i]._oVar4 == 1 || Objects[i]._oVar4 == 2)) { - ObjSetMicro({ x, y }, 541); + door._oMissFlag = true; + door._oSelFlag = 2; + + bool isLeftDoor = door._otype == _object_id::OBJ_L3LDOOR; // otherwise the door is type OBJ_L3RDOOR + + switch (door._oVar4) { + case 0: + ObjSetMicro(door.position, isLeftDoor ? 531 : 534); + break; + case 1: + case 2: + ObjSetMicro(door.position, isLeftDoor ? 538 : 541); + break; } } @@ -5266,15 +5294,15 @@ void SyncObjectAnim(int o) switch (Objects[o]._otype) { case OBJ_L1LDOOR: case OBJ_L1RDOOR: - SyncL1Doors(o); + SyncL1Doors(Objects[o]); break; case OBJ_L2LDOOR: case OBJ_L2RDOOR: - SyncL2Doors(o); + SyncL2Doors(Objects[o]); break; case OBJ_L3LDOOR: case OBJ_L3RDOOR: - SyncL3Doors(o); + SyncL3Doors(Objects[o]); break; case OBJ_CRUX1: case OBJ_CRUX2: