package com.ogurecapps.actors; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.Batch; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Polygon; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.scenes.scene2d.Actor; import com.badlogic.gdx.scenes.scene2d.utils.ScissorStack; import com.badlogic.gdx.utils.viewport.Viewport; /** * Created by coder1cv8 on 07.02.2017. */ public class SimpleActor extends Actor { public final TextureRegion region; private Rectangle clipBounds; private boolean drawHitbox; private final ShapeRenderer renderer; public SimpleActor(TextureRegion region) { this.region = region; setSize(region.getRegionWidth(), region.getRegionHeight()); setBounds(0, 0, getWidth(), getHeight()); renderer = new ShapeRenderer(); } public void setDrawHitbox(boolean drawHitbox) { this.drawHitbox = drawHitbox; } public void enableClipping(Rectangle clipBounds) { this.clipBounds = clipBounds; } @Override public void draw(Batch batch, float parentAlpha) { Color color = getColor(); batch.setColor(color.r, color.g, color.b, color.a * parentAlpha); if (clipBounds != null) { Rectangle scissors = new Rectangle(); final Viewport viewport = getStage().getViewport(); ScissorStack.calculateScissors(getStage().getCamera(), viewport.getScreenX(), viewport.getScreenY(), viewport.getScreenWidth(), viewport.getScreenHeight(), batch.getTransformMatrix(), clipBounds, scissors); ScissorStack.pushScissors(scissors); } batch.draw(region, getX(), getY(), getOriginX(), getOriginY(), getWidth(), getHeight(), getScaleX(), getScaleY(), getRotation()); if (clipBounds != null) { batch.flush(); ScissorStack.popScissors(); } if (drawHitbox) { batch.end(); renderer.setProjectionMatrix(batch.getProjectionMatrix()); renderer.setTransformMatrix(batch.getTransformMatrix()); renderer.begin(ShapeRenderer.ShapeType.Line); renderer.setColor(1f, 1f, 1f, 1f); renderer.polygon(getHitbox().getTransformedVertices()); renderer.end(); batch.begin(); } } public Polygon getHitbox() { Polygon polygon = new Polygon(new float[]{0, 0, getWidth(), 0, getWidth(), getHeight(), 0, getHeight()}); polygon.setPosition(getX(), getY()); polygon.setOrigin(getOriginX(), getOriginY()); polygon.setScale(getScaleX(), getScaleY()); polygon.setRotation(getRotation()); return polygon; } }