From abd8d9eebbd52e2a40b196e98269d122ce337a57 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Sun, 28 Feb 2021 23:31:57 +0300 Subject: [PATCH] Moved some functionality into WorldGenerator - WorldGenerators now suggest a spawn location - WorldGenerators are no longer responsible for adding chunks --- .../ru/windcorp/progressia/server/PlayerManager.java | 2 +- .../windcorp/progressia/server/world/WorldLogic.java | 4 +++- .../server/world/generation/WorldGenerator.java | 3 +++ .../java/ru/windcorp/progressia/test/TestContent.java | 3 --- .../progressia/test/gen/TestWorldGenerator.java | 10 +++++++--- .../test/gen/planet/TestPlanetGenerator.java | 7 ++++++- 6 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java index 8e34b49..60b07f1 100644 --- a/src/main/java/ru/windcorp/progressia/server/PlayerManager.java +++ b/src/main/java/ru/windcorp/progressia/server/PlayerManager.java @@ -60,7 +60,7 @@ public class PlayerManager { EntityData player = EntityDataRegistry.getInstance().create("Test:Player"); player.setEntityId(TestContent.PLAYER_ENTITY_ID); - player.setPosition(TestContent.SPAWN); + player.setPosition(getServer().getWorld().getGenerator().suggestSpawnLocation()); player.setUpVector(new Vec3(0, 0, 1)); player.setLookingAt(new Vec3(2, 1, 0)); diff --git a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java index 5931e34..bf5da5e 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java +++ b/src/main/java/ru/windcorp/progressia/server/world/WorldLogic.java @@ -106,7 +106,9 @@ public class WorldLogic } public ChunkData generate(Vec3i chunkPos) { - return getGenerator().generate(chunkPos, getData()); + ChunkData chunk = getGenerator().generate(chunkPos, getData()); + getData().addChunk(chunk); + return chunk; } public ChunkLogic getChunk(ChunkData chunkData) { diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java index 6a85e45..f31cbc4 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/WorldGenerator.java @@ -22,6 +22,7 @@ import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; +import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.util.namespaces.Namespaced; import ru.windcorp.progressia.common.world.ChunkData; @@ -45,5 +46,7 @@ public abstract class WorldGenerator extends Namespaced { public abstract boolean isChunkReady(Object hint); public abstract GravityModel getGravityModel(); + + public abstract Vec3 suggestSpawnLocation(); } diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index 464dc46..dd72aa8 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -30,7 +30,6 @@ import java.util.function.Consumer; import org.lwjgl.glfw.GLFW; -import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.client.ClientState; import ru.windcorp.progressia.client.audio.SoundEffect; @@ -66,8 +65,6 @@ public class TestContent { public static final String PLAYER_LOGIN = "Sasha"; public static final long PLAYER_ENTITY_ID = 0x42; public static final long STATIE_ENTITY_ID = 0xDEADBEEF; -// public static final Vec3 SPAWN = new Vec3(8, 8, 880); - public static final Vec3 SPAWN = new Vec3(0, 0, 66); public static final List PLACEABLE_BLOCKS = new ArrayList<>(); public static final List PLACEABLE_TILES = new ArrayList<>(); diff --git a/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java b/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java index 9d4ff6e..e66d9b7 100644 --- a/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java +++ b/src/main/java/ru/windcorp/progressia/test/gen/TestWorldGenerator.java @@ -23,6 +23,7 @@ import java.io.DataOutputStream; import java.io.IOException; import java.util.Random; +import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.util.VectorUtil; import ru.windcorp.progressia.common.util.Vectors; @@ -54,6 +55,11 @@ public class TestWorldGenerator extends AbstractWorldGenerator { } }); } + + @Override + public Vec3 suggestSpawnLocation() { + return new Vec3(8, 8, 880); + } @Override protected Boolean doReadGenerationHint(DataInputStream input) throws IOException, DecodingException { @@ -72,9 +78,7 @@ public class TestWorldGenerator extends AbstractWorldGenerator { @Override public ChunkData generate(Vec3i chunkPos, WorldData world) { - ChunkData chunk = generateUnpopulated(chunkPos, world); - world.addChunk(chunk); - return chunk; + return generateUnpopulated(chunkPos, world); } private ChunkData generateUnpopulated(Vec3i chunkPos, WorldData world) { 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 edc1811..ea45d1e 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 @@ -22,6 +22,7 @@ import java.io.DataOutputStream; import java.io.IOException; import java.util.Arrays; +import glm.vec._3.Vec3; import glm.vec._3.i.Vec3i; import ru.windcorp.progressia.common.util.VectorUtil; import ru.windcorp.progressia.common.world.ChunkData; @@ -47,6 +48,11 @@ public class TestPlanetGenerator extends AbstractWorldGenerator { throw new IllegalArgumentException("planetRadius too small, must be at least 32 m"); } } + + @Override + public Vec3 suggestSpawnLocation() { + return new Vec3(0, 0, 66); + } @Override protected Boolean doReadGenerationHint(DataInputStream input) throws IOException, DecodingException { @@ -70,7 +76,6 @@ public class TestPlanetGenerator extends AbstractWorldGenerator { generate(chunk); chunk.setGenerationHint(true); - world.addChunk(chunk); return chunk; }