コード例 #1
0
    public void CheckForCurrentTransitionFloor(Transform transform, CapsuleCollider2D collider2D,
                                               ref Floor currentFloor,
                                               ref TransitionFloor currentTransitionFloor, TransitionFloorType type)
    {
        if (type == TransitionFloorType.Obstacle)
        {
            currentFloor = new Floor(-1);

            currentTransitionFloor = this.transitionFloorList.Find(lambdaExpression =>
                                                                   lambdaExpression.transform != null &&
                                                                   MathHelpers.Approximately(lambdaExpression.transform.position.x, transform.position.x, 0.5f) &&
                                                                   MathHelpers.Approximately(lambdaExpression.transform.position.y, transform.position.y, 3f));
        }
        else if (type == TransitionFloorType.Ladder)
        {
            currentFloor = new Floor(-1);

            currentTransitionFloor = this.transitionFloorList.Find(lambdaExpression =>
                                                                   lambdaExpression.transform != null &&
                                                                   MathHelpers.Approximately(lambdaExpression.transform.position.x, transform.position.x, 0.5f) &&
                                                                   transform.position.y >= lambdaExpression.colliderBounds.bottomMid.y &&
                                                                   transform.position.y <= lambdaExpression.colliderBounds.topMid.y + collider2D.size.y / 2);
        }
        else if (type == TransitionFloorType.Stairs)
        {
            currentFloor = new Floor(-1);

            currentTransitionFloor = this.transitionFloorList.Find(lambdaExpression =>
                                                                   !lambdaExpression.colliderBounds.Equals(null) &&
                                                                   lambdaExpression.colliderBounds.bottomLeft.x <= transform.position.x &&
                                                                   lambdaExpression.colliderBounds.bottomRight.x >= transform.position.x &&
                                                                   lambdaExpression.colliderBounds.boundingBoxBottomY.y <= transform.position.y &&
                                                                   lambdaExpression.colliderBounds.boundingBoxTopY.y >= transform.position.y);
        }
    }
コード例 #2
0
 public PatrolPointInfo(Transform transform, Collider2D collider2D, TransitionFloorType type, Navigation navigation)
 {
     this.transform              = transform;
     this.floorCollider2D        = collider2D;
     this.transitionFloorType    = type;
     this.currentFloor           = new Floor(-1);
     this.currentTransitionFloor = new TransitionFloor();
     navigation.CheckForCurrentFloor(transform, floorCollider2D, ref currentFloor, ref currentTransitionFloor);
     navigation.CheckForCurrentTransitionFloor(transform,
                                               ref currentFloor, ref currentTransitionFloor, type);
 }
コード例 #3
0
    public void CheckForCurrentFloor(Transform transform, CapsuleCollider2D collider2D, ref Floor currentFloor,
                                     ref TransitionFloor currentTransitionFloor)
    {
        //Altura como safe check

        /*  currentTransitionFloor = new TransitionFloor();
         * var temporaryFloors = this.floorList.FindAll(lambdaExpression =>
         * lambdaExpression.FloorInfo.startPointX.x <= transform.position.x &&
         * lambdaExpression.FloorInfo.endPointX.x >= transform.position.x &&
         * lambdaExpression.FloorInfo.startPointY.y <= transform.position.y &&
         * lambdaExpression.FloorInfo.endPointY.y >= transform.position.y);*/
        var temporaryFloors = this.floorList.FindAll(lambdaExpression =>
                                                     lambdaExpression.FloorInfo.startPointX.x <= transform.position.x &&
                                                     lambdaExpression.FloorInfo.endPointX.x >= transform.position.x &&
                                                     lambdaExpression.FloorInfo.startPointY.y <= transform.position.y &&
                                                     lambdaExpression.FloorInfo.endPointY.y >= transform.position.y);
        Floor currentFloorForTest = null;

        Collider2D[] colliders2D = new Collider2D[5];
        foreach (var temporaryFloor in temporaryFloors)
        {
            temporaryFloor.collider2D.GetContacts(this.contactFilter2DForFloorCheck, colliders2D);
            if (colliders2D.Where(contactCollider2D => contactCollider2D != null)
                .Any(contactCollider2D => contactCollider2D == collider2D &&
                     contactCollider2D.gameObject.layer == transform.gameObject.layer))
            {
                currentFloorForTest = temporaryFloor;
            }

            if (currentFloorForTest != null)
            {
                break;
            }
        }
        if (currentFloorForTest == null)
        {
            return;
        }
        if (!MathHelpers.Approximately(currentFloorForTest.transform.rotation.z, 0, float.Epsilon))
        {
            var raycastHit2D = Physics2D
                               .Raycast(transform.position, Vector2.up, 100f, LayerMask.GetMask("Ground", "Obstacle"));
            if (raycastHit2D.collider != null &&
                raycastHit2D.collider.transform == currentFloorForTest.transform)
            {
                return;
            }
        }
        currentTransitionFloor = new TransitionFloor();
        currentFloor           = currentFloorForTest;
    }
コード例 #4
0
    public void CheckForCurrentFloor(Transform transform, Collider2D floorCollider2D, ref Floor currentFloor,
                                     ref TransitionFloor currentTransitionFloor)
    {
        var temporaryFloor = this.floorList.Find(lambdaExpression =>
                                                 lambdaExpression.FloorInfo.startPointX.x <= transform.position.x &&
                                                 lambdaExpression.FloorInfo.endPointX.x >= transform.position.x &&
                                                 lambdaExpression.FloorInfo.startPointY.y <= transform.position.y &&
                                                 lambdaExpression.FloorInfo.endPointY.y >= transform.position.y &&
                                                 lambdaExpression.collider2D == floorCollider2D);

        if (temporaryFloor == null)
        {
            return;
        }

        currentTransitionFloor = new TransitionFloor();
        currentFloor           = temporaryFloor;
    }