com.me.mygdxgame.MoveableActor.java Source code

Java tutorial

Introduction

Here is the source code for com.me.mygdxgame.MoveableActor.java

Source

/*
Copyright (c) Philip Bliss, 2013
    
This file is provided under the Apache License, Version 2.0. See the file LICENSE for more.
*/
package com.me.mygdxgame;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.physics.box2d.Body;
import com.badlogic.gdx.physics.box2d.Fixture;
import com.badlogic.gdx.physics.box2d.World;
import com.badlogic.gdx.scenes.scene2d.Actor;

public abstract class MoveableActor extends Actor {

    protected Fixture fixture;
    protected Texture texture;
    protected Body body;
    protected World world;
    private Vector2 pixelsPerMeter;
    protected Sprite sprite;
    protected Vector2 size;
    protected static final Vector2 TARGET_SIZE = new Vector2(.005f, .02f);
    protected static final Vector2 AVATAR_SIZE = new Vector2(.02f, .02f);

    public MoveableActor(GdxTest gdxTest, String textureFilename, Vector2 size) {
        this.size = size;
        world = gdxTest.world;
        pixelsPerMeter = gdxTest.getPixelsPerMeter();

        texture = new Texture(Gdx.files.internal(textureFilename));
        texture.setFilter(TextureFilter.Linear, TextureFilter.Linear);

        sprite = new Sprite(texture);
        Vector2 sizePixel = meterToPixel(size.cpy());
        sprite.setSize(sizePixel.x, sizePixel.y);

        sprite.flip(false, true);
    }

    public void dispose() {
        texture.dispose();
    }

    public Body getBody() {
        return body;
    }

    Vector2 meterToPixel(Vector2 position) {
        return position.cpy().scl(pixelsPerMeter);
    }

    Vector2 pixelToMeter(Vector2 pixelVec) {
        return pixelVec.cpy().div(pixelsPerMeter);
    }

    public void updateScreenPos() {
        Vector2 targetPosScreen = meterToPixel(body.getPosition());
        sprite.setPosition(targetPosScreen.x, targetPosScreen.y);
    }

    @Override
    public void draw(SpriteBatch batch, float parentAlpha) {
        sprite.draw(batch, parentAlpha);
    }

    public void drawDebugLines(ShapeRenderer shapeRenderer) {
        Vector2 cornerPixel = meterToPixel(body.getPosition());
        shapeRenderer.line(cornerPixel.x, cornerPixel.y, cornerPixel.x + sprite.getWidth(), cornerPixel.y);
        shapeRenderer.line(cornerPixel.x, cornerPixel.y, cornerPixel.x, cornerPixel.y + sprite.getHeight());
    }

    Rectangle getRect() {
        return new Rectangle(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight());
    }

    public Vector2 getWorldCenter() {
        return new Vector2(body.getWorldCenter().sub(size.cpy().div(2f)));
    }
}