diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java
index 10799e0..f762778 100644
--- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java
+++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java
@@ -45,7 +45,6 @@ public class PlayerManager {
public void addPlayer(Player player) {
this.players.add(player);
- System.out.println("PlayerManager.addPlayer()");
getServer().postEvent(new PlayerJoinedEvent.Immutable(getServer(), player));
}
diff --git a/src/main/java/ru/windcorp/progressia/server/management/load/VisionManager.java b/src/main/java/ru/windcorp/progressia/server/management/load/VisionManager.java
index cdf2d8e..b4d2a93 100644
--- a/src/main/java/ru/windcorp/progressia/server/management/load/VisionManager.java
+++ b/src/main/java/ru/windcorp/progressia/server/management/load/VisionManager.java
@@ -45,13 +45,11 @@ public class VisionManager {
@Subscribe
private void onPlayerJoined(PlayerJoinedEvent event) {
- System.out.println("VisionManager.onPlayerJoined()");
getVision(event.getPlayer(), true);
}
@Subscribe
private void onPlayerLeft(PlayerLeftEvent event) {
- System.out.println("VisionManager.onPlayerLeft()");
visions.remove(event.getPlayer());
}
diff --git a/src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetFeatureGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetFeatureGenerator.java
new file mode 100644
index 0000000..79f0593
--- /dev/null
+++ b/src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetFeatureGenerator.java
@@ -0,0 +1,78 @@
+/*
+ * Progressia
+ * Copyright (C) 2020-2021 Wind Corporation and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package ru.windcorp.progressia.test.gen.planet;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Random;
+
+import glm.vec._3.i.Vec3i;
+import ru.windcorp.progressia.common.util.VectorUtil;
+import ru.windcorp.progressia.common.world.ChunkData;
+import ru.windcorp.progressia.common.world.block.BlockDataRegistry;
+import ru.windcorp.progressia.test.gen.surface.SurfaceFeature;
+import ru.windcorp.progressia.test.gen.surface.SurfaceFeatureGenerator;
+
+public class PlanetFeatureGenerator {
+
+ private final TestPlanetGenerator parent;
+ private final SurfaceFeatureGenerator surfaceGenerator;
+
+ public PlanetFeatureGenerator(TestPlanetGenerator generator) {
+ this.parent = generator;
+
+ Collection features = new ArrayList<>();
+ features.add(new SurfaceFeature("Test:GlassFeature") {
+ @Override
+ public void process(ChunkData chunk, Random random) {
+
+ chunk.setBlockRel(new Vec3i(8, 8, 8), BlockDataRegistry.getInstance().get("Test:Glass"), true);
+
+ }
+ });
+
+ this.surfaceGenerator = new SurfaceFeatureGenerator(features);
+ }
+
+ public TestPlanetGenerator getGenerator() {
+ return parent;
+ }
+
+ public void generateFeatures(ChunkData chunk) {
+ if (isOrdinaryChunk(chunk.getPosition())) {
+ generateOrdinaryFeatures(chunk);
+ } else {
+ generateBorderFeatures(chunk);
+ }
+ }
+
+ private boolean isOrdinaryChunk(Vec3i chunkPos) {
+ Vec3i sorted = VectorUtil.sortAfterAbs(chunkPos, null);
+ return sorted.x != sorted.y;
+ }
+
+ private void generateOrdinaryFeatures(ChunkData chunk) {
+ surfaceGenerator.generateFeatures(chunk);
+ }
+
+ private void generateBorderFeatures(ChunkData chunk) {
+ // Do nothing
+ chunk.setGenerationHint(true);
+ }
+
+}
diff --git a/src/main/java/ru/windcorp/progressia/test/gen/planet/TestPlanetGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/planet/TestPlanetGenerator.java
index 3f548e9..7206edc 100644
--- a/src/main/java/ru/windcorp/progressia/test/gen/planet/TestPlanetGenerator.java
+++ b/src/main/java/ru/windcorp/progressia/test/gen/planet/TestPlanetGenerator.java
@@ -38,7 +38,7 @@ public class TestPlanetGenerator extends AbstractWorldGenerator {
private final Planet planet;
private final PlanetTerrainGenerator terrainGenerator;
- private final PlanetScatterGenerator scatterGenerator;
+ private final PlanetFeatureGenerator featureGenerator;
public TestPlanetGenerator(String id, Planet planet, WorldLogic world) {
super(id, Boolean.class, "Test:PlanetGravityModel");
@@ -50,7 +50,7 @@ public class TestPlanetGenerator extends AbstractWorldGenerator {
model.configure(planet.getGravityModelSettings());
this.terrainGenerator = new PlanetTerrainGenerator(this);
- this.scatterGenerator = new PlanetScatterGenerator(this);
+ this.featureGenerator = new PlanetFeatureGenerator(this);
}
/**
@@ -86,7 +86,7 @@ public class TestPlanetGenerator extends AbstractWorldGenerator {
ChunkData chunk = world.getChunk(chunkPos);
if (!isChunkReady(chunk.getGenerationHint())) {
- scatterGenerator.generateScatter(chunk);
+ featureGenerator.generateFeatures(chunk);
}
return chunk;
diff --git a/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceScatterGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeature.java
similarity index 76%
rename from src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceScatterGenerator.java
rename to src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeature.java
index a9f08d9..649b414 100644
--- a/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceScatterGenerator.java
+++ b/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeature.java
@@ -17,12 +17,17 @@
*/
package ru.windcorp.progressia.test.gen.surface;
+import java.util.Random;
+
+import ru.windcorp.progressia.common.util.namespaces.Namespaced;
import ru.windcorp.progressia.common.world.ChunkData;
-public class SurfaceScatterGenerator {
-
- public void generateScatter(ChunkData chunk) {
- chunk.setGenerationHint(true);
+public abstract class SurfaceFeature extends Namespaced {
+
+ public SurfaceFeature(String id) {
+ super(id);
}
+
+ public abstract void process(ChunkData chunk, Random random);
}
diff --git a/src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetScatterGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeatureGenerator.java
similarity index 51%
rename from src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetScatterGenerator.java
rename to src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeatureGenerator.java
index a2af1d4..753256a 100644
--- a/src/main/java/ru/windcorp/progressia/test/gen/planet/PlanetScatterGenerator.java
+++ b/src/main/java/ru/windcorp/progressia/test/gen/surface/SurfaceFeatureGenerator.java
@@ -15,30 +15,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package ru.windcorp.progressia.test.gen.planet;
+package ru.windcorp.progressia.test.gen.surface;
-import glm.vec._3.i.Vec3i;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Random;
+
+import ru.windcorp.progressia.common.util.CoordinatePacker;
import ru.windcorp.progressia.common.world.ChunkData;
-import ru.windcorp.progressia.common.world.block.BlockDataRegistry;
-import ru.windcorp.progressia.test.gen.surface.SurfaceScatterGenerator;
-public class PlanetScatterGenerator {
+public class SurfaceFeatureGenerator {
- private final TestPlanetGenerator parent;
- private final SurfaceScatterGenerator surfaceGenerator;
-
- public PlanetScatterGenerator(TestPlanetGenerator generator) {
- this.parent = generator;
- this.surfaceGenerator = new SurfaceScatterGenerator();
+ private final Collection features; // TODO make ordered
+
+ public SurfaceFeatureGenerator(Collection features) {
+ this.features = new ArrayList<>(features);
}
- public TestPlanetGenerator getGenerator() {
- return parent;
- }
-
- public void generateScatter(ChunkData chunk) {
- chunk.setBlock(new Vec3i(8, 8, 8), BlockDataRegistry.getInstance().get("Test:Log"), false);
- surfaceGenerator.generateScatter(chunk);
+ public void generateFeatures(ChunkData chunk) {
+ Random random = new Random(CoordinatePacker.pack3IntsIntoLong(chunk.getPosition()) /* ^ seed*/);
+
+ for (SurfaceFeature feature : features) {
+ feature.process(chunk, random);
+ }
+
+ chunk.setGenerationHint(true);
}
}