Пример #1
0
        /** Draws a visual rectangle enclosing the rect parameter. Note that the actual rectangle drawn may be larger than the
          * inputted rectangle. */
        public void renderRect(Util.Rect desiredRect)
        {
            //Find the actual rectangle to enclose.
            Util.Rect actualRect = new Util.Rect();
            actualRect.w = desiredRect.w + objectWidth * 2;
            if (actualRect.w % objectWidth != 0)
                actualRect.w += (objectWidth - actualRect.w % objectWidth);

            actualRect.h = desiredRect.h + objectHeight * 2;
            if (actualRect.h % objectHeight != 0)
                actualRect.h = actualRect.h + (objectHeight - actualRect.h % objectHeight);

            actualRect.centreX = desiredRect.centreX;
            actualRect.centreY = desiredRect.centreY;

            int nWidthEdges = (actualRect.w - 2 * objectWidth) / objectWidth;
            int nHeightEdges = (actualRect.h - 2 * objectHeight) / objectHeight;

            int lowerLeftX = actualRect.x, lowerLeftY = actualRect.y;
            int upperRightX = actualRect.x+objectWidth*(1+nWidthEdges), upperRightY = actualRect.y + objectHeight * (1 + nHeightEdges);

            //Draw the 4 corners
            Sprite sprite = new Sprite(new Util.Rect(lowerLeftX, lowerLeftY, objectWidth, objectHeight), this); ;

            sprite.setTilesetIndex(0, 2);
            HighLevelRenderer.draw(sprite);

            sprite.rect.y = upperRightY;
            sprite.setTilesetIndex(0, 0);
            HighLevelRenderer.draw(sprite);

            sprite.rect.x = upperRightX;
            sprite.setTilesetIndex(2, 0);
            HighLevelRenderer.draw(sprite);

            sprite.rect.y = lowerLeftY;
            sprite.setTilesetIndex(2, 2);
            HighLevelRenderer.draw(sprite);

            //Draw the vertical edges.
            for (int i = lowerLeftY + objectHeight, j = 0; j < nHeightEdges; ++j, i += objectHeight)
            {
                sprite.rect.y = i;
                sprite.rect.x = lowerLeftX;
                sprite.setTilesetIndex(0, 1);
                HighLevelRenderer.draw(sprite);
                sprite.setTilesetIndex(2, 1);
                sprite.rect.x = upperRightX;
                HighLevelRenderer.draw(sprite);
            }

            //Draw the horizontal edges.
            for (int i = lowerLeftX + objectWidth, j = 0; j < nWidthEdges; ++j, i += objectWidth)
            {
                sprite.rect.x = i;
                sprite.rect.y = lowerLeftY;
                sprite.setTilesetIndex(1, 2);
                HighLevelRenderer.draw(sprite);
                sprite.setTilesetIndex(1, 0);
                sprite.rect.y = upperRightY;
                HighLevelRenderer.draw(sprite);
            }

            //Fill the insides
            sprite.setTilesetIndex(1, 1);
            for (int x = lowerLeftX + objectWidth, j = 0; j < nWidthEdges; ++j, x += objectWidth)
            {
                for (int y = lowerLeftY + objectHeight, k = 0; k < nHeightEdges; ++k, y += objectHeight)
                {
                    sprite.rect.x = x;
                    sprite.rect.y = y;
                    HighLevelRenderer.draw(sprite);
                }
            }

            int minWidth = this.width;
            int minHeight = this.height;
        }