Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor: remove dependency on AnotherWorld #38

Merged
merged 6 commits into from
Aug 17, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions module.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,22 +5,23 @@
"displayName": "Growing Flora",
"description": "Module providing mechanisms for growing plants (trees, bushes, crops)",
"dependencies": [
{
"id": "AnotherWorld",
"minVersion": "1.0.0"
},
{
"id": "BiomesAPI",
"minVersion": "4.0.0"
},
{
"id": "ClimateConditions",
"minVersion": "1.0.0"
"minVersion": "1.0.0",
"optional": "true"
},
{
"id": "CoreAssets",
"minVersion": "2.0.1"
},
{
"id": "CoreWorlds",
"minVersion": "2.0.1"
},
{
"id": "Inventory",
"minVersion": "1.1.0"
Expand Down
24 changes: 24 additions & 0 deletions src/main/java/org/terasology/gf/EnvironmentParametersSystem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// Copyright 2021 The Terasology Foundation
// SPDX-License-Identifier: Apache-2.0

package org.terasology.gf;

import org.joml.Vector3ic;
import org.terasology.climateConditions.ClimateConditionsSystem;
import org.terasology.engine.entitySystem.systems.BaseComponentSystem;
import org.terasology.engine.entitySystem.systems.RegisterSystem;
import org.terasology.engine.registry.In;
import org.terasology.engine.registry.Share;
import org.terasology.gf.util.EnvironmentLocalParameters;
import org.terasology.gf.util.LocalParameters;

@RegisterSystem
@Share(EnvironmentParametersSystem.class)
public class EnvironmentParametersSystem extends BaseComponentSystem {
@In
private ClimateConditionsSystem climateConditionsSystem;

public LocalParameters createLocalParameters(Vector3ic position) {
return new EnvironmentLocalParameters(climateConditionsSystem, position);
}
}
18 changes: 14 additions & 4 deletions src/main/java/org/terasology/gf/PlantGrowingSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
*/
package org.terasology.gf;

import org.joml.Vector3ic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.climateConditions.ClimateConditionsSystem;
import org.terasology.engine.core.Time;
import org.terasology.engine.entitySystem.entity.EntityManager;
import org.terasology.engine.entitySystem.entity.EntityRef;
Expand All @@ -33,6 +33,8 @@
import org.terasology.engine.world.WorldProvider;
import org.terasology.engine.world.block.BlockComponent;
import org.terasology.gf.generator.PlantGrowthDefinition;
import org.terasology.gf.util.LocalParameters;
import org.terasology.gf.util.StaticLocalParameters;
import org.terasology.randomUpdate.RandomUpdateEvent;

/**
Expand All @@ -56,15 +58,23 @@ public class PlantGrowingSystem extends BaseComponentSystem {
@In
private DelayManager delayManager;
@In
private ClimateConditionsSystem environmentSystem;
private EnvironmentParametersSystem environmentSystem;

private LocalParameters createLocalParameters(Vector3ic position) {
if (environmentSystem != null) {
return environmentSystem.createLocalParameters(position);
} else {
return new StaticLocalParameters();
}
}

@ReceiveEvent
public void updatePlant(DelayedActionTriggeredEvent event, EntityRef plant, LivingPlantComponent plantComponent, BlockComponent blockComponent) {
if (event.getActionId().equals(UPDATE_PLANT_ACTION_ID)) {
PerformanceMonitor.startActivity("GrowingFlora - Updating plant");
try {
PlantGrowthDefinition plantDefinition = plantRegistry.getPlantGrowthDefinition(plantComponent.type);
Long updateDelay = plantDefinition.requestedUpdatePlant(worldProvider, environmentSystem, blockEntityRegistry, plant);
Long updateDelay = plantDefinition.requestedUpdatePlant(worldProvider, createLocalParameters(blockComponent.getPosition()), blockEntityRegistry, plant);
if (updateDelay != null) {
delayManager.addDelayedAction(plant, UPDATE_PLANT_ACTION_ID, updateDelay);
}
Expand All @@ -79,7 +89,7 @@ public void randomPlantUpdate(RandomUpdateEvent event, EntityRef plant, LivingPl
PerformanceMonitor.startActivity("GrowingFlora - Updating plant");
try {
PlantGrowthDefinition plantDefinition = plantRegistry.getPlantGrowthDefinition(plantComponent.type);
if (plantDefinition.randomUpdatePlant(worldProvider, environmentSystem, blockEntityRegistry, plant)) {
if (plantDefinition.randomUpdatePlant(worldProvider, createLocalParameters(blockComponent.getPosition()), blockEntityRegistry, plant)) {
if (delayManager.hasDelayedAction(plant, UPDATE_PLANT_ACTION_ID)) {
delayManager.cancelDelayedAction(plant, UPDATE_PLANT_ACTION_ID);
}
Expand Down
21 changes: 15 additions & 6 deletions src/main/java/org/terasology/gf/SaplingInitializeSystem.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,9 @@
*/
package org.terasology.gf;

import org.joml.Vector3i;
import org.joml.Vector3ic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.terasology.climateConditions.ClimateConditionsSystem;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent;
import org.terasology.engine.entitySystem.event.ReceiveEvent;
Expand All @@ -33,6 +32,8 @@
import org.terasology.engine.world.WorldProvider;
import org.terasology.engine.world.block.BlockComponent;
import org.terasology.gf.generator.PlantGrowthDefinition;
import org.terasology.gf.util.LocalParameters;
import org.terasology.gf.util.StaticLocalParameters;

/**
* @author Marcin Sciesinski <marcins78@gmail.com>
Expand All @@ -51,7 +52,15 @@ public class SaplingInitializeSystem extends BaseComponentSystem {
@In
private DelayManager delayManager;
@In
private ClimateConditionsSystem climateConditionsSystem;
private EnvironmentParametersSystem environmentSystem;

private LocalParameters createLocalParameters(Vector3ic position) {
if (environmentSystem != null) {
return environmentSystem.createLocalParameters(position);
} else {
return new StaticLocalParameters();
}
}

// To avoid stack overflow
private boolean processingEvent;
Expand All @@ -69,10 +78,10 @@ public void plantedSapling(OnAddedComponent event, EntityRef sapling, LivingPlan
if (!processingEvent) {
processingEvent = true;
try {
Vector3i blockLocation = blockComponent.getPosition(new Vector3i());
Vector3ic blockLocation = blockComponent.getPosition();
String saplingType = livingPlant.type;
PlantGrowthDefinition plantDefinition = plantRegistry.getPlantGrowthDefinition(saplingType);
Long updateDelay = plantDefinition.initializePlantedPlant(worldProvider, climateConditionsSystem, blockEntityRegistry, sapling);
Long updateDelay = plantDefinition.initializePlantedPlant(worldProvider, createLocalParameters(blockLocation), blockEntityRegistry, sapling);
EntityRef blockEntity = blockEntityRegistry.getBlockEntityAt(blockLocation);
if (blockEntity.hasComponent(PlantedSaplingComponent.class)) {
blockEntity.removeComponent(PlantedSaplingComponent.class);
Expand All @@ -94,7 +103,7 @@ public void delayedInitialization(DelayedActionTriggeredEvent event, EntityRef s
PerformanceMonitor.startActivity("GrowingFlora - Initializing sapling");
processingEvent = true;
try {
Vector3i blockLocation = blockComponent.getPosition(new Vector3i());
Vector3ic blockLocation = blockComponent.getPosition();
String saplingType = generatedSapling.type;
PlantGrowthDefinition plantDefinition = plantRegistry.getPlantGrowthDefinition(saplingType);
Long updateDelay = plantDefinition.initializeGeneratedPlant(worldProvider, blockEntityRegistry, sapling);
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/terasology/gf/generator/BushFacet.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package org.terasology.gf.generator;

import org.terasology.anotherWorld.SparseObjectFacet3D;
import org.terasology.engine.world.generation.facets.base.SparseObjectFacet3D;
import org.terasology.engine.world.block.BlockRegion;
import org.terasology.engine.world.generation.Border3D;

Expand Down
18 changes: 10 additions & 8 deletions src/main/java/org/terasology/gf/generator/BushProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.gf.generator;

import org.joml.Vector3i;
import org.terasology.engine.utilities.procedural.NoiseTable;
import org.joml.Vector3ic;
import org.terasology.engine.utilities.procedural.WhiteNoise;
import org.terasology.engine.world.block.BlockRegionc;
import org.terasology.engine.world.generation.Facet;
import org.terasology.engine.world.generation.FacetProvider;
import org.terasology.engine.world.generation.GeneratingRegion;
Expand All @@ -19,28 +20,29 @@
@Requires(@Facet(FloraFacet.class))
public class BushProvider implements FacetProvider {
private float amount;
private NoiseTable noise;
private WhiteNoise noise;

public BushProvider(float amount) {
this.amount = amount;
}

@Override
public void setSeed(long seed) {
noise = new NoiseTable(seed + 28873);
noise = new WhiteNoise(seed + 28873);
}

@Override
public void process(GeneratingRegion region) {
BushFacet facet = new BushFacet(region.getRegion(), region.getBorderForFacet(BushFacet.class));
FloraFacet floraFacet = region.getRegionFacet(FloraFacet.class);
BlockRegionc bushRegion = facet.getWorldRegion();

for (Map.Entry<Vector3i, Float> positionValue : floraFacet.getFlaggedPositions().entrySet()) {
Vector3i pos = positionValue.getKey();
for (Map.Entry<Vector3ic, Float> positionValue : floraFacet.getWorldEntries().entrySet()) {
Vector3ic pos = positionValue.getKey();
float value = positionValue.getValue();

if (noise.noise(pos.x, pos.y, pos.z) / 256f < amount) {
facet.setFlag(pos, value);
if (bushRegion.contains(pos) && noise.noise(pos.x(), pos.y(), pos.z()) / 256f < amount) {
facet.setWorld(pos, value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
package org.terasology.gf.generator;

import org.joml.Vector3i;
import org.joml.Vector3ic;
import org.terasology.engine.entitySystem.entity.EntityRef;
import org.terasology.engine.world.BlockEntityRegistry;
import org.terasology.engine.world.WorldProvider;
Expand All @@ -22,7 +22,7 @@ public interface ConnectedPlantGrowthDefinition extends PlantGrowthDefinition {
* @param plant
* @return
*/
boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant);
boolean isBlockOwnedByPlant(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant);

/**
* Returns a collection of locations that are dependand on existance of this block in this plant.
Expand All @@ -34,5 +34,5 @@ public interface ConnectedPlantGrowthDefinition extends PlantGrowthDefinition {
* @param plant
* @return
*/
Collection<Vector3i> getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3i block, EntityRef plant);
Collection<Vector3ic> getBlocksConnectedTo(WorldProvider worldProvider, BlockEntityRegistry blockEntityRegistry, Vector3ic block, EntityRef plant);
}
2 changes: 1 addition & 1 deletion src/main/java/org/terasology/gf/generator/FloraFacet.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
*/
package org.terasology.gf.generator;

import org.terasology.anotherWorld.SparseObjectFacet3D;
import org.terasology.engine.world.generation.facets.base.SparseObjectFacet3D;
import org.terasology.engine.world.block.BlockRegion;
import org.terasology.engine.world.generation.Border3D;

Expand Down
Loading