From 9e8d099f53b474bac60f7c3da032d2c1d3a3b725 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Fri, 31 Jul 2020 02:09:32 +0530 Subject: [PATCH 1/6] added filling modifier --- .../simpleFarming/events/ModifyFilling.java | 18 ++++++ .../systems/GenomeAuthoritySystem.java | 58 ++++++++++++++++--- 2 files changed, 68 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java diff --git a/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java b/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java new file mode 100644 index 00000000..6750762b --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java @@ -0,0 +1,18 @@ +// Copyright 2020 The Terasology Foundation +// SPDX-License-Identifier: Apache-2.0 + +package org.terasology.simpleFarming.events; + +import org.terasology.entitySystem.event.Event; + +public class ModifyFilling implements Event { + private float newFilling; + + public ModifyFilling(float newFilling) { + this.newFilling = newFilling; + } + + public float getNewFilling() { + return newFilling; + } +} diff --git a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java index 6749bc95..19d2b7ab 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java @@ -31,12 +31,15 @@ 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.GenomeMap; import org.terasology.genome.genomeMap.SeedBasedGenomeMap; +import org.terasology.genome.system.SimpleGenomeManager; import org.terasology.logic.common.RetainComponentsComponent; 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.ModifyFilling; import org.terasology.simpleFarming.events.ProduceCreated; import org.terasology.simpleFarming.events.TransferGenomeEvent; import org.terasology.utilities.random.FastRandom; @@ -90,6 +93,12 @@ public void onProduceCreated(ProduceCreated event, EntityRef creator) { } } produce.addOrSaveComponent(genomeComponent); + + GenomeMap genomeMap = + genomeRegistry.getGenomeDefinition(produce.getComponent(GenomeComponent.class).genomeId).getGenomeMap(); + float newFilling = genomeMap.getProperty("filling", produce.getComponent(GenomeComponent.class).genes, + Float.class); + produce.send(new ModifyFilling(newFilling)); } /** @@ -111,40 +120,73 @@ 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) { + 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 + * 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){ + public void addGenomeRetentionEvent(AddGenomeRetention event, EntityRef entity) { RetainComponentsComponent retainComponentsComponent = new RetainComponentsComponent(); retainComponentsComponent.components.add(GenomeComponent.class); entity.addOrSaveComponent(retainComponentsComponent); } + @ReceiveEvent + public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { + EntityRef ingredients[] = event.getIngredients(); + LOGGER.info(ingredients[0].getComponent(GenomeComponent.class).genes); + LOGGER.info(ingredients[1].getComponent(GenomeComponent.class).genes); + LOGGER.info(entity.toString()); + //ingredients[0].send(new OnBreed(ingredients[0], ingredients[1], entity)); + SimpleGenomeManager genomeManager = new SimpleGenomeManager(); + boolean result = genomeManager.applyBreeding(ingredients[0],ingredients[1],entity); + LOGGER.info(result+""); + if (entity.hasComponent(GenomeComponent.class)) { + LOGGER.info(entity.getComponent(GenomeComponent.class).genes); + } + } + +// @ReceiveEvent +// public void onModifyTraitEvent(ModifyTrait event, EntityRef entity) { +// Class componentType = event.getComponentType(); +// String traitName = event.getTraitName(); +// LOGGER.info("Modifying " + componentType.getName() + " trait: " + traitName); +// SeedDefinitionComponent c = new SeedDefinitionComponent(); +// try { +// LOGGER.info(componentType.getField(traitName).get(entity.getComponent(componentType)).toString()); +// componentType.getField(traitName).setInt(entity.getComponent(componentType),1000); +// LOGGER.info(componentType.getField(traitName).get(entity.getComponent(componentType))+" is the filling"); +// } catch (Exception e) { +// LOGGER.info("Got an error"); +// } +// } + private void addPropertyMap(EntityRef entity, String 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() { + genomeMap.addSeedBasedProperty("filling", 0, 2, 3, Float.class, continuousBreedingAlgorithm, + new Function() { @Nullable @Override - public Integer apply(@Nullable String input) { - return (input.charAt(0) - 'A' + 5); + public Float apply(@Nullable String input) { + return (input.charAt(0) - 'A' + 5f); } }); GenomeDefinition genomeDefinition = new GenomeDefinition(continuousBreedingAlgorithm, genomeMap); From 9df1909834a3c587e7182a14da4548a1e8d4f2d7 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Fri, 31 Jul 2020 02:15:06 +0530 Subject: [PATCH 2/6] removed extra comments --- .../systems/GenomeAuthoritySystem.java | 20 +++---------------- .../systems/PlantAuthoritySystem.java | 4 ---- 2 files changed, 3 insertions(+), 21 deletions(-) diff --git a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java index 19d2b7ab..ac08f909 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java @@ -19,6 +19,7 @@ import com.google.common.base.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.terasology.crafting.events.OnRecipeCrafted; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; @@ -154,28 +155,13 @@ public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { LOGGER.info(entity.toString()); //ingredients[0].send(new OnBreed(ingredients[0], ingredients[1], entity)); SimpleGenomeManager genomeManager = new SimpleGenomeManager(); - boolean result = genomeManager.applyBreeding(ingredients[0],ingredients[1],entity); - LOGGER.info(result+""); + boolean result = genomeManager.applyBreeding(ingredients[0], ingredients[1], entity); + LOGGER.info(result + ""); if (entity.hasComponent(GenomeComponent.class)) { LOGGER.info(entity.getComponent(GenomeComponent.class).genes); } } -// @ReceiveEvent -// public void onModifyTraitEvent(ModifyTrait event, EntityRef entity) { -// Class componentType = event.getComponentType(); -// String traitName = event.getTraitName(); -// LOGGER.info("Modifying " + componentType.getName() + " trait: " + traitName); -// SeedDefinitionComponent c = new SeedDefinitionComponent(); -// try { -// LOGGER.info(componentType.getField(traitName).get(entity.getComponent(componentType)).toString()); -// componentType.getField(traitName).setInt(entity.getComponent(componentType),1000); -// LOGGER.info(componentType.getField(traitName).get(entity.getComponent(componentType))+" is the filling"); -// } catch (Exception e) { -// LOGGER.info("Got an error"); -// } -// } - private void addPropertyMap(EntityRef entity, String genomeId) { SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); String geneVocabulary = "ABCDEFGHIJK"; diff --git a/src/main/java/org/terasology/simpleFarming/systems/PlantAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/PlantAuthoritySystem.java index 523bf7da..098ee0ec 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/PlantAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/PlantAuthoritySystem.java @@ -19,8 +19,6 @@ import org.slf4j.LoggerFactory; import org.terasology.entitySystem.Component; import org.terasology.entitySystem.event.EventPriority; -import org.terasology.genome.component.GenomeComponent; -import org.terasology.logic.common.RetainComponentsComponent; import org.terasology.simpleFarming.components.SeedDefinitionComponent; import org.terasology.simpleFarming.events.BeforePlanted; import org.terasology.simpleFarming.events.OnSeedPlanted; @@ -92,8 +90,6 @@ public void postBegin() { */ @ReceiveEvent(priority = EventPriority.PRIORITY_HIGH) public void onSeedPlant(ActivateEvent event, EntityRef seed, SeedDefinitionComponent seedComponent) { - RetainComponentsComponent retainComponentsComponent = new RetainComponentsComponent(); - retainComponentsComponent.components.add(GenomeComponent.class); /* The item is being used but not planted */ if (event.getTargetLocation() == null || event.isConsumed()) { return; From bba6adf8241f44c7c8b45a12676db640d30faee3 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Fri, 31 Jul 2020 02:36:34 +0530 Subject: [PATCH 3/6] added BasicCrafting dep --- module.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module.txt b/module.txt index 56e20fa5..d015f58a 100644 --- a/module.txt +++ b/module.txt @@ -8,7 +8,8 @@ { "id": "CoreAssets", "minVersion": "2.0.1" }, { "id": "Inventory", "minVersion": "1.1.0" }, { "id": "ModuleTestingEnvironment", "minVersion": "0.2.0", "optional": true }, - { "id": "Genome", "minVersion": "1.0.0" } + { "id": "Genome", "minVersion": "1.0.0", "optional": true }, + { "id": "BasicCrafting", "minVersion": "1.0.0", "optional": true } ], "isServerSideOnly": false, "isLibrary": true From 9e727e0c473e2b99a05b0e2cb5688c5b394fa646 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Sun, 2 Aug 2020 21:28:11 +0530 Subject: [PATCH 4/6] change filling of produce --- .../simpleFarming/systems/GenomeAuthoritySystem.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java index ac08f909..6dd39b0c 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java @@ -158,7 +158,11 @@ public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { boolean result = genomeManager.applyBreeding(ingredients[0], ingredients[1], entity); LOGGER.info(result + ""); if (entity.hasComponent(GenomeComponent.class)) { - LOGGER.info(entity.getComponent(GenomeComponent.class).genes); + GenomeMap genomeMap = + genomeRegistry.getGenomeDefinition(entity.getComponent(GenomeComponent.class).genomeId).getGenomeMap(); + float newFilling = genomeMap.getProperty("filling", entity.getComponent(GenomeComponent.class).genes, + Float.class); + entity.send(new ModifyFilling(newFilling)); } } From b349f79321ec161d73c0e54343bc9bdd87305258 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Fri, 14 Aug 2020 15:32:35 +0530 Subject: [PATCH 5/6] added check for ingredients --- .../simpleFarming/systems/GenomeAuthoritySystem.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java index 6dd39b0c..e5173f8d 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java @@ -150,10 +150,13 @@ public void addGenomeRetentionEvent(AddGenomeRetention event, EntityRef entity) @ReceiveEvent public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { EntityRef ingredients[] = event.getIngredients(); - LOGGER.info(ingredients[0].getComponent(GenomeComponent.class).genes); - LOGGER.info(ingredients[1].getComponent(GenomeComponent.class).genes); - LOGGER.info(entity.toString()); - //ingredients[0].send(new OnBreed(ingredients[0], ingredients[1], entity)); + if (ingredients.length != 2) { + return; + } + + if (!(ingredients[0].hasComponent(GenomeComponent.class) || ingredients[1].hasComponent(GenomeComponent.class))) { + return; + } SimpleGenomeManager genomeManager = new SimpleGenomeManager(); boolean result = genomeManager.applyBreeding(ingredients[0], ingredients[1], entity); LOGGER.info(result + ""); From 13c70b13a229e33c09b6b061468117eed964bd31 Mon Sep 17 00:00:00 2001 From: vedant-shroff Date: Sat, 15 Aug 2020 03:08:53 +0530 Subject: [PATCH 6/6] javadocs and filling tweaks --- .../terasology/simpleFarming/events/ModifyFilling.java | 3 +++ .../simpleFarming/systems/GenomeAuthoritySystem.java | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java b/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java index 6750762b..18f6376c 100644 --- a/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java +++ b/src/main/java/org/terasology/simpleFarming/events/ModifyFilling.java @@ -5,6 +5,9 @@ import org.terasology.entitySystem.event.Event; +/** + * Event sent to modify the filling of harvested produce. + */ public class ModifyFilling implements Event { private float newFilling; diff --git a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java index e5173f8d..97cf1b85 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GenomeAuthoritySystem.java @@ -147,6 +147,11 @@ public void addGenomeRetentionEvent(AddGenomeRetention event, EntityRef entity) entity.addOrSaveComponent(retainComponentsComponent); } + /** + * Adds genes to the crafted entity if breeding is possible. + * @param event the OnRecipeCrafted event + * @param entity the crafted entity which is to be modified + */ @ReceiveEvent public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { EntityRef ingredients[] = event.getIngredients(); @@ -157,9 +162,9 @@ public void onRecipeCraftedEvent(OnRecipeCrafted event, EntityRef entity) { if (!(ingredients[0].hasComponent(GenomeComponent.class) || ingredients[1].hasComponent(GenomeComponent.class))) { return; } + SimpleGenomeManager genomeManager = new SimpleGenomeManager(); boolean result = genomeManager.applyBreeding(ingredients[0], ingredients[1], entity); - LOGGER.info(result + ""); if (entity.hasComponent(GenomeComponent.class)) { GenomeMap genomeMap = genomeRegistry.getGenomeDefinition(entity.getComponent(GenomeComponent.class).genomeId).getGenomeMap(); @@ -179,7 +184,7 @@ private void addPropertyMap(EntityRef entity, String genomeId) { @Nullable @Override public Float apply(@Nullable String input) { - return (input.charAt(0) - 'A' + 5f); + return (input.charAt(0) - 'A' + 5f)/5f; } }); GenomeDefinition genomeDefinition = new GenomeDefinition(continuousBreedingAlgorithm, genomeMap);