/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package com.badlogic.gdx.tests;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.PolygonRegion;
import com.badlogic.gdx.graphics.g2d.PolygonRegionLoader;
import com.badlogic.gdx.graphics.g2d.PolygonSprite;
import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.tests.utils.GdxTest;
import com.badlogic.gdx.utils.Array;
public class PolygonSpriteTest extends GdxTest {
PolygonSpriteBatch batch;
ShapeRenderer renderer;
Texture texture;
OrthographicCamera camera;
PolygonRegion region;
Rectangle bounds;
Array<PolygonSprite> sprites = new Array<PolygonSprite>();
@Override
public void create () {
texture = new Texture(Gdx.files.internal("data/tree.png"));
PolygonRegionLoader loader = new PolygonRegionLoader();
region = loader.load(new TextureRegion(texture), Gdx.files.internal("data/tree.psh"));
renderer = new ShapeRenderer();
camera = new OrthographicCamera(480, 320);
camera.position.x = 240;
camera.position.y = 160;
camera.update();
batch = new PolygonSpriteBatch();
for (int i = 0; i < 50; i++) {
PolygonSprite sprite = new PolygonSprite(region);
sprite.setPosition(MathUtils.random(-30, 440), MathUtils.random(-30, 290));
sprite.setColor(MathUtils.random(), MathUtils.random(), MathUtils.random(), 1.0f);
sprite.setScale(MathUtils.random(0.5f, 1.5f), MathUtils.random(0.5f, 1.5f));
sprites.add(sprite);
}
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
for (int i = 0; i < sprites.size; i++) {
PolygonSprite sprite = sprites.get(i);
sprite.rotate(45 * Gdx.graphics.getDeltaTime());
sprite.translateX(10 * Gdx.graphics.getDeltaTime());
if (sprite.getX() > 450) sprite.setX(-50);
sprite.draw(batch);
}
batch.end();
// Some debug rendering, bounding box & origin of one sprite
renderer.setProjectionMatrix(camera.combined);
renderer.setColor(Color.GREEN);
renderer.begin(ShapeType.Line);
PolygonSprite sprite = sprites.get(49);
bounds = sprite.getBoundingRectangle();
renderer.rect(bounds.x, bounds.y, bounds.width, bounds.height);
renderer.end();
renderer.begin(ShapeType.Filled);
renderer.circle(sprite.getX() + sprite.getOriginX(), sprite.getY() + sprite.getOriginY(), 4);
renderer.end();
}
@Override
public void dispose () {
texture.dispose();
batch.dispose();
}
}