Beispiel #1
0
    private void Calculate(ObstaclePosition obstaclePosition, Obstacle obstacle)
    {
        var distanceFromObstacle = 0;

        switch (obstaclePosition)
        {
        case ObstaclePosition.Above:
            distanceFromObstacle = obstacle.Y - Queen.Y - 1;
            if (distanceFromObstacle < TopDist)
            {
                TopDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.Below:
            distanceFromObstacle = Queen.Y - obstacle.Y - 1;
            if (distanceFromObstacle < BottomDist)
            {
                BottomDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.Right:
            distanceFromObstacle = obstacle.X - Queen.X - 1;
            if (distanceFromObstacle < RightDist)
            {
                RightDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.Left:
            distanceFromObstacle = Queen.X - obstacle.X - 1;
            if (distanceFromObstacle < LeftDist)
            {
                LeftDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.AboveRight:
            distanceFromObstacle = obstacle.Y - Queen.Y - 1;
            if (distanceFromObstacle < TopRightDist)
            {
                TopRightDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.BelowLeft:
            distanceFromObstacle = Queen.Y - obstacle.Y - 1;
            if (distanceFromObstacle < BottomLeftDist)
            {
                BottomLeftDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.BelowRight:
            distanceFromObstacle = obstacle.X - Queen.X - 1;
            if (distanceFromObstacle < BottomRightDist)
            {
                BottomRightDist = distanceFromObstacle;
            }
            break;

        case ObstaclePosition.AboveLeft:
            distanceFromObstacle = Queen.X - obstacle.X - 1;
            if (distanceFromObstacle < TopLeftDist)
            {
                TopLeftDist = distanceFromObstacle;
            }
            break;

        default:
            break;
        }
    }
Beispiel #2
0
    /// <summary>
    /// Snaps the actor to the given obstacle
    /// </summary>
    /// <param name="obstacleCollider"></param>
    /// <param name="obstaclePosition">String description of where the obstacle is in relation the Actor</param>
    /// <param name="yContactPosition"></param>
    public virtual void Snap(Collider obstacleCollider, ObstaclePosition obstaclePosition, float yContactPosition)
    {
        var colliderWidth = GetComponent<CapsuleCollider>().bounds.size.x / 2;
        var obstacleWidth = obstacleCollider.bounds.size.x / 2;
        var snapOffsetX = colliderWidth + obstacleWidth;

        var colliderHeight = GetComponent<CapsuleCollider>().bounds.size.y / 2;
        var obstacleHeight = obstacleCollider.transform.localScale.y / 2;
        var snapOffsetY = (colliderHeight / Mathf.Cos(this.ActiveFloorRotation)) + obstacleHeight;

        switch (obstaclePosition)
        {
            case ObstaclePosition.Right:
                this.ActorTransform.position = new Vector3(obstacleCollider.transform.position.x - snapOffsetX, this.ActorTransform.position.y);
                break;

            case ObstaclePosition.Left:
                this.ActorTransform.position = new Vector3(obstacleCollider.transform.position.x + snapOffsetX, this.ActorTransform.position.y);
                break;

            case ObstaclePosition.Floor:
                //Debug object
                if (TestForPostitions)
                {
                    var newMarker = (GameObject)Instantiate(this.MarkerObject, new Vector3(this.ActorTransform.position.x, yContactPosition, -1), Quaternion.identity);
                    this.MarkerObjects.Add(newMarker);
                }

                this.ActorTransform.position = new Vector3(this.ActorTransform.position.x, yContactPosition + snapOffsetY);
                break;

            case ObstaclePosition.Ceiling:
                //Debug.Log(snapOffsetY);
                this.ActorTransform.position = new Vector3(this.ActorTransform.position.x, yContactPosition - snapOffsetY);
                break;
        }
    }