예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        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);
                    }
                }
            }
        }
예제 #3
0
                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);
                }