DEADSOFTWARE

Add touch controls
[cavedroid.git] / core / src / ru / deadsoftware / cavecraft / game / GameRenderer.java
1 package ru.deadsoftware.cavecraft.game;
3 import com.badlogic.gdx.Gdx;
4 import com.badlogic.gdx.graphics.GL20;
5 import com.badlogic.gdx.graphics.OrthographicCamera;
6 import com.badlogic.gdx.graphics.g2d.SpriteBatch;
7 import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
8 import com.badlogic.gdx.graphics.Color;
9 import com.badlogic.gdx.math.Vector3;
10 import ru.deadsoftware.cavecraft.Assets;
11 import ru.deadsoftware.cavecraft.CaveGame;
12 import ru.deadsoftware.cavecraft.Items;
13 import ru.deadsoftware.cavecraft.GameScreen;
14 import ru.deadsoftware.cavecraft.game.objects.Player;
16 public class GameRenderer {
18 private GameProc gameProc;
20 public Vector3 camTargetPos;
21 public OrthographicCamera camera;
22 ShapeRenderer shapeRenderer;
23 SpriteBatch spriteBatch;
25 public GameRenderer(GameProc gameProc) {
26 Gdx.gl.glClearColor(0f,.6f,.6f,1f);
27 this.gameProc = gameProc;
28 camera = new OrthographicCamera();
29 camera.setToOrtho(true, 360,
30 360*((float)GameScreen.getHeight()/GameScreen.getWidth()));
31 camera.position.x=0;
32 camera.position.y=0;
33 camTargetPos = camera.position.cpy();
34 shapeRenderer = new ShapeRenderer();
35 shapeRenderer.setProjectionMatrix(camera.combined);
36 shapeRenderer.setAutoShapeType(true);
37 spriteBatch = new SpriteBatch();
38 spriteBatch.setProjectionMatrix(camera.combined);
39 }
41 private void drawWorld() {
42 int minX = (int) (camera.position.x/16);
43 int minY = (int) (camera.position.y/16);
44 int maxX = (int) ((camera.position.x+camera.viewportWidth)/16)+1;
45 int maxY = (int) ((camera.position.y+camera.viewportHeight)/16)+1;
46 if (minX<0) minX=0;
47 if (minY<0) minY=0;
48 if (maxX>gameProc.world.getWidth()) maxX = gameProc.world.getWidth();
49 if (maxY>gameProc.world.getHeight()) maxY = gameProc.world.getHeight();
50 for (int y=minY; y<maxY; y++) {
51 for (int x=minX; x<maxX; x++) {
52 if (gameProc.world.getForeMap(x,y)>0) {
53 spriteBatch.draw(
54 Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).getTexture(),
55 x * 16 - camera.position.x,y * 16 - camera.position.y);
56 } else if (gameProc.world.getBackMap(x,y)>0) {
57 spriteBatch.draw(
58 Items.BLOCKS.getValueAt(gameProc.world.getBackMap(x,y)).getTexture(),
59 x * 16 - camera.position.x,y * 16 - camera.position.y);
60 Assets.shade.setPosition(x * 16 - camera.position.x,y * 16 - camera.position.y);
61 Assets.shade.draw(spriteBatch);
62 }
63 }
64 }
65 }
67 private void drawPlayer(Player pl) {
68 spriteBatch.draw(Assets.playerSkin[pl.dir],
69 pl.position.x - camera.position.x, pl.position.y - camera.position.y);
70 }
72 private void drawGUI() {
73 spriteBatch.draw(Assets.invBar, camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2,
74 0);//camera.viewportHeight - Assets.invBar.getRegionHeight());
75 for (int i=0; i<8; i++) {
76 if (gameProc.player.inventory[i]>0) {
77 spriteBatch.draw(Items.BLOCKS.getValueAt(gameProc.player.inventory[i]).getTexture(),
78 camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2+3+i*20,
79 3);
80 }
81 }
82 spriteBatch.draw(Assets.invCur,
83 camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2 - 1 + 20*gameProc.invSlot,
84 -1);
86 if (CaveGame.TOUCH) {
87 spriteBatch.draw(Assets.touchArrows[0],26,camera.viewportHeight-52);
88 spriteBatch.draw(Assets.touchArrows[1],0,camera.viewportHeight-26);
89 spriteBatch.draw(Assets.touchArrows[2],26,camera.viewportHeight-26);
90 spriteBatch.draw(Assets.touchArrows[3],52,camera.viewportHeight-26);
91 spriteBatch.draw(Assets.touchSpace, camera.viewportWidth/2-52, camera.viewportHeight-26);
92 spriteBatch.draw(Assets.touchLMB, camera.viewportWidth-52, camera.viewportHeight-26);
93 spriteBatch.draw(Assets.touchRMB, camera.viewportWidth-26, camera.viewportHeight-26);
94 spriteBatch.draw(Assets.touchToggleMode, 78, camera.viewportHeight-26);
95 if (gameProc.ctrlMode==1) {
96 Assets.shade.setPosition(83, camera.viewportHeight-21);
97 Assets.shade.draw(spriteBatch);
98 }
99 }
102 public void render() {
103 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
105 spriteBatch.begin();
106 drawWorld();
107 drawPlayer(gameProc.player);
108 drawGUI();
109 spriteBatch.end();
111 if (gameProc.ctrlMode==1) {
112 shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
113 shapeRenderer.setColor(Color.ORANGE);
114 shapeRenderer.set(ShapeRenderer.ShapeType.Line);
115 shapeRenderer.rect(gameProc.cursorX * 16 - camera.position.x,
116 gameProc.cursorY * 16 - camera.position.y, 16, 16);
117 shapeRenderer.end();