Exemplo n.º 1
0
    public TryMoveResult TryMove(Vector2 position)
    {
        Vector2 oldPos = transform.position;

        transform.position = position;
        int collisions = collider.Cast(Vector2.zero, collisionFilter, collisionBuffer, 0);

        bool          hitMinion = false;
        bool          hitWall   = false;
        TryMoveResult result    = TryMoveResult.Success;

        for (int i = 0; i < collisions; i++)
        {
            var minion = collisionBuffer[i].collider.AsMinion();
            if (minion != null)
            {
                if (minion != this.minion)
                {
                    hitMinion = true;
                    if (collisionBuffer[i].collider.bounds.center.x > oldPos.x)
                    {
                        result = TryMoveResult.LookLeft;
                    }
                    else
                    {
                        result = TryMoveResult.LookRight;
                    }
                }

                continue;
            }

            hitWall = true;
            if (collisionBuffer[i].collider.bounds.center.x > oldPos.x)
            {
                result = TryMoveResult.LookLeft;
            }
            else
            {
                result = TryMoveResult.LookRight;
            }
        }

        if (hitMinion || hitWall)
        {
            transform.position = oldPos;
        }

        return(result);
    }
Exemplo n.º 2
0
    bool FindWaypoint()
    {
        float horizontalOffset = .25f;
        float verticalOffset   = .25f;

        if (this.Owner.Side == HeroSide.Top)
        {
            verticalOffset = -.25f;
        }

        TryMoveResult result = this.waypoint.TryMove(new Vector2(this.Position.x, this.Position.y + verticalOffset));

        if (result == TryMoveResult.Success)
        {
            return(true);
        }

        if (result == TryMoveResult.LookLeft)
        {
            if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y)) == TryMoveResult.Success)
            {
                return(true);
            }
        }
        else
        {
            if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y + verticalOffset)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x + horizontalOffset, this.Position.y)) == TryMoveResult.Success)
            {
                return(true);
            }

            if (this.waypoint.TryMove(new Vector2(this.Position.x - horizontalOffset, this.Position.y)) == TryMoveResult.Success)
            {
                return(true);
            }
        }

        return(false);
    }