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); } }