virtual coordinates for a real menu renderer
This commit is contained in:
parent
33ec805a5f
commit
2271bc35d6
|
@ -6,6 +6,8 @@ import com.badlogic.gdx.graphics.Pixmap.Format;
|
||||||
import com.badlogic.gdx.graphics.Texture;
|
import com.badlogic.gdx.graphics.Texture;
|
||||||
|
|
||||||
public class CRAssets {
|
public class CRAssets {
|
||||||
|
public static Texture TEX_BLANK;
|
||||||
|
|
||||||
public static Texture TEX_PLAYER_UP;
|
public static Texture TEX_PLAYER_UP;
|
||||||
public static Texture TEX_PLAYER_RIGHT;
|
public static Texture TEX_PLAYER_RIGHT;
|
||||||
public static Texture TEX_PLAYER_LEFT;
|
public static Texture TEX_PLAYER_LEFT;
|
||||||
|
@ -20,6 +22,13 @@ public class CRAssets {
|
||||||
public static Texture TEX_COLORWHEEL;
|
public static Texture TEX_COLORWHEEL;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
{
|
||||||
|
Pixmap pixmap = new Pixmap(32, 32, Format.RGBA8888);
|
||||||
|
pixmap.setColor(1, 1, 1, 1);
|
||||||
|
pixmap.fill();
|
||||||
|
TEX_BLANK = new Texture(pixmap);
|
||||||
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
Pixmap pixmap = new Pixmap(32, 32, Format.RGBA8888);
|
Pixmap pixmap = new Pixmap(32, 32, Format.RGBA8888);
|
||||||
pixmap.setColor(1, 0, 0, 1);
|
pixmap.setColor(1, 0, 0, 1);
|
||||||
|
|
|
@ -5,31 +5,29 @@ import com.badlogic.gdx.Screen;
|
||||||
import com.badlogic.gdx.graphics.GL20;
|
import com.badlogic.gdx.graphics.GL20;
|
||||||
import com.badlogic.gdx.graphics.OrthographicCamera;
|
import com.badlogic.gdx.graphics.OrthographicCamera;
|
||||||
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
|
||||||
|
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import de.samdev.colorrunner.CRGame;
|
||||||
|
|
||||||
public abstract class BaseMenu implements Screen {
|
public abstract class BaseMenu implements Screen {
|
||||||
|
|
||||||
private final int VIEWPORT_WIDTH = 100;
|
private final int VIRTUAL_VIEWPORT_WIDTH = 1024;
|
||||||
private final int VIEWPORT_HEIGHT = 100;
|
private final int VIRTUAL_VIEWPORT_HEIGHT = 640;
|
||||||
|
|
||||||
private List<BaseMenuElement> elements = new ArrayList<BaseMenuElement>();
|
private List<BaseMenuElement> elements = new ArrayList<BaseMenuElement>();
|
||||||
private OrthographicCamera cam;
|
private OrthographicCamera cam;
|
||||||
private SpriteBatch sbatch = new SpriteBatch();
|
private SpriteBatch sbatch = new SpriteBatch();
|
||||||
|
private ShapeRenderer linebatch = new ShapeRenderer();
|
||||||
|
|
||||||
public BaseMenu() {
|
public BaseMenu() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
cam = new OrthographicCamera();
|
cam = new OrthographicCamera();
|
||||||
cam.position.x += VIEWPORT_WIDTH/2;
|
|
||||||
cam.position.y += VIEWPORT_HEIGHT/2;
|
|
||||||
cam.viewportWidth += VIEWPORT_WIDTH;
|
|
||||||
cam.viewportHeight += VIEWPORT_HEIGHT;
|
|
||||||
cam.update();
|
|
||||||
|
|
||||||
sbatch.setProjectionMatrix(cam.combined);
|
|
||||||
|
|
||||||
|
updateCam();
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,21 +51,71 @@ public abstract class BaseMenu implements Screen {
|
||||||
e.update(delta);
|
e.update(delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ####### RENDER #########
|
// ####### DEBUG RENDER #########
|
||||||
|
|
||||||
Gdx.gl.glClearColor(0.22f, 0.22f, 0.22f, 1f);
|
Gdx.gl.glClearColor(1, 0, 1, 1f);
|
||||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
|
if (CRGame.DEBUG) {
|
||||||
|
|
||||||
|
linebatch.begin(ShapeRenderer.ShapeType.Line);
|
||||||
|
linebatch.setColor(0, 0, 1, 1);
|
||||||
|
|
||||||
|
linebatch.rect(0, 0, VIRTUAL_VIEWPORT_WIDTH, VIRTUAL_VIEWPORT_HEIGHT);
|
||||||
|
|
||||||
|
linebatch.end();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// ####### REAL RENDER #########
|
||||||
|
|
||||||
sbatch.begin();
|
sbatch.begin();
|
||||||
for (BaseMenuElement e : elements) {
|
for (BaseMenuElement e : elements) {
|
||||||
e.render(sbatch);
|
e.render(sbatch);
|
||||||
}
|
}
|
||||||
sbatch.end();
|
sbatch.end();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateCam() {
|
||||||
|
|
||||||
|
float deviceW = Gdx.graphics.getWidth();
|
||||||
|
float deviceH = Gdx.graphics.getHeight();
|
||||||
|
|
||||||
|
float real_ratio = deviceW / deviceH;
|
||||||
|
float virt_ratio = VIRTUAL_VIEWPORT_WIDTH * 1f / VIRTUAL_VIEWPORT_HEIGHT;
|
||||||
|
|
||||||
|
if (real_ratio > virt_ratio) {
|
||||||
|
|
||||||
|
// fix to height
|
||||||
|
|
||||||
|
cam.viewportHeight = VIRTUAL_VIEWPORT_HEIGHT;
|
||||||
|
cam.viewportWidth = real_ratio * VIRTUAL_VIEWPORT_HEIGHT;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// fix to width
|
||||||
|
|
||||||
|
cam.viewportHeight = VIRTUAL_VIEWPORT_WIDTH / real_ratio;
|
||||||
|
cam.viewportWidth = VIRTUAL_VIEWPORT_WIDTH;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
cam.position.x = VIRTUAL_VIEWPORT_WIDTH / 2f;
|
||||||
|
cam.position.y = VIRTUAL_VIEWPORT_HEIGHT / 2f;
|
||||||
|
|
||||||
|
cam.update();
|
||||||
|
|
||||||
|
sbatch.setProjectionMatrix(cam.combined);
|
||||||
|
linebatch.setProjectionMatrix(cam.combined);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resize(int width, int height) {
|
public void resize(int width, int height) {
|
||||||
// NOP
|
|
||||||
|
updateCam();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -9,7 +9,14 @@ public class LevelSelectMenu extends BaseMenu {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void init() {
|
protected void init() {
|
||||||
add(new CRMenuRectangle(1, 1, 30, 30, Color.RED));
|
|
||||||
|
for (int x = 0; x < 6; x++) {
|
||||||
|
for (int y = 0; y < 4; y++) {
|
||||||
|
add(new CRMenuRectangle(48 + (32+128)*x, 48 + (32+112)*y, 128, 128, Color.YELLOW));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,13 +21,15 @@ public class CRMenuRectangle extends BaseMenuElement {
|
||||||
@Override
|
@Override
|
||||||
public void render(SpriteBatch batch) {
|
public void render(SpriteBatch batch) {
|
||||||
|
|
||||||
batch.draw(CRAssets.TEX_PLAYER_UP, Bounds.x, Bounds.y, Bounds.width, Bounds.height);
|
batch.setColor(Color);
|
||||||
|
batch.draw(CRAssets.TEX_BLANK, Bounds.x, Bounds.y, Bounds.width, Bounds.height);
|
||||||
|
batch.setColor(0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(float delta) {
|
public void update(float delta) {
|
||||||
Gdx.app.log("crmenurect", "> " + delta);
|
//Gdx.app.log("crmenurect", "> " + delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue