diff --git a/Camera.pde b/Camera.pde index 5fb33da..915e564 100644 --- a/Camera.pde +++ b/Camera.pde @@ -1,2 +1,16 @@ class Camera { + private int x; + private int y; + + Camera(int x, int y) { + this.x = x; + this.y = y; + } + + public void setX(int x) { this.x = x; } + public void setY(int y) { this.y = y; } + + public PVector getXY() { + return new PVector(x, y); + } } diff --git a/Chunk.pde b/Chunk.pde index a7b9fca..24b39a0 100644 --- a/Chunk.pde +++ b/Chunk.pde @@ -1,23 +1,23 @@ class Chunk { private int x; private int y; - private int level; - - Chunk(int _x, int _y, int _level) { - x = _x; - y = _y; - level = _level; + private int hight; + + Chunk(int x, int y, int hight) { + this.x = x; + this.y = y; + this.hight = hight; } - - int getX() { + + public int getX() { return x; } - - int getY() { + + public int getY() { return y; } - - int getLevel() { - return level; + + public int getHight() { + return hight; } } diff --git a/Generator.pde b/Generator.pde index 5b9783a..f056187 100644 --- a/Generator.pde +++ b/Generator.pde @@ -1,3 +1,17 @@ class Generator { + private long seed; + private float noiseScale; + private int maxHight; + Generator(long seed, float noiseScale) { + this.seed = seed; + this.noiseScale = noiseScale; + } + + public Chunk generateChunk(int x, int y) { + noiseSeed(seed); + + int hight = (int)map(noise(x, y) * (1 / noiseScale), 0, 1, 0, maxHight); + return new Chunk(x, y, hight); + } } diff --git a/Render.pde b/Render.pde index f77a18e..fce6e54 100644 --- a/Render.pde +++ b/Render.pde @@ -1,3 +1,21 @@ 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(); + } } diff --git a/Settings.pde b/Settings.pde new file mode 100644 index 0000000..01620dc --- /dev/null +++ b/Settings.pde @@ -0,0 +1,3 @@ +static class Settings { + static public int chunkSize = 32; +} diff --git a/Textures.pde b/Textures.pde index a45ea09..4f43d08 100644 --- a/Textures.pde +++ b/Textures.pde @@ -1,3 +1,16 @@ class Textures { + private PImage[] textures; + Textures() { + this.textures = new PImage[] { + loadImage("textures/water.png"), + loadImage("textures/sand.png"), + loadImage("textures/grass.png"), + loadImage("textures/stone.png"), + loadImage("textures/snow.png") + }; + } + public PImage getTexture(int i){ + return textures[i]; + } } diff --git a/World.pde b/World.pde index 2568ca2..8afbf5d 100644 --- a/World.pde +++ b/World.pde @@ -1,3 +1,32 @@ class World { - + private ArrayList> chunks; + private Generator gen; + + World(long seed, float noiseScale) { + this.gen = new Generator(seed, noiseScale); + this.chunks = new ArrayList>(); + } + + public void setChunk(Chunk chunk, int x, int y) { + try { + chunks.get(x).add(y, chunk); + } + catch(Exception e) { + chunks.add(x, new ArrayList()); + } + finally { + chunks.get(x).add(y, chunk); + } + } + + public Chunk getChunk(int x, int y) { + try { + chunks.get(x).get(y); + } + catch(Exception e) { + Chunk newChunk = gen.generateChunk(x, y); + setChunk(newChunk, x, y); + } + return chunks.get(x).get(y); + } } diff --git a/minecraft2D.pde b/minecraft2D.pde index 0cb5dc9..ec86aea 100644 --- a/minecraft2D.pde +++ b/minecraft2D.pde @@ -1,9 +1,3 @@ -Generator gen; -Render render; -Camera camera; -Textures textures; -World world; - void settings() { size(800, 800, P2D); } diff --git a/readme.md b/readme.md index 24e4364..4e07eac 100644 --- a/readme.md +++ b/readme.md @@ -2,4 +2,10 @@ Попытка сделать minecraft 2D с видом сверху на processing. -В планах сделать генерируемый в реальном времени мир. Может быть добавить возможность сохранять миры. \ No newline at end of file +В планах сделать +- Генерируемый в реальном времени мир. +- Добавить возможность сохранять миры. +- Сделать систему логирования. +- Возможность управления камерой стрелочками. + +Осталось доделать класс камеры, дальше только надеяться на рабочий прототип. diff --git a/textures/grass.png b/textures/grass.png new file mode 100644 index 0000000..495961a Binary files /dev/null and b/textures/grass.png differ diff --git a/textures/sand.png b/textures/sand.png new file mode 100644 index 0000000..126109e Binary files /dev/null and b/textures/sand.png differ diff --git a/textures/snow.png b/textures/snow.png new file mode 100644 index 0000000..6026f6f Binary files /dev/null and b/textures/snow.png differ diff --git a/textures/stone.png b/textures/stone.png new file mode 100644 index 0000000..eca7be5 Binary files /dev/null and b/textures/stone.png differ diff --git a/textures/water.png b/textures/water.png new file mode 100644 index 0000000..5fa811c Binary files /dev/null and b/textures/water.png differ