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
.Vector2
;
10 import com
.badlogic
.gdx
.math
.Vector3
;
11 import ru
.deadsoftware
.cavecraft
.Assets
;
12 import ru
.deadsoftware
.cavecraft
.CaveGame
;
13 import ru
.deadsoftware
.cavecraft
.Items
;
14 import ru
.deadsoftware
.cavecraft
.GameScreen
;
15 import ru
.deadsoftware
.cavecraft
.game
.mobs
.Mob
;
16 import ru
.deadsoftware
.cavecraft
.game
.objects
.Player
;
18 public class GameRenderer
{
20 private GameProc gameProc
;
22 public OrthographicCamera camera
, fontCam
;
23 ShapeRenderer shapeRenderer
;
24 SpriteBatch spriteBatch
, fontBatch
;
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()));
33 shapeRenderer
= new ShapeRenderer();
34 shapeRenderer
.setProjectionMatrix(camera
.combined
);
35 shapeRenderer
.setAutoShapeType(true);
36 spriteBatch
= new SpriteBatch();
37 spriteBatch
.setProjectionMatrix(camera
.combined
);
39 fontCam
= new OrthographicCamera();
40 fontCam
.setToOrtho(true, GameScreen
.getWidth(), GameScreen
.getHeight());
41 fontBatch
= new SpriteBatch();
42 fontBatch
.setProjectionMatrix(fontCam
.combined
);
45 private void setFontColor(int r
, int g
, int b
) {
46 Assets
.minecraftFont
.setColor(r
/255f, g
/255f, b
/255f, 1f);
49 private void drawString(String str
, float x
, float y
) {
50 Assets
.minecraftFont
.draw(fontBatch
, str
, x
, y
);
53 private void drawWorld() {
54 int minX
= (int) (camera
.position
.x
/16);
55 int minY
= (int) (camera
.position
.y
/16);
56 int maxX
= (int) ((camera
.position
.x
+camera
.viewportWidth
)/16)+1;
57 int maxY
= (int) ((camera
.position
.y
+camera
.viewportHeight
)/16)+1;
60 if (maxX
>gameProc
.world
.getWidth()) maxX
= gameProc
.world
.getWidth();
61 if (maxY
>gameProc
.world
.getHeight()) maxY
= gameProc
.world
.getHeight();
62 for (int y
=minY
; y
<maxY
; y
++) {
63 for (int x
=minX
; x
<maxX
; x
++) {
64 if (gameProc
.world
.getForeMap(x
,y
)>0 &&
65 !Items
.BLOCKS
.getValueAt(gameProc
.world
.getForeMap(x
,y
)).foreground
) {
67 Items
.BLOCKS
.getValueAt(gameProc
.world
.getForeMap(x
,y
)).getTexture(),
68 x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
69 } else if (gameProc
.world
.getBackMap(x
,y
)>0) {
71 Items
.BLOCKS
.getValueAt(gameProc
.world
.getBackMap(x
,y
)).getTexture(),
72 x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
73 Assets
.shade
.setPosition(x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
74 Assets
.shade
.draw(spriteBatch
);
80 private void drawWorldForeground(){
81 int minX
= (int) (camera
.position
.x
/16);
82 int minY
= (int) (camera
.position
.y
/16);
83 int maxX
= (int) ((camera
.position
.x
+camera
.viewportWidth
)/16)+1;
84 int maxY
= (int) ((camera
.position
.y
+camera
.viewportHeight
)/16)+1;
87 if (maxX
>gameProc
.world
.getWidth()) maxX
= gameProc
.world
.getWidth();
88 if (maxY
>gameProc
.world
.getHeight()) maxY
= gameProc
.world
.getHeight();
89 for (int y
=minY
; y
<maxY
; y
++) {
90 for (int x
=minX
; x
<maxX
; x
++) {
91 if (gameProc
.world
.getForeMap(x
,y
)>0 &&
92 Items
.BLOCKS
.getValueAt(gameProc
.world
.getForeMap(x
,y
)).foreground
) {
94 Items
.BLOCKS
.getValueAt(gameProc
.world
.getForeMap(x
,y
)).getTexture(),
95 x
* 16 - camera
.position
.x
,y
* 16 - camera
.position
.y
);
101 private void drawMob(Mob mob
) {
102 mob
.draw(spriteBatch
,
103 mob
.position
.x
-camera
.position
.x
, mob
.position
.y
-camera
.position
.y
);
106 private void drawPlayer(Player pl
) {
107 if (!pl
.moveX
.equals(Vector2
.Zero
) || Assets
.playerSkin
[0][2].getRotation()!=0) {
108 Assets
.playerSkin
[0][2].rotate(Mob
.ANIM_SPEED
);
109 Assets
.playerSkin
[1][2].rotate(-Mob
.ANIM_SPEED
);
110 Assets
.playerSkin
[0][3].rotate(-Mob
.ANIM_SPEED
);
111 Assets
.playerSkin
[1][3].rotate(Mob
.ANIM_SPEED
);
113 Assets
.playerSkin
[0][2].setRotation(0);
114 Assets
.playerSkin
[1][2].setRotation(0);
115 Assets
.playerSkin
[0][3].setRotation(0);
116 Assets
.playerSkin
[1][3].setRotation(0);
118 if (Assets
.playerSkin
[0][2].getRotation()>=60 || Assets
.playerSkin
[0][2].getRotation()<=-60)
119 Mob
.ANIM_SPEED
= -Mob
.ANIM_SPEED
;
120 Assets
.playerSkin
[1][2].setPosition(
121 pl
.position
.x
- camera
.position
.x
- 6,
122 pl
.position
.y
- camera
.position
.y
);
123 Assets
.playerSkin
[1][2].draw(spriteBatch
);
124 Assets
.playerSkin
[1][3].setPosition(
125 pl
.position
.x
- camera
.position
.x
- 6,
126 pl
.position
.y
- camera
.position
.y
+ 10);
127 Assets
.playerSkin
[1][3].draw(spriteBatch
);
128 Assets
.playerSkin
[0][3].setPosition(
129 pl
.position
.x
- camera
.position
.x
- 6,
130 pl
.position
.y
- camera
.position
.y
+ 10);
131 Assets
.playerSkin
[0][3].draw(spriteBatch
);
133 spriteBatch
.draw(Assets
.playerSkin
[pl
.dir
][0],
134 pl
.position
.x
- camera
.position
.x
- 2, pl
.position
.y
- camera
.position
.y
- 2);
135 spriteBatch
.draw(Assets
.playerSkin
[pl
.dir
][1],
136 pl
.position
.x
- camera
.position
.x
- 2, pl
.position
.y
- camera
.position
.y
+ 8);
138 Assets
.playerSkin
[0][2].setPosition(
139 pl
.position
.x
- camera
.position
.x
- 6,
140 pl
.position
.y
- camera
.position
.y
);
141 Assets
.playerSkin
[0][2].draw(spriteBatch
);
144 private void drawGUI() {
145 spriteBatch
.draw(Assets
.invBar
, camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2, 0);
146 for (int i
=0; i
<9; i
++) {
147 if (gameProc
.player
.inventory
[i
]>0) {
148 spriteBatch
.draw(Items
.BLOCKS
.getValueAt(gameProc
.player
.inventory
[i
]).getTexture(),
149 camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2+3+i
*20,
153 spriteBatch
.draw(Assets
.invCur
,
154 camera
.viewportWidth
/2 - Assets
.invBar
.getRegionWidth()/2 - 1 + 20*gameProc
.invSlot
,
157 if (CaveGame
.TOUCH
) {
158 spriteBatch
.draw(Assets
.touchArrows
[0],26,camera
.viewportHeight
-52);
159 spriteBatch
.draw(Assets
.touchArrows
[1],0,camera
.viewportHeight
-26);
160 spriteBatch
.draw(Assets
.touchArrows
[2],26,camera
.viewportHeight
-26);
161 spriteBatch
.draw(Assets
.touchArrows
[3],52,camera
.viewportHeight
-26);
162 spriteBatch
.draw(Assets
.touchSpace
, camera
.viewportWidth
/2-52, camera
.viewportHeight
-26);
163 spriteBatch
.draw(Assets
.touchLMB
, camera
.viewportWidth
-52, camera
.viewportHeight
-26);
164 spriteBatch
.draw(Assets
.touchRMB
, camera
.viewportWidth
-26, camera
.viewportHeight
-26);
165 spriteBatch
.draw(Assets
.touchToggleMode
, 78, camera
.viewportHeight
-26);
166 if (gameProc
.ctrlMode
==1) {
167 Assets
.shade
.setPosition(83, camera
.viewportHeight
-21);
168 Assets
.shade
.draw(spriteBatch
);
173 public void render() {
174 Gdx
.gl
.glClear(GL20
.GL_COLOR_BUFFER_BIT
);
178 for (Mob mob
: gameProc
.mobs
) drawMob(mob
);
179 drawPlayer(gameProc
.player
);
180 drawWorldForeground();
185 if (gameProc
.ctrlMode
==1) {
186 shapeRenderer
.begin(ShapeRenderer
.ShapeType
.Line
);
187 shapeRenderer
.setColor(Color
.ORANGE
);
188 shapeRenderer
.set(ShapeRenderer
.ShapeType
.Line
);
189 shapeRenderer
.rect(gameProc
.cursorX
* 16 - camera
.position
.x
,
190 gameProc
.cursorY
* 16 - camera
.position
.y
, 16, 16);
195 setFontColor(255,255,255);
196 drawString("CaveCraft "+CaveGame
.VERSION
, 0, 0);
197 drawString("FPS: "+GameScreen
.FPS
, 0, 20);
198 drawString("X: "+(int)(gameProc
.player
.position
.x
/16), 0, 40);
199 drawString("Y: "+(int)(gameProc
.player
.position
.y
/16), 0, 60);
200 drawString("Block: "+
201 Items
.BLOCKS
.keys().toArray().get(gameProc
.world
.getForeMap(
202 (int)((gameProc
.player
.position
.x
+gameProc
.player
.texWidth
/2)/16),
203 (int)(gameProc
.player
.position
.y
/16+2))),