From 111e421f4459d9ef7f8f44514b10b1ad7d08daab Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Sun, 14 Jun 2020 21:26:13 +0530 Subject: [PATCH 1/6] added genome component to bushes --- module.txt | 3 +- .../edibleFlora/events/OnSpawn.java | 33 +++++++ .../genome/GenomeAuthoritySystem.java | 88 +++++++++++++++++++ .../worldGenerator/BushRasterizer.java | 10 +++ 4 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/terasology/edibleFlora/events/OnSpawn.java create mode 100644 src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java diff --git a/module.txt b/module.txt index 965df03..46ec4ac 100644 --- a/module.txt +++ b/module.txt @@ -9,7 +9,8 @@ { "id": "CoreWorlds", "minVersion": "1.1.0" }, { "id": "Hunger", "minVersion": "1.1.0" }, { "id": "SimpleFarming", "minVersion": "2.1.0" }, - { "id": "Thirst", "minVersion": "1.0.0" } + { "id": "Thirst", "minVersion": "1.0.0" }, + { "id": "Genome", "minVersion": "1.0.0" } ], "serverSideOnly": false, "isAsset": true diff --git a/src/main/java/org/terasology/edibleFlora/events/OnSpawn.java b/src/main/java/org/terasology/edibleFlora/events/OnSpawn.java new file mode 100644 index 0000000..1165cee --- /dev/null +++ b/src/main/java/org/terasology/edibleFlora/events/OnSpawn.java @@ -0,0 +1,33 @@ +/* + * Copyright 2020 MovingBlocks + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.terasology.edibleFlora.events; + +import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.entitySystem.event.Event; +import org.terasology.protobuf.EntityData; + +public class OnSpawn implements Event { + private EntityRef bush; + + public OnSpawn(EntityRef bush) { + this.bush = bush; + } + + public EntityRef getBush() { + return bush; + } +} diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java new file mode 100644 index 0000000..f4f1347 --- /dev/null +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -0,0 +1,88 @@ +/* + * Copyright 2020 MovingBlocks + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.terasology.edibleFlora.genome; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.terasology.edibleFlora.events.OnSpawn; +import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.entitySystem.event.EventPriority; +import org.terasology.entitySystem.event.ReceiveEvent; +import org.terasology.entitySystem.systems.BaseComponentSystem; +import org.terasology.entitySystem.systems.RegisterMode; +import org.terasology.entitySystem.systems.RegisterSystem; +import org.terasology.genome.component.GenomeComponent; +import org.terasology.logic.characters.CharacterHeldItemComponent; +import org.terasology.logic.console.commandSystem.annotations.Command; +import org.terasology.logic.console.commandSystem.annotations.Sender; +import org.terasology.network.ClientComponent; +import org.terasology.simpleFarming.components.BushDefinitionComponent; +import org.terasology.simpleFarming.events.ProduceCreated; +import org.terasology.world.block.BlockComponent; + +/** + * System managing genetics of all plants + */ +@RegisterSystem(RegisterMode.AUTHORITY) +public class GenomeAuthoritySystem extends BaseComponentSystem { + + private static final Logger LOGGER = LoggerFactory.getLogger(GenomeAuthoritySystem.class); + + @ReceiveEvent + public void onSpawn(OnSpawn event, EntityRef bush) { + GenomeComponent genomeComponent = new GenomeComponent(); + //this will be a seed based random value + genomeComponent.genes = "TTAZ"; + genomeComponent.genomeId = "tester"; + bush.addOrSaveComponent(genomeComponent); + } + + @ReceiveEvent + public void onProduceCreated(ProduceCreated event, EntityRef producer) { + //check if it has genome comp, otherwise give random below + LOGGER.info("inside"); + GenomeComponent genomeComponent = new GenomeComponent(); + EntityRef produce = event.getProduce(); + if (producer.hasComponent(GenomeComponent.class)) { + genomeComponent.genomeId = producer.getComponent(GenomeComponent.class).genomeId; + genomeComponent.genes = producer.getComponent(GenomeComponent.class).genes; + LOGGER.info(genomeComponent.genes); + produce.addOrSaveComponent(genomeComponent); + } else { + LOGGER.info("Dont have a genome component, giving a new one now"); + genomeComponent.genomeId = "TesterTesting"; + genomeComponent.genes = "TTttZ"; + produce.addOrSaveComponent(genomeComponent); + } + + } + + @Command(shortDescription = "Prints genome of held item if possible.") + public String heldGenomeCheck(@Sender EntityRef client) { + EntityRef character = client.getComponent(ClientComponent.class).character; + if (character.hasComponent(CharacterHeldItemComponent.class)) { + EntityRef selectedItem = character.getComponent(CharacterHeldItemComponent.class).selectedItem; + if (selectedItem.hasComponent(GenomeComponent.class)) { + return selectedItem.getComponent(GenomeComponent.class).genes; + } else { + return "Held item does not have a Genome Component"; + } + } else { + return "Command not valid for current conditions."; + } + } +} diff --git a/src/main/java/org/terasology/edibleFlora/worldGenerator/BushRasterizer.java b/src/main/java/org/terasology/edibleFlora/worldGenerator/BushRasterizer.java index 2e8cda0..df879e1 100644 --- a/src/main/java/org/terasology/edibleFlora/worldGenerator/BushRasterizer.java +++ b/src/main/java/org/terasology/edibleFlora/worldGenerator/BushRasterizer.java @@ -16,9 +16,14 @@ package org.terasology.edibleFlora.worldGenerator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.terasology.core.world.generator.facets.FloraFacet; +import org.terasology.edibleFlora.events.OnSpawn; +import org.terasology.entitySystem.entity.EntityRef; import org.terasology.entitySystem.prefab.Prefab; import org.terasology.entitySystem.prefab.PrefabManager; +import org.terasology.genome.component.GenomeComponent; import org.terasology.math.geom.BaseVector3i; import org.terasology.registry.CoreRegistry; import org.terasology.registry.In; @@ -51,6 +56,8 @@ public class BushRasterizer implements WorldRasterizerPlugin { private Block air; private List bushes = new ArrayList<>(); + private static final Logger LOGGER = LoggerFactory.getLogger("BushRasterizer.class"); + @Override public void initialize() { blockManager = CoreRegistry.get(BlockManager.class); @@ -82,7 +89,10 @@ public void generateChunk(CoreChunk chunk, Region chunkRegion) { facet.getRelativeEntries().keySet().stream().forEach((BaseVector3i pos) -> { if (random.nextFloat() < 0.02 && chunk.getBlock(pos).equals(air)) { Block bush = bushes.get(random.nextInt(bushes.size())); + EntityRef bushEntity = bush.getEntity(); + bushEntity.send(new OnSpawn(bushEntity)); chunk.setBlock(pos, bush); + //LOGGER.info(bush.getEntity().getComponent(GenomeComponent.class).genes); } }); } From a5f832d4abea79617ab91a8369b54aa2181104b8 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Wed, 17 Jun 2020 03:02:25 +0530 Subject: [PATCH 2/6] added gene cycle --- .../genome/GenomeAuthoritySystem.java | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java index f4f1347..6961cb4 100644 --- a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -16,6 +16,7 @@ package org.terasology.edibleFlora.genome; +import com.google.common.base.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.edibleFlora.events.OnSpawn; @@ -25,23 +26,41 @@ import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterMode; import org.terasology.entitySystem.systems.RegisterSystem; +import org.terasology.genome.GenomeDefinition; +import org.terasology.genome.GenomeRegistry; +import org.terasology.genome.breed.BreedingAlgorithm; +import org.terasology.genome.breed.ContinuousBreedingAlgorithm; +import org.terasology.genome.breed.mutator.GeneMutator; +import org.terasology.genome.breed.mutator.VocabularyGeneMutator; import org.terasology.genome.component.GenomeComponent; +import org.terasology.genome.genomeMap.SeedBasedGenomeMap; import org.terasology.logic.characters.CharacterHeldItemComponent; import org.terasology.logic.console.commandSystem.annotations.Command; import org.terasology.logic.console.commandSystem.annotations.Sender; import org.terasology.network.ClientComponent; +import org.terasology.registry.In; import org.terasology.simpleFarming.components.BushDefinitionComponent; import org.terasology.simpleFarming.events.ProduceCreated; +import org.terasology.utilities.random.FastRandom; +import org.terasology.world.WorldProvider; import org.terasology.world.block.BlockComponent; +import javax.annotation.Nullable; + /** * System managing genetics of all plants */ @RegisterSystem(RegisterMode.AUTHORITY) public class GenomeAuthoritySystem extends BaseComponentSystem { + @In + private GenomeRegistry genomeRegistry; + @In + private WorldProvider worldProvider; private static final Logger LOGGER = LoggerFactory.getLogger(GenomeAuthoritySystem.class); + private static String genomeRegistryPrefix = "EdibleFlora:"; + @ReceiveEvent public void onSpawn(OnSpawn event, EntityRef bush) { GenomeComponent genomeComponent = new GenomeComponent(); @@ -61,13 +80,20 @@ public void onProduceCreated(ProduceCreated event, EntityRef producer) { genomeComponent.genomeId = producer.getComponent(GenomeComponent.class).genomeId; genomeComponent.genes = producer.getComponent(GenomeComponent.class).genes; LOGGER.info(genomeComponent.genes); - produce.addOrSaveComponent(genomeComponent); } else { + FastRandom rand = new FastRandom(); LOGGER.info("Dont have a genome component, giving a new one now"); - genomeComponent.genomeId = "TesterTesting"; - genomeComponent.genes = "TTttZ"; - produce.addOrSaveComponent(genomeComponent); + genomeComponent.genomeId = producer.getParentPrefab().getName(); + LOGGER.info("Parent prefab is " + producer.getParentPrefab().getName()); +// genomeComponent.genes = "TTttZ"; + if (genomeRegistry.getGenomeDefinition(genomeComponent.genomeId) == null) { + LOGGER.info("Making new genome map for "+genomeComponent.genomeId); + addPropertyMap(producer, genomeComponent.genomeId); + } + genomeComponent.genes = + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)); } + produce.addOrSaveComponent(genomeComponent); } @@ -77,7 +103,7 @@ public String heldGenomeCheck(@Sender EntityRef client) { if (character.hasComponent(CharacterHeldItemComponent.class)) { EntityRef selectedItem = character.getComponent(CharacterHeldItemComponent.class).selectedItem; if (selectedItem.hasComponent(GenomeComponent.class)) { - return selectedItem.getComponent(GenomeComponent.class).genes; + return "Has " + selectedItem.getComponent(GenomeComponent.class).genes; } else { return "Held item does not have a Genome Component"; } @@ -85,4 +111,22 @@ public String heldGenomeCheck(@Sender EntityRef client) { return "Command not valid for current conditions."; } } + + private void addPropertyMap(EntityRef entity, String genomeId) { + LOGGER.info("Registering new map for " + genomeId); + SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); + String geneVocabulary = "ABCDEFGHIJK"; + GeneMutator geneMutator = new VocabularyGeneMutator(geneVocabulary); + BreedingAlgorithm continuousBreedingAlgorithm = new ContinuousBreedingAlgorithm(0.3f, geneMutator); + genomeMap.addSeedBasedProperty("filling", 0, 1, 2, Integer.class, continuousBreedingAlgorithm, + new Function() { + @Nullable + @Override + public Integer apply(@Nullable String input) { + return (input.charAt(0) - 'A' + 5); + } + }); + GenomeDefinition genomeDefinition = new GenomeDefinition(continuousBreedingAlgorithm, genomeMap); + genomeRegistry.registerType(genomeId, genomeDefinition); + } } From 75d0d4c68729cc3472243fee2491f36bfff95adb Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Fri, 19 Jun 2020 02:28:11 +0530 Subject: [PATCH 3/6] added on plant genome pass --- .../genome/GenomeAuthoritySystem.java | 38 ++++++++++++++++--- 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java index 6961cb4..0c3b20b 100644 --- a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -40,6 +40,8 @@ import org.terasology.network.ClientComponent; import org.terasology.registry.In; import org.terasology.simpleFarming.components.BushDefinitionComponent; +import org.terasology.simpleFarming.events.BeforePlanted; +import org.terasology.simpleFarming.events.OnSeedPlanted; import org.terasology.simpleFarming.events.ProduceCreated; import org.terasology.utilities.random.FastRandom; import org.terasology.world.WorldProvider; @@ -71,30 +73,54 @@ public void onSpawn(OnSpawn event, EntityRef bush) { } @ReceiveEvent - public void onProduceCreated(ProduceCreated event, EntityRef producer) { + public void onProduceCreated(ProduceCreated event, EntityRef creator) { //check if it has genome comp, otherwise give random below - LOGGER.info("inside"); + EntityRef producer = event.getCreator(); GenomeComponent genomeComponent = new GenomeComponent(); + //might have some issues regarding npe if bush is not sustainable EntityRef produce = event.getProduce(); if (producer.hasComponent(GenomeComponent.class)) { genomeComponent.genomeId = producer.getComponent(GenomeComponent.class).genomeId; genomeComponent.genes = producer.getComponent(GenomeComponent.class).genes; - LOGGER.info(genomeComponent.genes); + LOGGER.info("Has genome component already " + genomeComponent.genes); } else { FastRandom rand = new FastRandom(); LOGGER.info("Dont have a genome component, giving a new one now"); genomeComponent.genomeId = producer.getParentPrefab().getName(); LOGGER.info("Parent prefab is " + producer.getParentPrefab().getName()); -// genomeComponent.genes = "TTttZ"; if (genomeRegistry.getGenomeDefinition(genomeComponent.genomeId) == null) { - LOGGER.info("Making new genome map for "+genomeComponent.genomeId); + LOGGER.info("Making new genome map for " + genomeComponent.genomeId); addPropertyMap(producer, genomeComponent.genomeId); } + //needs to be random based on vocabulary genomeComponent.genes = - "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)); + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + + "ABCDEFGHIJK".charAt(rand.nextInt(9)); +// producer.addOrSaveComponent(genomeComponent); + if (producer!=null) { + producer.addOrSaveComponent(genomeComponent); + } } produce.addOrSaveComponent(genomeComponent); + } + +// @ReceiveEvent(priority = EventPriority.PRIORITY_HIGH) +// public void onBushPlanted(OnSeedPlanted event, EntityRef bush, BushDefinitionComponent bushComponent) { +// LOGGER.info("Ok cool this was called we coooooooo"); +// bush.saveComponent(bush.getComponent(GenomeComponent.class)); +// bush.getComponent(); +// } + @ReceiveEvent + public void onBeforePlantedEvent(BeforePlanted event, EntityRef plant) { + EntityRef seed = event.getSeed(); + if (seed.hasComponent(GenomeComponent.class)) { + LOGGER.info("Seed had genome comp, giving it to plant" + (seed.getComponent(GenomeComponent.class)).genes); + plant.addOrSaveComponent(seed.getComponent(GenomeComponent.class)); + } + else { + LOGGER.info("seed didnt have genome comp"); + } } @Command(shortDescription = "Prints genome of held item if possible.") From 31a9948eb1d9025c8b9c2268ea1c6be44c6485ab Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Tue, 23 Jun 2020 01:13:17 +0530 Subject: [PATCH 4/6] added retain component --- .../edibleFlora/genome/GenomeAuthoritySystem.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java index 0c3b20b..449df4f 100644 --- a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -104,13 +104,6 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { produce.addOrSaveComponent(genomeComponent); } -// @ReceiveEvent(priority = EventPriority.PRIORITY_HIGH) -// public void onBushPlanted(OnSeedPlanted event, EntityRef bush, BushDefinitionComponent bushComponent) { -// LOGGER.info("Ok cool this was called we coooooooo"); -// bush.saveComponent(bush.getComponent(GenomeComponent.class)); -// bush.getComponent(); -// } - @ReceiveEvent public void onBeforePlantedEvent(BeforePlanted event, EntityRef plant) { EntityRef seed = event.getSeed(); From de257dfb69bd9ae314efc930bcbef92575a763d1 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Thu, 25 Jun 2020 14:11:46 +0530 Subject: [PATCH 5/6] finish genome support --- .../genome/GenomeAuthoritySystem.java | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java index 449df4f..8a21baa 100644 --- a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -19,9 +19,7 @@ import com.google.common.base.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.edibleFlora.events.OnSpawn; import org.terasology.entitySystem.entity.EntityRef; -import org.terasology.entitySystem.event.EventPriority; import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterMode; @@ -35,17 +33,20 @@ import org.terasology.genome.component.GenomeComponent; import org.terasology.genome.genomeMap.SeedBasedGenomeMap; import org.terasology.logic.characters.CharacterHeldItemComponent; +import org.terasology.logic.common.RetainComponentsComponent; import org.terasology.logic.console.commandSystem.annotations.Command; import org.terasology.logic.console.commandSystem.annotations.Sender; import org.terasology.network.ClientComponent; import org.terasology.registry.In; import org.terasology.simpleFarming.components.BushDefinitionComponent; +import org.terasology.simpleFarming.events.AddGenomeRetention; import org.terasology.simpleFarming.events.BeforePlanted; -import org.terasology.simpleFarming.events.OnSeedPlanted; +import org.terasology.simpleFarming.events.DoDestroyPlant; import org.terasology.simpleFarming.events.ProduceCreated; +import org.terasology.simpleFarming.events.TransferGenomeEvent; import org.terasology.utilities.random.FastRandom; import org.terasology.world.WorldProvider; -import org.terasology.world.block.BlockComponent; +import org.terasology.world.block.entity.CreateBlockDropsEvent; import javax.annotation.Nullable; @@ -63,18 +64,8 @@ public class GenomeAuthoritySystem extends BaseComponentSystem { private static String genomeRegistryPrefix = "EdibleFlora:"; - @ReceiveEvent - public void onSpawn(OnSpawn event, EntityRef bush) { - GenomeComponent genomeComponent = new GenomeComponent(); - //this will be a seed based random value - genomeComponent.genes = "TTAZ"; - genomeComponent.genomeId = "tester"; - bush.addOrSaveComponent(genomeComponent); - } - @ReceiveEvent public void onProduceCreated(ProduceCreated event, EntityRef creator) { - //check if it has genome comp, otherwise give random below EntityRef producer = event.getCreator(); GenomeComponent genomeComponent = new GenomeComponent(); //might have some issues regarding npe if bush is not sustainable @@ -82,22 +73,18 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { if (producer.hasComponent(GenomeComponent.class)) { genomeComponent.genomeId = producer.getComponent(GenomeComponent.class).genomeId; genomeComponent.genes = producer.getComponent(GenomeComponent.class).genes; - LOGGER.info("Has genome component already " + genomeComponent.genes); } else { FastRandom rand = new FastRandom(); - LOGGER.info("Dont have a genome component, giving a new one now"); genomeComponent.genomeId = producer.getParentPrefab().getName(); - LOGGER.info("Parent prefab is " + producer.getParentPrefab().getName()); if (genomeRegistry.getGenomeDefinition(genomeComponent.genomeId) == null) { - LOGGER.info("Making new genome map for " + genomeComponent.genomeId); + LOGGER.info("Defining new genome map for " + genomeComponent.genomeId); addPropertyMap(producer, genomeComponent.genomeId); } //needs to be random based on vocabulary genomeComponent.genes = "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)); -// producer.addOrSaveComponent(genomeComponent); - if (producer!=null) { + if (producer != null) { producer.addOrSaveComponent(genomeComponent); } } @@ -108,12 +95,20 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { public void onBeforePlantedEvent(BeforePlanted event, EntityRef plant) { EntityRef seed = event.getSeed(); if (seed.hasComponent(GenomeComponent.class)) { - LOGGER.info("Seed had genome comp, giving it to plant" + (seed.getComponent(GenomeComponent.class)).genes); plant.addOrSaveComponent(seed.getComponent(GenomeComponent.class)); } - else { - LOGGER.info("seed didnt have genome comp"); - } + } + + @ReceiveEvent + public void onTransferGenomeEvent(TransferGenomeEvent event, EntityRef bush, BushDefinitionComponent bushComponent, GenomeComponent genomeComponent) { + event.getTransferEntity().addOrSaveComponent(genomeComponent); + } + + @ReceiveEvent + public void addGenomeRetentionEvent(AddGenomeRetention event, EntityRef entity){ + RetainComponentsComponent retainComponentsComponent = new RetainComponentsComponent(); + retainComponentsComponent.components.add(GenomeComponent.class); + entity.addOrSaveComponent(retainComponentsComponent); } @Command(shortDescription = "Prints genome of held item if possible.") @@ -122,7 +117,7 @@ public String heldGenomeCheck(@Sender EntityRef client) { if (character.hasComponent(CharacterHeldItemComponent.class)) { EntityRef selectedItem = character.getComponent(CharacterHeldItemComponent.class).selectedItem; if (selectedItem.hasComponent(GenomeComponent.class)) { - return "Has " + selectedItem.getComponent(GenomeComponent.class).genes; + return selectedItem.getComponent(GenomeComponent.class).genes; } else { return "Held item does not have a Genome Component"; } @@ -132,7 +127,6 @@ public String heldGenomeCheck(@Sender EntityRef client) { } private void addPropertyMap(EntityRef entity, String genomeId) { - LOGGER.info("Registering new map for " + genomeId); SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); String geneVocabulary = "ABCDEFGHIJK"; GeneMutator geneMutator = new VocabularyGeneMutator(geneVocabulary); From fff5e3c8a5fd4bb592947ae62b90a83581a14c02 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Thu, 25 Jun 2020 18:52:17 +0530 Subject: [PATCH 6/6] added javadoc --- .../genome/GenomeAuthoritySystem.java | 45 ++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java index 8a21baa..3c9c483 100644 --- a/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/edibleFlora/genome/GenomeAuthoritySystem.java @@ -33,20 +33,24 @@ import org.terasology.genome.component.GenomeComponent; import org.terasology.genome.genomeMap.SeedBasedGenomeMap; import org.terasology.logic.characters.CharacterHeldItemComponent; +import org.terasology.logic.common.ActivateEvent; import org.terasology.logic.common.RetainComponentsComponent; import org.terasology.logic.console.commandSystem.annotations.Command; import org.terasology.logic.console.commandSystem.annotations.Sender; +import org.terasology.logic.delay.DelayedActionTriggeredEvent; import org.terasology.network.ClientComponent; import org.terasology.registry.In; import org.terasology.simpleFarming.components.BushDefinitionComponent; +import org.terasology.simpleFarming.components.BushGrowthStage; +import org.terasology.simpleFarming.components.SeedDefinitionComponent; import org.terasology.simpleFarming.events.AddGenomeRetention; import org.terasology.simpleFarming.events.BeforePlanted; -import org.terasology.simpleFarming.events.DoDestroyPlant; import org.terasology.simpleFarming.events.ProduceCreated; import org.terasology.simpleFarming.events.TransferGenomeEvent; +import org.terasology.simpleFarming.systems.PlantAuthoritySystem; import org.terasology.utilities.random.FastRandom; import org.terasology.world.WorldProvider; -import org.terasology.world.block.entity.CreateBlockDropsEvent; +import org.terasology.world.block.BlockComponent; import javax.annotation.Nullable; @@ -62,13 +66,20 @@ public class GenomeAuthoritySystem extends BaseComponentSystem { private static final Logger LOGGER = LoggerFactory.getLogger(GenomeAuthoritySystem.class); - private static String genomeRegistryPrefix = "EdibleFlora:"; - + /** + * Called immediately after a bush has been harvested. + *

+ * Checks the genome component of the bush and assigns it to the seed if it had genes already. + * If the bush did not have a GenomeComponent, it is assigned as this is the first harvest + * A new Genome Definition is created for the family + * + * @param event the Produce created event + * @param creator the creator(bush) of the produce + */ @ReceiveEvent public void onProduceCreated(ProduceCreated event, EntityRef creator) { EntityRef producer = event.getCreator(); GenomeComponent genomeComponent = new GenomeComponent(); - //might have some issues regarding npe if bush is not sustainable EntityRef produce = event.getProduce(); if (producer.hasComponent(GenomeComponent.class)) { genomeComponent.genomeId = producer.getComponent(GenomeComponent.class).genomeId; @@ -80,7 +91,7 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { LOGGER.info("Defining new genome map for " + genomeComponent.genomeId); addPropertyMap(producer, genomeComponent.genomeId); } - //needs to be random based on vocabulary + //TODO : needs to be random based on vocabulary genomeComponent.genes = "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)) + "" + "ABCDEFGHIJK".charAt(rand.nextInt(9)); @@ -91,6 +102,15 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { produce.addOrSaveComponent(genomeComponent); } + /** + * Called immediately after a bush has been harvested. + *

+ * Checks the genome component of the seed and transfers it to the plant that was planted + * if the seed does not contain a genome component, the component is assigned on first harvest + * + * @param event the Before Planted event + * @param plant the plant that is being planted + */ @ReceiveEvent public void onBeforePlantedEvent(BeforePlanted event, EntityRef plant) { EntityRef seed = event.getSeed(); @@ -99,11 +119,24 @@ public void onBeforePlantedEvent(BeforePlanted event, EntityRef plant) { } } + /** + * Transfers the GenomeComponent across different stages of bush growth + * @param event the Transfer Genome Event + * @param bush the bush that is growing + * @param bushComponent bushComponent to check if it is a bush + * @param genomeComponent genomeComponent to check if the bush has a genomeComponent to pass on + */ @ReceiveEvent public void onTransferGenomeEvent(TransferGenomeEvent event, EntityRef bush, BushDefinitionComponent bushComponent, GenomeComponent genomeComponent) { event.getTransferEntity().addOrSaveComponent(genomeComponent); } + /** + * Adds the GenomeComponent to the RetainComponentsComponent of an entity + * Event handler added to maintain Genome optional dependency + * @param event the AddGenomeRetention event + * @param entity the entity whose RetainComponentsComponent is to be modified + */ @ReceiveEvent public void addGenomeRetentionEvent(AddGenomeRetention event, EntityRef entity){ RetainComponentsComponent retainComponentsComponent = new RetainComponentsComponent();