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); } }
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); }
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; }
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; }