minecraft2D/Render.pde
zinchenko291 6297508e1f Добавил тени, масштаб, иконку
Ура, теперь всё работает. Баг с тенью был исправлен. Добавил возможность масштабировать.
2021-05-13 22:43:13 +05:00

102 lines
3.8 KiB
Plaintext

class Render { //<>// //<>// //<>// //<>// //<>//
private Textures textures;
private World world;
Render(World world) {
this.textures = new Textures();
this.world = world;
}
public void renderChunk(int x, int y) {
Chunk chunk = world.getChunk(x, y);
beginShape();
texture(textures.getTexture(chunk.getHight()));
vertex(x * settings.chunkSize, y * settings.chunkSize, 0, 0);
vertex((1 + x) * settings.chunkSize, y * settings.chunkSize, settings.chunkSize, 0);
vertex((1 + x) * settings.chunkSize, (1 + y) * settings.chunkSize, settings.chunkSize, settings.chunkSize);
vertex(x * settings.chunkSize, (1 + y) * settings.chunkSize, 0, settings.chunkSize);
endShape();
CHUNK_DEBUG(chunk);
}
public void renderShadow(int x, int y) {
if (!settings.renderShadows) return;
Chunk[][] chunks = new Chunk[3][3];
for (int i = 0; i < chunks.length; i++) {
for (int j = 0; j < chunks[0].length; j++) {
chunks[i][j] = world.getChunk(j - 1 + x, i - 1 + y);
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (chunks[i][j] != null && chunks[i][j].getHight() < chunks[1][1].getHight()) {
PImage shadow = null;
boolean angle = false;
// | 00 01 02 | | 4 0 5 |
// | 10 -- 12 | | 3 - 1 |
// | 20 21 22 | | 7 2 6 |
if (i == 0 && j == 0) {
shadow = textures.getShadow(4);
angle = true;
} else if (i == 0 && j == 1) {
shadow = textures.getShadow(0);
} else if (i == 0 && j == 2) {
shadow = textures.getShadow(5);
angle = true;
} else if (i == 1 && j == 0) {
shadow = textures.getShadow(3);
} else if (i == 1 && j == 2) {
shadow = textures.getShadow(1);
} else if (i == 2 && j == 0) {
shadow = textures.getShadow(7);
angle = true;
} else if (i == 2 && j == 1) {
shadow = textures.getShadow(2);
} else if (i == 2 && j == 2) {
shadow = textures.getShadow(6);
angle = true;
} else {
shadow = textures.getNoTexture();
}
if (angle) {
if (j == 0 && i == 0
&& (chunks[i][j].getHight() < chunks[0][1].getHight()
|| chunks[i][j].getHight() < chunks[1][0].getHight())) continue;
else if (j == 2 && i == 0
&& (chunks[i][j].getHight() < chunks[0][1].getHight()
|| chunks[i][j].getHight() < chunks[1][2].getHight())) continue;
else if (j == 0 && i == 2
&& (chunks[i][j].getHight() < chunks[1][0].getHight()
|| chunks[i][j].getHight() < chunks[2][1].getHight())) continue;
else if (j == 2 && i == 2
&& (chunks[i][j].getHight() < chunks[2][1].getHight()
|| chunks[i][j].getHight() < chunks[1][2].getHight())) continue;
}
beginShape();
if (mouseX > x * settings.chunkSize && mouseX < (x + 1) * settings.chunkSize
&& mouseY > y * settings.chunkSize && mouseY < (y + 1) * settings.chunkSize
&& settings.SHADOW_DEBUG)
{
fill(100, 50, 150);
} else {
texture(shadow);
}
vertex((j - 1 + x) * settings.chunkSize, (i - 1 + y) * settings.chunkSize, 0, 0);
vertex((j + x) * settings.chunkSize, (i - 1 + y) * settings.chunkSize, settings.chunkSize, 0);
vertex((j + x) * settings.chunkSize, (i + y) * settings.chunkSize, settings.chunkSize, settings.chunkSize);
vertex((j - 1 + x)* settings.chunkSize, (i + y) * settings.chunkSize, 0, settings.chunkSize);
endShape();
}
}
}
}
}