DEADSOFTWARE

6a41ea26f1a25e56005adb997dea168b9f1714ec
[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.mobs.Mob;
15 import ru.deadsoftware.cavecraft.game.objects.Player;
17 public class GameRenderer {
19 private GameProc gameProc;
21 public Vector3 camTargetPos;
22 public OrthographicCamera camera;
23 ShapeRenderer shapeRenderer;
24 SpriteBatch spriteBatch;
26 public GameRenderer(GameProc gameProc) {
27 Gdx.gl.glClearColor(0f,.6f,.6f,1f);
28 this.gameProc = gameProc;
29 camera = new OrthographicCamera();
30 camera.setToOrtho(true, 360,
31 360*((float)GameScreen.getHeight()/GameScreen.getWidth()));
32 camera.position.x=0;
33 camera.position.y=0;
34 camTargetPos = camera.position.cpy();
35 shapeRenderer = new ShapeRenderer();
36 shapeRenderer.setProjectionMatrix(camera.combined);
37 shapeRenderer.setAutoShapeType(true);
38 spriteBatch = new SpriteBatch();
39 spriteBatch.setProjectionMatrix(camera.combined);
40 }
42 private void drawWorld() {
43 int minX = (int) (camera.position.x/16);
44 int minY = (int) (camera.position.y/16);
45 int maxX = (int) ((camera.position.x+camera.viewportWidth)/16)+1;
46 int maxY = (int) ((camera.position.y+camera.viewportHeight)/16)+1;
47 if (minX<0) minX=0;
48 if (minY<0) minY=0;
49 if (maxX>gameProc.world.getWidth()) maxX = gameProc.world.getWidth();
50 if (maxY>gameProc.world.getHeight()) maxY = gameProc.world.getHeight();
51 for (int y=minY; y<maxY; y++) {
52 for (int x=minX; x<maxX; x++) {
53 if (gameProc.world.getForeMap(x,y)>0) {
54 spriteBatch.draw(
55 Items.BLOCKS.getValueAt(gameProc.world.getForeMap(x,y)).getTexture(),
56 x * 16 - camera.position.x,y * 16 - camera.position.y);
57 } else if (gameProc.world.getBackMap(x,y)>0) {
58 spriteBatch.draw(
59 Items.BLOCKS.getValueAt(gameProc.world.getBackMap(x,y)).getTexture(),
60 x * 16 - camera.position.x,y * 16 - camera.position.y);
61 Assets.shade.setPosition(x * 16 - camera.position.x,y * 16 - camera.position.y);
62 Assets.shade.draw(spriteBatch);
63 }
64 }
65 }
66 }
68 private void drawMob(Mob mob) {
69 spriteBatch.draw(Assets.playerSkin[mob.dir],
70 mob.position.x - camera.position.x, mob.position.y - camera.position.y);
71 }
73 private void drawPlayer(Player pl) {
74 spriteBatch.draw(Assets.playerSkin[pl.dir],
75 pl.position.x - camera.position.x, pl.position.y - camera.position.y);
76 }
78 private void drawGUI() {
79 spriteBatch.draw(Assets.invBar, camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2,
80 0);//camera.viewportHeight - Assets.invBar.getRegionHeight());
81 for (int i=0; i<8; i++) {
82 if (gameProc.player.inventory[i]>0) {
83 spriteBatch.draw(Items.BLOCKS.getValueAt(gameProc.player.inventory[i]).getTexture(),
84 camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2+3+i*20,
85 3);
86 }
87 }
88 spriteBatch.draw(Assets.invCur,
89 camera.viewportWidth/2 - Assets.invBar.getRegionWidth()/2 - 1 + 20*gameProc.invSlot,
90 -1);
92 if (CaveGame.TOUCH) {
93 spriteBatch.draw(Assets.touchArrows[0],26,camera.viewportHeight-52);
94 spriteBatch.draw(Assets.touchArrows[1],0,camera.viewportHeight-26);
95 spriteBatch.draw(Assets.touchArrows[2],26,camera.viewportHeight-26);
96 spriteBatch.draw(Assets.touchArrows[3],52,camera.viewportHeight-26);
97 spriteBatch.draw(Assets.touchSpace, camera.viewportWidth/2-52, camera.viewportHeight-26);
98 spriteBatch.draw(Assets.touchLMB, camera.viewportWidth-52, camera.viewportHeight-26);
99 spriteBatch.draw(Assets.touchRMB, camera.viewportWidth-26, camera.viewportHeight-26);
100 spriteBatch.draw(Assets.touchToggleMode, 78, camera.viewportHeight-26);
101 if (gameProc.ctrlMode==1) {
102 Assets.shade.setPosition(83, camera.viewportHeight-21);
103 Assets.shade.draw(spriteBatch);
108 public void render() {
109 Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
111 spriteBatch.begin();
112 drawWorld();
113 for (Mob mob : gameProc.mobs) {
114 drawMob(mob);
116 drawPlayer(gameProc.player);
117 drawGUI();
118 spriteBatch.end();
120 if (gameProc.ctrlMode==1) {
121 shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
122 shapeRenderer.setColor(Color.ORANGE);
123 shapeRenderer.set(ShapeRenderer.ShapeType.Line);
124 shapeRenderer.rect(gameProc.cursorX * 16 - camera.position.x,
125 gameProc.cursorY * 16 - camera.position.y, 16, 16);
126 shapeRenderer.end();