Exemplo n.º 1
0
    private Vector2[] VerticalConvex(Vector2[] chunks)
    {
        List <Vector2> convex = new List <Vector2>();

        if (chunks.Length <= 0)
        {
            return(convex.ToArray());
        }
        ChunksWalker walker = new ChunksWalker(chunks[0], chunks);

        while (true)
        {
            foreach (IConvexStateHandler handler in mHandlers)
            {
                handler.Handle(walker, convex);
            }
            if (convex.Count > 0)
            {
                Vector2 pos   = walker.Pos();
                Vector2 start = convex[0];
                if (ChunksWalker.IsSamePoint(pos, start))
                {
                    break;
                }
            }
        }
        return(convex.ToArray());
    }
Exemplo n.º 2
0
    public void Handle(ChunksWalker walker, List <Vector2> convex)
    {
        int state = walker.State();

        if (state == 15)
        {
            walker.Jump(-walker.tileWidth, -walker.tileHeight);
        }
        else if (walker.Direction() == ChunksWalker.DIRECTION_STAY)
        {
            // start point
            convex.Add(walker.Pos());
            if (state == 1 || state == 5 || state == 13 || state == 9)
            {
                walker.WalkUp();
            }
            else if (state == 2 || state == 3 || state == 7 || state == 6)
            {
                walker.WalkRight();
            }
            else if (state == 8 || state == 10 || state == 11)
            {
                walker.WalkDown();
            }
            else if (state == 4 || state == 12 || state == 14)
            {
                walker.WalkLeft();
            }
            convex.Add(walker.Pos());
        }
    }
Exemplo n.º 3
0
    public void Handle(ChunksWalker walker, List <Vector2> convex)
    {
        int direction = walker.Direction();

        if (direction == ChunksWalker.DIRECTION_STAY)
        {
            return;
        }
        int state = walker.State();

        if (state == 4 || state == 12 || state == 14 ||
            (direction == ChunksWalker.DIRECTION_UP && state == 6))
        {
            walker.WalkLeft();
            convex.Add(walker.Pos());
        }
    }
Exemplo n.º 4
0
    public void Handle(ChunksWalker walker, List <Vector2> convex)
    {
        int direction = walker.Direction();

        if (direction == ChunksWalker.DIRECTION_STAY)
        {
            return;
        }
        int state = walker.State();

        if (state == 8 || state == 10 || state == 11 ||
            (direction == ChunksWalker.DIRECTION_LEFT && state == 9))
        {
            walker.WalkDown();
            convex.Add(walker.Pos());
        }
    }