public void DoStaticGroundConveyorRegion(MaskData conveyorRegion, int deltaX, int deltaZ) { for (int i = 0; i < moverCount; i++) { if (moverWeDoNotMove[i]) { continue; } int moverStartX = moverInitialPositions[i].X + moverCharacterPhysics[i].startX; int moverEndX = moverInitialPositions[i].X + moverCharacterPhysics[i].endX; int moverY = moverInitialPositions[i].Y; int moverZ = moverInitialPositions[i].Z; if (conveyorRegion.IsSetInXRange(moverStartX, moverEndX, moverZ)) { int groundHeight = GetGroundHeightInXRange(moverStartX, moverEndX, moverZ, moverY, moverY + moverCharacterPhysics[i].height, moverActors[i], staticOnly: true); if (moverY == groundHeight) // <- on the ground { CharacterPhysics.TryMoveHorizontalDidHitWall(ref moverCharacterPhysics[i], this, deltaX, deltaZ, true, ref moverActors[i].position, staticOnly: true); } } } }
public void DoStaticBlowerRegion(MaskData blowerRegion, int deltaX, int deltaZ, int startY, int endY) { for (int i = 0; i < moverCount; i++) { if (moverWeDoNotMove[i]) { continue; } int moverStartX = moverInitialPositions[i].X + moverCharacterPhysics[i].startX; int moverEndX = moverInitialPositions[i].X + moverCharacterPhysics[i].endX; int moverStartY = moverInitialPositions[i].Y; int moverEndY = moverStartY + moverCharacterPhysics[i].height; int moverZ = moverInitialPositions[i].Z; if (blowerRegion.IsSetInXRange(moverStartX, moverEndX, moverZ)) { int groundHeight = GetGroundHeightInXRange(moverStartX, moverEndX, moverZ, moverStartY, moverEndY, moverActors[i], staticOnly: true); bool onGround = (groundHeight == moverStartY); if (!(moverEndY < startY || moverStartY >= endY)) // <- in the blower's Y range { CharacterPhysics.TryMoveHorizontalDidHitWall(ref moverCharacterPhysics[i], this, deltaX, deltaZ, onGround, ref moverActors[i].position, staticOnly: true); } } } }
public bool MoveNext() { while (nextIndex < owner.moverCount) { int i = nextIndex; nextIndex++; if (maskData.IsSetInXRange(owner.moverInitialPositions[i].X + owner.moverCharacterPhysics[i].startX, owner.moverInitialPositions[i].X + owner.moverCharacterPhysics[i].endX, owner.moverInitialPositions[i].Z)) { current = owner.moverActors[i]; return(true); } } return(false); }