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
.math
.Vector2
;
9 import ru
.deadsoftware
.cavecraft
.*;
10 import ru
.deadsoftware
.cavecraft
.game
.mobs
.Mob
;
11 import ru
.deadsoftware
.cavecraft
.game
.objects
.Player
;
13 public class GameRenderer
extends Renderer
{
15 private GameProc gameProc
;
17 public OrthographicCamera fontCam
;
18 SpriteBatch fontBatch
;
20 public GameRenderer(GameProc gameProc
) {
21 Gdx
.gl
.glClearColor(0f,.6f,.6f,1f);
22 this.gameProc
= gameProc
;
23 camera
= new OrthographicCamera();
24 if (!CaveGame
.TOUCH
) {
25 camera
.setToOrtho(true, 480,
26 480 * ((float) GameScreen
.getHeight() / GameScreen
.getWidth()));
28 camera
.setToOrtho(true, 320,
29 320 * ((float) GameScreen
.getHeight() / GameScreen
.getWidth()));
31 shapeRenderer
= new ShapeRenderer();
32 shapeRenderer
.setProjectionMatrix(camera
.combined
);
33 shapeRenderer
.setAutoShapeType(true);
34 spriteBatch
= new SpriteBatch();
35 spriteBatch
.setProjectionMatrix(camera
.combined
);
37 fontCam
= new OrthographicCamera();
38 fontCam
.setToOrtho(true, GameScreen
.getWidth(), GameScreen
.getHeight());
39 fontBatch
= new SpriteBatch();
40 fontBatch
.setProjectionMatrix(fontCam
.combined
);
43 private void setFontColor(int r
, int g
, int b
) {
44 Assets
.minecraftFont
.setColor(r
/255f, g
/255f, b
/255f, 1f);
47 private void drawString(String str
, float x
, float y
) {
48 Assets
.minecraftFont
.draw(fontBatch
, str
, x
, y
);
51 private void drawWorldBackground() {
52 int minX
= (int) (camera
.position
.x
/16)-1;
53 int minY
= (int) (camera
.position
.y
/16)-1;
54 int maxX
= (int) ((camera
.position
.x
+camera
.viewportWidth
)/16)+1;
55 int maxY
= (int) ((camera
.position
.y
+camera
.viewportHeight
)/16)+1;
57 if (maxY
>gameProc
.world
.getHeight()) maxY
= gameProc
.world
.getHeight();
58 for (int y
=minY
; y
<maxY
; y
++) {
59 for (int x
=minX
; x
<maxX
; x
++) {
60 if (gameProc
.world
.getForeMap(x
,y
)>0){
61 } else if (gameProc
.world
.getBackMap(x
,y
)>0) {
63 Items
.BLOCKS
.getValueAt(gameProc
.world
.getBackMap(x
,y
)).getTexture(),
64 x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
65 Assets
.shade
.setPosition(x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
66 Assets
.shade
.draw(spriteBatch
);
72 private void drawWorldForeground(){
73 int minX
= (int) (camera
.position
.x
/16)-1;
74 int minY
= (int) (camera
.position
.y
/16)-1;
75 int maxX
= (int) ((camera
.position
.x
+camera
.viewportWidth
)/16)+1;
76 int maxY
= (int) ((camera
.position
.y
+camera
.viewportHeight
)/16)+1;
78 if (maxY
>gameProc
.world
.getHeight()) maxY
= gameProc
.world
.getHeight();
79 for (int y
=minY
; y
<maxY
; y
++) {
80 for (int x
=minX
; x
<maxX
; x
++) {
81 if (gameProc
.world
.getForeMap(x
,y
)>0) {
83 Items
.BLOCKS
.getValueAt(gameProc
.world
.getForeMap(x
,y
)).getTexture(),
84 x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
90 private void drawMob(Mob mob
) {
92 mob
.position
.x
-camera
.position
.x
-gameProc
.world
.getWidth()*16, mob
.position
.y
-camera
.position
.y
);
94 mob
.position
.x
-camera
.position
.x
, mob
.position
.y
-camera
.position
.y
);
96 mob
.position
.x
-camera
.position
.x
+gameProc
.world
.getWidth()*16, mob
.position
.y
-camera
.position
.y
);
99 private void drawPlayer(Player pl
) {
100 if (!pl
.moveX
.equals(Vector2
.Zero
) || Assets
.playerSprite
[0][2].getRotation()!=0) {
101 Assets
.playerSprite
[0][2].rotate(Player
.ANIM_SPEED
);
102 Assets
.playerSprite
[1][2].rotate(-Player
.ANIM_SPEED
);
103 Assets
.playerSprite
[0][3].rotate(-Player
.ANIM_SPEED
);
104 Assets
.playerSprite
[1][3].rotate(Player
.ANIM_SPEED
);
106 Assets
.playerSprite
[0][2].setRotation(0);
107 Assets
.playerSprite
[1][2].setRotation(0);
108 Assets
.playerSprite
[0][3].setRotation(0);
109 Assets
.playerSprite
[1][3].setRotation(0);
111 if (Assets
.playerSprite
[0][2].getRotation()>=60 || Assets
.playerSprite
[0][2].getRotation()<=-60)
112 Player
.ANIM_SPEED
= -Player
.ANIM_SPEED
;
115 Assets
.playerSprite
[1][2].setPosition(
116 pl
.position
.x
- camera
.position
.x
- 6,
117 pl
.position
.y
- camera
.position
.y
);
118 Assets
.playerSprite
[1][2].draw(spriteBatch
);
120 Assets
.playerSprite
[1][3].setPosition(
121 pl
.position
.x
- camera
.position
.x
- 6,
122 pl
.position
.y
- camera
.position
.y
+ 10);
123 Assets
.playerSprite
[1][3].draw(spriteBatch
);
125 Assets
.playerSprite
[0][3].setPosition(
126 pl
.position
.x
- camera
.position
.x
- 6,
127 pl
.position
.y
- camera
.position
.y
+ 10);
128 Assets
.playerSprite
[0][3].draw(spriteBatch
);
130 spriteBatch
.draw(Assets
.playerSprite
[pl
.dir
][0],
131 pl
.position
.x
- camera
.position
.x
- 2,
132 pl
.position
.y
- camera
.position
.y
- 2);
134 spriteBatch
.draw(Assets
.playerSprite
[pl
.dir
][1],
135 pl
.position
.x
- camera
.position
.x
- 2, pl
.position
.y
- camera
.position
.y
+ 8);
137 Assets
.playerSprite
[0][2].setPosition(
138 pl
.position
.x
- camera
.position
.x
- 6,
139 pl
.position
.y
- camera
.position
.y
);
140 Assets
.playerSprite
[0][2].draw(spriteBatch
);
143 private void drawCreative() {
144 float x
= camera
.viewportWidth
/2-Assets
.creativeInv
.getRegionWidth()/2;
145 float y
= camera
.viewportHeight
/2-Assets
.creativeInv
.getRegionHeight()/2;
146 spriteBatch
.draw(Assets
.creativeInv
, x
, y
);
147 spriteBatch
.draw(Assets
.creativeScroll
, x
+156, y
+18);
148 for (int i
=1; i
<Items
.BLOCKS
.size
; i
++) {
149 spriteBatch
.draw(Items
.BLOCKS
.getValueAt(i
).getTexture(),x
+8+(i
%8)*18,
152 for (int i
=0; i
<9; i
++) {
153 if (gameProc
.player
.inventory
[i
]>0)
154 spriteBatch
.draw(Items
.BLOCKS
.getValueAt(gameProc
.player
.inventory
[i
]).getTexture(),
155 x
+8+i
*18, y
+Assets
.creativeInv
.getRegionHeight()-24);
159 private void drawGUI() {
160 if (gameProc
.world
.getForeMap(gameProc
.cursorX
, gameProc
.cursorY
)>0 ||
161 gameProc
.world
.getBackMap(gameProc
.cursorX
, gameProc
.cursorY
)>0 ||
162 gameProc
.ctrlMode
==1)
163 spriteBatch
.draw(Assets
.guiCur
,
164 gameProc
.cursorX
*16-camera
.position
.x
,
165 gameProc
.cursorY
*16-camera
.position
.y
);
166 spriteBatch
.draw(Assets
.invBar
, camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2, 0);
167 for (int i
=0; i
<9; i
++) {
168 if (gameProc
.player
.inventory
[i
]>0) {
169 spriteBatch
.draw(Items
.BLOCKS
.getValueAt(gameProc
.player
.inventory
[i
]).getTexture(),
170 camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2+3+i
*20,
174 spriteBatch
.draw(Assets
.invBarCur
,
175 camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2 - 1 + 20*gameProc
.invSlot
,
179 private void drawTouchGui() {
180 spriteBatch
.draw(Assets
.touchArrows
[0],26,camera
.viewportHeight
-52);
181 spriteBatch
.draw(Assets
.touchArrows
[1],0,camera
.viewportHeight
-26);
182 spriteBatch
.draw(Assets
.touchArrows
[2],26,camera
.viewportHeight
-26);
183 spriteBatch
.draw(Assets
.touchArrows
[3],52,camera
.viewportHeight
-26);
184 spriteBatch
.draw(Assets
.touchLMB
, camera
.viewportWidth
-52, camera
.viewportHeight
-26);
185 spriteBatch
.draw(Assets
.touchRMB
, camera
.viewportWidth
-26, camera
.viewportHeight
-26);
186 spriteBatch
.draw(Assets
.touchToggleMode
, 78, camera
.viewportHeight
-26);
189 private void drawGamePlay() {
190 drawWorldBackground();
192 for (Mob mob
: gameProc
.mobs
) drawMob(mob
);
193 drawPlayer(gameProc
.player
);
194 drawWorldForeground();
199 public void render() {
200 Gdx
.gl
.glClear(GL20
.GL_COLOR_BUFFER_BIT
);
203 switch (CaveGame
.STATE
) {
207 case GAME_CREATIVE_INV
:
214 if (CaveGame
.TOUCH
) {
221 setFontColor(255,255,255);
222 drawString("CaveCraft "+CaveGame
.VERSION
, 0, 0);
223 drawString("FPS: "+GameScreen
.FPS
, 0, 20);
224 drawString("X: "+(int)(gameProc
.player
.position
.x
/16), 0, 40);
225 drawString("Y: "+(gameProc
.world
.getHeight()-(int)(gameProc
.player
.position
.y
/16)), 0, 60);
226 drawString("Seed: "+WorldGen
.getSeed(), 0, 80);
227 drawString("Mobs: "+gameProc
.mobs
.size
, 0, 100);