Renamed Scatter to Feature and added a generation feature interface

- Renamed SurfaceScatterGenerator to SurfaceFeatureGenerator
- Renamed PlanetScatterGenerator to PlanetFeatureGenerator
- Added a very basic interface for adding generation features
- Removed debug leftovers from PlayerManager and VisionManager
This commit is contained in:
OLEGSHA 2021-04-02 21:29:09 +03:00
parent 7ecdfdfb4d
commit 2d3d250f92
Signed by: OLEGSHA
GPG Key ID: E57A4B08D64AFF7A
6 changed files with 109 additions and 28 deletions

View File

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

View File

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

View File

@ -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 <https://www.gnu.org/licenses/>.
*/
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<SurfaceFeature> 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);
}
}

View File

@ -38,7 +38,7 @@ public class TestPlanetGenerator extends AbstractWorldGenerator<Boolean> {
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<Boolean> {
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<Boolean> {
ChunkData chunk = world.getChunk(chunkPos);
if (!isChunkReady(chunk.getGenerationHint())) {
scatterGenerator.generateScatter(chunk);
featureGenerator.generateFeatures(chunk);
}
return chunk;

View File

@ -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 abstract class SurfaceFeature extends Namespaced {
public void generateScatter(ChunkData chunk) {
chunk.setGenerationHint(true);
public SurfaceFeature(String id) {
super(id);
}
public abstract void process(ChunkData chunk, Random random);
}

View File

@ -15,30 +15,31 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
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;
private final Collection<SurfaceFeature> features; // TODO make ordered
public PlanetScatterGenerator(TestPlanetGenerator generator) {
this.parent = generator;
this.surfaceGenerator = new SurfaceScatterGenerator();
public SurfaceFeatureGenerator(Collection<SurfaceFeature> features) {
this.features = new ArrayList<>(features);
}
public TestPlanetGenerator getGenerator() {
return parent;
public void generateFeatures(ChunkData chunk) {
Random random = new Random(CoordinatePacker.pack3IntsIntoLong(chunk.getPosition()) /* ^ seed*/);
for (SurfaceFeature feature : features) {
feature.process(chunk, random);
}
public void generateScatter(ChunkData chunk) {
chunk.setBlock(new Vec3i(8, 8, 8), BlockDataRegistry.getInstance().get("Test:Log"), false);
surfaceGenerator.generateScatter(chunk);
chunk.setGenerationHint(true);
}
}