From 561028d03998bd4b213b84cf6dc58a15cebefeca Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Tue, 21 Mar 2017 09:17:46 +0530 Subject: [PATCH 1/9] mixer working - component copy on growth bug --- assets/blocks/SeedMixer.block | 15 ++++ .../prefabs/Bushes/Blueberry/Blueberry.prefab | 9 +- .../Bushes/Blueberry/BlueberryBushFull.prefab | 1 + .../Bushes/Blueberry/BlueberrySeed.prefab | 8 +- assets/prefabs/SeedMixer.prefab | 20 +++++ assets/ui/SeedMixer.ui | 38 ++++++++ module.txt | 8 ++ .../components/SeedComponent.java | 21 +++++ .../components/SeedMixerComponent.java | 21 +++++ .../systems/FarmingAuthoritySystem.java | 64 ++++++++------ .../simpleFarming/systems/GeneticsSystem.java | 71 +++++++++++++++ .../systems/SeedMixerSystem.java | 86 +++++++++++++++++++ 12 files changed, 331 insertions(+), 31 deletions(-) create mode 100644 assets/blocks/SeedMixer.block create mode 100644 assets/prefabs/SeedMixer.prefab create mode 100644 assets/ui/SeedMixer.ui create mode 100644 src/main/java/org/terasology/simpleFarming/components/SeedComponent.java create mode 100644 src/main/java/org/terasology/simpleFarming/components/SeedMixerComponent.java create mode 100644 src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java create mode 100644 src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java diff --git a/assets/blocks/SeedMixer.block b/assets/blocks/SeedMixer.block new file mode 100644 index 00000000..1d7d4a46 --- /dev/null +++ b/assets/blocks/SeedMixer.block @@ -0,0 +1,15 @@ +{ + "attachmentAllowed": false, + "rotation": "horizontal", + "tiles" : { + "sides" : "core:ChestSides", + "front" : "core:ChestFront", + "topBottom" : "core:ChestTopBottom" + }, + "entity": { + "prefab": "SimpleFarming:SeedMixer" + }, + "inventory": { + "stackable": true + } +} \ No newline at end of file diff --git a/assets/prefabs/Bushes/Blueberry/Blueberry.prefab b/assets/prefabs/Bushes/Blueberry/Blueberry.prefab index d82c89dd..71918b52 100644 --- a/assets/prefabs/Bushes/Blueberry/Blueberry.prefab +++ b/assets/prefabs/Bushes/Blueberry/Blueberry.prefab @@ -5,6 +5,11 @@ }, "Item": { "icon": "SimpleFarming:Blueberry", - "stackId": "blueberry" - } + "stackId": "blueberry", + "consumedOnUse": true + }, + "Food": { + "filling": 10 + }, + "Genome": {} } diff --git a/assets/prefabs/Bushes/Blueberry/BlueberryBushFull.prefab b/assets/prefabs/Bushes/Blueberry/BlueberryBushFull.prefab index f64a5e1e..7f5b9b97 100644 --- a/assets/prefabs/Bushes/Blueberry/BlueberryBushFull.prefab +++ b/assets/prefabs/Bushes/Blueberry/BlueberryBushFull.prefab @@ -3,6 +3,7 @@ "producePrefab": "SimpleFarming:Blueberry" }, "UnGrowPlantOnHarvest": {}, + "Genome": {}, "PlantDefinition": { "seedPrefab": "BlueberrySeed" } diff --git a/assets/prefabs/Bushes/Blueberry/BlueberrySeed.prefab b/assets/prefabs/Bushes/Blueberry/BlueberrySeed.prefab index 4c28cec9..7eba7c5d 100644 --- a/assets/prefabs/Bushes/Blueberry/BlueberrySeed.prefab +++ b/assets/prefabs/Bushes/Blueberry/BlueberrySeed.prefab @@ -4,8 +4,12 @@ "name": "Blueberry Seed" }, "Item": { - "icon": "SimpleFarming:SimpleFarming#berryseed", - "stackId": "blueberrySeed" + "icon": "SimpleFarming:SimpleFarming#berryseed" + }, + "Seed": {}, + "Genome": { + "genomeId": "blueberry", + "genes": "F" }, "PlantDefinition": { "plantName": "Blueberry Bush", diff --git a/assets/prefabs/SeedMixer.prefab b/assets/prefabs/SeedMixer.prefab new file mode 100644 index 00000000..ea72b806 --- /dev/null +++ b/assets/prefabs/SeedMixer.prefab @@ -0,0 +1,20 @@ +{ + "SeedMixer": {}, + "Inventory": { + "privateToOwner": false, + "itemSlots": [ + 0, + 0, + 0, + 0 + ] + }, + "RetainBlockInventory": {}, + "PlaySoundAction": { + "sounds": "engine:click" + }, + "InteractionTarget": {}, + "InteractionScreen": { + "screen": "SimpleFarming:SeedMixer" + } +} \ No newline at end of file diff --git a/assets/ui/SeedMixer.ui b/assets/ui/SeedMixer.ui new file mode 100644 index 00000000..7f002276 --- /dev/null +++ b/assets/ui/SeedMixer.ui @@ -0,0 +1,38 @@ +{ + "type": "containerScreen", + "skin": "inventoryDefault", + "contents": { + "type": "relativeLayout", + "contents": [ + { + "type": "InventoryGrid", + "id": "inventory", + "maxHorizontalCells": 10, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true, + "position-bottom": { + "target": "BOTTOM", + "offset": 128 + }, + "position-horizontal-center": {} + } + }, + { + "type": "InventoryGrid", + "id": "container", + "maxHorizontalCells": 4, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true, + "position-bottom": { + "target": "TOP", + "widget": "inventory", + "offset": 16 + }, + "position-horizontal-center": {} + } + }, + ] + } +} \ No newline at end of file diff --git a/module.txt b/module.txt index f258d3a7..fe0d0fff 100644 --- a/module.txt +++ b/module.txt @@ -9,6 +9,14 @@ { "id" : "Core", "minVersion" : "1.0.0" + }, + { + "id" : "Genome", + "minVersion" : "0.1.1" + }, + { + "id" : "Hunger", + "minVersion" : "1.0.0" } ], "isServerSideOnly" : false diff --git a/src/main/java/org/terasology/simpleFarming/components/SeedComponent.java b/src/main/java/org/terasology/simpleFarming/components/SeedComponent.java new file mode 100644 index 00000000..8a032d8f --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/components/SeedComponent.java @@ -0,0 +1,21 @@ +/* + * Copyright 2017 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 + * + * http://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.simpleFarming.components; + +import org.terasology.entitySystem.Component; + +public class SeedComponent implements Component { +} diff --git a/src/main/java/org/terasology/simpleFarming/components/SeedMixerComponent.java b/src/main/java/org/terasology/simpleFarming/components/SeedMixerComponent.java new file mode 100644 index 00000000..29193b5c --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/components/SeedMixerComponent.java @@ -0,0 +1,21 @@ +/* + * Copyright 2017 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 + * + * http://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.simpleFarming.components; + +import org.terasology.entitySystem.Component; + +public class SeedMixerComponent implements Component { +} diff --git a/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java index 8fd4e160..980ad18f 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java @@ -29,6 +29,10 @@ 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.component.GenomeComponent; +import org.terasology.hunger.component.FoodComponent; import org.terasology.logic.common.ActivateEvent; import org.terasology.logic.common.DisplayNameComponent; import org.terasology.logic.delay.DelayManager; @@ -89,19 +93,21 @@ public class FarmingAuthoritySystem extends BaseComponentSystem { BlockEntityRegistry blockEntityRegistry; @In PrefabManager prefabManager; + @In + private GenomeRegistry genomeRegistry; Random random = new FastRandom(); @ReceiveEvent /** - * Handles the seed drop on plant destroyed event. + * Handles the seed planting event. * * @param event The corresponding event. * @param seedItem Reference to the seed entity. * @param plantDefinitionComponent The definition of the plant. * @param itemComponent The item component corresponding to the event */ - public void onPlantSeed(ActivateEvent event, EntityRef seedItem, PlantDefinitionComponent plantDefinitionComponent, ItemComponent itemComponent) { + public void onPlantSeed(ActivateEvent event, EntityRef seedItem, PlantDefinitionComponent plantDefinitionComponent, GenomeComponent genomeComponent, ItemComponent itemComponent) { if (!event.getTarget().exists() || event.getTargetLocation() == null) { return; } @@ -143,6 +149,8 @@ public void onPlantSeed(ActivateEvent event, EntityRef seedItem, PlantDefinition worldProvider.setBlock(plantPosition, plantBlock); EntityRef plantEntity = blockEntityRegistry.getBlockEntityAt(plantPosition); plantEntity.addComponent(newPlantDefinitionComponent); + plantEntity.addOrSaveComponent(genomeComponent); + logger.info("On seed plant" + genomeComponent.genes); TreeDefinitionComponent treeDefinitionComponent = seedItem.getComponent(TreeDefinitionComponent.class); if (treeDefinitionComponent != null) { @@ -175,9 +183,11 @@ private Map.Entry getGrowthStage(PlantDefinitionComponent pla * @param plantDefinitionComponent The definition of the plant. * @param blockComponent The block component corresponding to the event */ - public void onPlantDestroyed(CreateBlockDropsEvent event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, BlockComponent blockComponent) { + public void onPlantDestroyed(CreateBlockDropsEvent event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, GenomeComponent genomeComponent, BlockComponent blockComponent) { event.consume(); EntityRef seedItem = entityManager.create(plantDefinitionComponent.seedPrefab); + seedItem.addComponent(genomeComponent); + logger.info("On plant destroyed" + genomeComponent.genes); Vector3f position = blockComponent.getPosition().toVector3f().add(0, 0.5f, 0); seedItem.send(new DropItemEvent(position)); seedItem.send(new ImpulseEvent(random.nextVector3f(30.0f))); @@ -213,11 +223,11 @@ public void scheduledPlantGrowth(DelayedActionTriggeredEvent event, EntityRef en * Handles plant growth event. * * @param event The event corresponding to the plant growth. - * @param entity The entity which is going to grown + * @param entity The entity which is going to grow * @param plantDefinitionComponent The definition of the plant. * @param blockComponent The block component corresponding to the event */ - public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, BlockComponent blockComponent) { + public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, GenomeComponent genomeComponent, BlockComponent blockComponent) { if (delayManager.hasDelayedAction(entity, GROWTH_ACTION)) { delayManager.cancelDelayedAction(entity, GROWTH_ACTION); } @@ -265,19 +275,16 @@ public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinition EntityRef newEntity = blockEntityRegistry.getBlockEntityAt(blockComponent.getPosition()); // Check the new entity for PlantDefinitionComponent. - if (newEntity.hasComponent(PlantDefinitionComponent.class)) { - newEntity.saveComponent(plantDefinitionComponent); - } else { - newEntity.addComponent(plantDefinitionComponent); - } + newEntity.addOrSaveComponent(plantDefinitionComponent); + + // Check the new entity for GenomeComponent. + newEntity.addOrSaveComponent(genomeComponent); + logger.info(entity.toFullDescription()); + logger.info("On plant growth - " + genomeComponent.genes); // Check for TreeDefinitionComponent if (treeDefinitionComponent != null) { - if (newEntity.hasComponent(TreeDefinitionComponent.class)) { - newEntity.saveComponent(treeDefinitionComponent); - } else { - newEntity.addComponent(treeDefinitionComponent); - } + newEntity.addOrSaveComponent(treeDefinitionComponent); } schedulePlantGrowth(newEntity, nextGrowthStage); @@ -292,7 +299,7 @@ public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinition * @param plantDefinitionComponent The definition of the plant. * @param blockComponent The block component corresponding to the event. */ - public void onPlantUnGrowth(OnPlantUnGrowth event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, BlockComponent blockComponent) { + public void onPlantUnGrowth(OnPlantUnGrowth event, EntityRef entity, PlantDefinitionComponent plantDefinitionComponent, GenomeComponent genomeComponent, BlockComponent blockComponent) { List> growthStages = getGrowthStages(plantDefinitionComponent); if (growthStages.size() == 0) { @@ -332,11 +339,10 @@ public void onPlantUnGrowth(OnPlantUnGrowth event, EntityRef entity, PlantDefini // Creates a new entity EntityRef newEntity = blockEntityRegistry.getBlockEntityAt(blockComponent.getPosition()); // Check the new entity for PlantDefinitionComponent. - if (newEntity.hasComponent(PlantDefinitionComponent.class)) { - newEntity.saveComponent(plantDefinitionComponent); - } else { - newEntity.addComponent(plantDefinitionComponent); - } + newEntity.addOrSaveComponent(plantDefinitionComponent); + + // Check the new entity for GenomeComponent. + newEntity.addOrSaveComponent(genomeComponent); // Schedules a plant growth. schedulePlantGrowth(newEntity, previousGrowthStage); @@ -350,7 +356,8 @@ public void onPlantUnGrowth(OnPlantUnGrowth event, EntityRef entity, PlantDefini * @param event The event corresponding to the plant harvest * @param entity The entity which is going to be harvested */ - public void onHarvest(ActivateEvent event, EntityRef entity) { + public void onHarvest(ActivateEvent event, EntityRef entity, GenomeComponent genomeComponent) { + logger.info("on harvest"); EntityRef target = event.getTarget(); EntityRef instigator = event.getInstigator(); EntityRef harvestingEntity = entity; @@ -362,6 +369,11 @@ public void onHarvest(ActivateEvent event, EntityRef entity) { PlantProduceComponent plantProduceComponent = target.getComponent(PlantProduceComponent.class); if (plantProduceComponent != null) { EntityRef produceItem = plantProduceComponent.produceItem; + FoodComponent foodComponent = new FoodComponent(); + GenomeDefinition genomeDefinition = genomeRegistry.getGenomeDefinition(genomeComponent.genomeId); + foodComponent.filling = genomeDefinition.getGenomeMap().getProperty("filling", genomeComponent.genes, Integer.class); + logger.info(String.valueOf(foodComponent.filling)); + produceItem.addComponent(foodComponent); plantProduceComponent.produceItem = EntityRef.NULL; target.saveComponent(plantProduceComponent); if (!inventoryManager.giveItem(harvestingEntity, target, produceItem) && target.hasComponent(BlockComponent.class)) { @@ -384,13 +396,11 @@ public void onHarvest(ActivateEvent event, EntityRef entity) { * @param plantProduceCreationComponent The plant produce creation component corresponding to the event. */ public void onPlantProduceCreation(OnAddedComponent event, EntityRef entityRef, PlantProduceCreationComponent plantProduceCreationComponent) { + logger.info("on plant produce creation"); EntityRef newItem = entityManager.create(plantProduceCreationComponent.producePrefab); PlantProduceComponent plantProduceComponent = new PlantProduceComponent(newItem); - if (entityRef.hasComponent(PlantProduceComponent.class)) { - entityRef.saveComponent(plantProduceComponent); - } else { - entityRef.addComponent(plantProduceComponent); - } + entityRef.addOrSaveComponent(plantProduceComponent); + logger.info(entityRef.getComponent(GenomeComponent.class).genes); } @ReceiveEvent diff --git a/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java new file mode 100644 index 00000000..e086b471 --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java @@ -0,0 +1,71 @@ +/* + * Copyright 2017 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 + * + * http://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.simpleFarming.systems; + +import com.google.common.base.Function; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.entitySystem.event.ReceiveEvent; +import org.terasology.entitySystem.systems.BaseComponentSystem; +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.MonoploidBreedingAlgorithm; +import org.terasology.genome.breed.mutator.GeneMutator; +import org.terasology.genome.breed.mutator.VocabularyGeneMutator; +import org.terasology.genome.component.GenomeComponent; +import org.terasology.genome.events.OnBreed; +import org.terasology.genome.system.SimpleGenomeManager; +import org.terasology.genome.genomeMap.SeedBasedGenomeMap; +import org.terasology.registry.In; +import org.terasology.world.WorldProvider; + +import javax.annotation.Nullable; + +@RegisterSystem +public class GeneticsSystem extends BaseComponentSystem { + @In + private WorldProvider worldProvider; + + @In + private GenomeRegistry genomeRegistry; + + private static final Logger logger = LoggerFactory.getLogger(GeneticsSystem.class); + + @Override + public void preBegin() { + int genomeLength = 1; + + //A=5, F=10, K=15 + GeneMutator geneMutator = new VocabularyGeneMutator("ABCDEFGHIJK"); + BreedingAlgorithm breedingAlgorithm = new MonoploidBreedingAlgorithm(0, 0.4f, geneMutator); + + SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); + genomeMap.addSeedBasedProperty("filling", 1, genomeLength, 1, Integer.class, + new Function() { + @Nullable + @Override + public Integer apply(@Nullable String input) { + return (input.charAt(0) - 'A' + 5); + } + }); + + GenomeDefinition genomeDefinition = new GenomeDefinition(breedingAlgorithm, genomeMap); + genomeRegistry.registerType("blueberry", genomeDefinition); + } +} diff --git a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java new file mode 100644 index 00000000..11d279a5 --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java @@ -0,0 +1,86 @@ +/* + * Copyright 2017 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 + * + * http://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.simpleFarming.systems; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.entitySystem.event.ReceiveEvent; +import org.terasology.entitySystem.systems.BaseComponentSystem; +import org.terasology.entitySystem.systems.RegisterSystem; +import org.terasology.genome.component.GenomeComponent; +import org.terasology.genome.events.OnBreed; +import org.terasology.logic.inventory.InventoryComponent; +import org.terasology.logic.inventory.InventoryManager; +import org.terasology.logic.inventory.events.BeforeItemPutInInventory; +import org.terasology.registry.In; +import org.terasology.simpleFarming.components.SeedComponent; +import org.terasology.simpleFarming.components.SeedMixerComponent; + +import java.util.List; + +@RegisterSystem +public class SeedMixerSystem extends BaseComponentSystem { + @In + private InventoryManager inventoryManager; + + private static final Logger logger = LoggerFactory.getLogger(SeedMixerSystem.class); + + private InventoryComponent inventory; + + private int currentOffspringIndex; + + @ReceiveEvent + public void filterSeed(BeforeItemPutInInventory event, EntityRef entity, SeedMixerComponent component) { + if (!event.getItem().hasComponent(SeedComponent.class)) { + event.consume(); + } + if (event.getSlot() == 2 || event.getSlot() == 3) { + event.consume(); + } + } + + @ReceiveEvent + public void onSeedsAdded(BeforeItemPutInInventory event, EntityRef entity, SeedMixerComponent component) { + inventory = entity.getComponent(InventoryComponent.class); + if (event.getSlot() == 0 || event.getSlot() == 1) { + EntityRef firstSeed = event.getItem(); + EntityRef secondSeed = inventory.itemSlots.get(1 - event.getSlot()); + if (!secondSeed.equals(EntityRef.NULL)) { + EntityRef offspring1 = firstSeed.copy(); + EntityRef offspring2 = firstSeed.copy(); + logger.info("Sending events"); + currentOffspringIndex = 0; + firstSeed.send(new OnBreed(firstSeed, secondSeed, offspring1)); + firstSeed.send(new OnBreed(firstSeed, secondSeed, offspring2)); + } + } + } + + @ReceiveEvent + public void onSeedsBred(OnBreed event, EntityRef entity, SeedComponent seedComponent) { + if (inventory != null) { + EntityRef offspring = event.getOffspring(); + logger.info(offspring.getComponent(GenomeComponent.class).genes); + inventory.itemSlots.set(currentOffspringIndex + 2, offspring); + currentOffspringIndex += 1; + if (currentOffspringIndex == 2) { + event.getOrganism1().destroy(); + event.getOrganism2().destroy(); + } + } + } +} From e43ac7f35534f0d80aedf2d9628cf04a79e86c8f Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Tue, 21 Mar 2017 22:04:48 +0530 Subject: [PATCH 2/9] breeding+harvesting working --- .../prefabs/Bushes/Blueberry/Blueberry.prefab | 1 - .../systems/FarmingAuthoritySystem.java | 18 +++++++++--------- .../simpleFarming/systems/GeneticsSystem.java | 11 +---------- .../simpleFarming/systems/SeedMixerSystem.java | 7 ------- 4 files changed, 10 insertions(+), 27 deletions(-) diff --git a/assets/prefabs/Bushes/Blueberry/Blueberry.prefab b/assets/prefabs/Bushes/Blueberry/Blueberry.prefab index 71918b52..d4a6d1f1 100644 --- a/assets/prefabs/Bushes/Blueberry/Blueberry.prefab +++ b/assets/prefabs/Bushes/Blueberry/Blueberry.prefab @@ -5,7 +5,6 @@ }, "Item": { "icon": "SimpleFarming:Blueberry", - "stackId": "blueberry", "consumedOnUse": true }, "Food": { diff --git a/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java b/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java index 980ad18f..8e6cc38a 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/FarmingAuthoritySystem.java @@ -96,6 +96,8 @@ public class FarmingAuthoritySystem extends BaseComponentSystem { @In private GenomeRegistry genomeRegistry; + GenomeComponent newGenomeComponent = new GenomeComponent(); + Random random = new FastRandom(); @ReceiveEvent @@ -150,7 +152,6 @@ public void onPlantSeed(ActivateEvent event, EntityRef seedItem, PlantDefinition EntityRef plantEntity = blockEntityRegistry.getBlockEntityAt(plantPosition); plantEntity.addComponent(newPlantDefinitionComponent); plantEntity.addOrSaveComponent(genomeComponent); - logger.info("On seed plant" + genomeComponent.genes); TreeDefinitionComponent treeDefinitionComponent = seedItem.getComponent(TreeDefinitionComponent.class); if (treeDefinitionComponent != null) { @@ -187,7 +188,6 @@ public void onPlantDestroyed(CreateBlockDropsEvent event, EntityRef entity, Plan event.consume(); EntityRef seedItem = entityManager.create(plantDefinitionComponent.seedPrefab); seedItem.addComponent(genomeComponent); - logger.info("On plant destroyed" + genomeComponent.genes); Vector3f position = blockComponent.getPosition().toVector3f().add(0, 0.5f, 0); seedItem.send(new DropItemEvent(position)); seedItem.send(new ImpulseEvent(random.nextVector3f(30.0f))); @@ -232,6 +232,10 @@ public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinition delayManager.cancelDelayedAction(entity, GROWTH_ACTION); } + GenomeComponent newGenomeComponent = new GenomeComponent(); + newGenomeComponent.genomeId = genomeComponent.genomeId; + newGenomeComponent.genes = genomeComponent.genes; + TimeRange nextGrowthStage = null; String nextGrowthStageBlockName = ""; @@ -268,6 +272,8 @@ public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinition TreeDefinitionComponent treeDefinitionComponent = entity.getComponent(TreeDefinitionComponent.class); + entity.destroy(); + // Grow the plant into the next growth stage. worldProvider.setBlock(blockComponent.getPosition(), newPlantBlock); @@ -278,9 +284,7 @@ public void onPlantGrowth(OnPlantGrowth event, EntityRef entity, PlantDefinition newEntity.addOrSaveComponent(plantDefinitionComponent); // Check the new entity for GenomeComponent. - newEntity.addOrSaveComponent(genomeComponent); - logger.info(entity.toFullDescription()); - logger.info("On plant growth - " + genomeComponent.genes); + newEntity.addOrSaveComponent(newGenomeComponent); // Check for TreeDefinitionComponent if (treeDefinitionComponent != null) { @@ -357,7 +361,6 @@ public void onPlantUnGrowth(OnPlantUnGrowth event, EntityRef entity, PlantDefini * @param entity The entity which is going to be harvested */ public void onHarvest(ActivateEvent event, EntityRef entity, GenomeComponent genomeComponent) { - logger.info("on harvest"); EntityRef target = event.getTarget(); EntityRef instigator = event.getInstigator(); EntityRef harvestingEntity = entity; @@ -372,7 +375,6 @@ public void onHarvest(ActivateEvent event, EntityRef entity, GenomeComponent gen FoodComponent foodComponent = new FoodComponent(); GenomeDefinition genomeDefinition = genomeRegistry.getGenomeDefinition(genomeComponent.genomeId); foodComponent.filling = genomeDefinition.getGenomeMap().getProperty("filling", genomeComponent.genes, Integer.class); - logger.info(String.valueOf(foodComponent.filling)); produceItem.addComponent(foodComponent); plantProduceComponent.produceItem = EntityRef.NULL; target.saveComponent(plantProduceComponent); @@ -396,11 +398,9 @@ public void onHarvest(ActivateEvent event, EntityRef entity, GenomeComponent gen * @param plantProduceCreationComponent The plant produce creation component corresponding to the event. */ public void onPlantProduceCreation(OnAddedComponent event, EntityRef entityRef, PlantProduceCreationComponent plantProduceCreationComponent) { - logger.info("on plant produce creation"); EntityRef newItem = entityManager.create(plantProduceCreationComponent.producePrefab); PlantProduceComponent plantProduceComponent = new PlantProduceComponent(newItem); entityRef.addOrSaveComponent(plantProduceComponent); - logger.info(entityRef.getComponent(GenomeComponent.class).genes); } @ReceiveEvent diff --git a/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java index e086b471..67b8f35a 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java @@ -16,10 +16,6 @@ package org.terasology.simpleFarming.systems; import com.google.common.base.Function; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.terasology.entitySystem.entity.EntityRef; -import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterSystem; import org.terasology.genome.GenomeDefinition; @@ -28,9 +24,6 @@ import org.terasology.genome.breed.MonoploidBreedingAlgorithm; import org.terasology.genome.breed.mutator.GeneMutator; import org.terasology.genome.breed.mutator.VocabularyGeneMutator; -import org.terasology.genome.component.GenomeComponent; -import org.terasology.genome.events.OnBreed; -import org.terasology.genome.system.SimpleGenomeManager; import org.terasology.genome.genomeMap.SeedBasedGenomeMap; import org.terasology.registry.In; import org.terasology.world.WorldProvider; @@ -45,8 +38,6 @@ public class GeneticsSystem extends BaseComponentSystem { @In private GenomeRegistry genomeRegistry; - private static final Logger logger = LoggerFactory.getLogger(GeneticsSystem.class); - @Override public void preBegin() { int genomeLength = 1; @@ -56,7 +47,7 @@ public void preBegin() { BreedingAlgorithm breedingAlgorithm = new MonoploidBreedingAlgorithm(0, 0.4f, geneMutator); SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); - genomeMap.addSeedBasedProperty("filling", 1, genomeLength, 1, Integer.class, + genomeMap.addSeedBasedProperty("filling", 0, genomeLength-1, 1, Integer.class, new Function() { @Nullable @Override diff --git a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java index 11d279a5..6203edd5 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java @@ -15,13 +15,10 @@ */ package org.terasology.simpleFarming.systems; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterSystem; -import org.terasology.genome.component.GenomeComponent; import org.terasology.genome.events.OnBreed; import org.terasology.logic.inventory.InventoryComponent; import org.terasology.logic.inventory.InventoryManager; @@ -37,8 +34,6 @@ public class SeedMixerSystem extends BaseComponentSystem { @In private InventoryManager inventoryManager; - private static final Logger logger = LoggerFactory.getLogger(SeedMixerSystem.class); - private InventoryComponent inventory; private int currentOffspringIndex; @@ -62,7 +57,6 @@ public void onSeedsAdded(BeforeItemPutInInventory event, EntityRef entity, SeedM if (!secondSeed.equals(EntityRef.NULL)) { EntityRef offspring1 = firstSeed.copy(); EntityRef offspring2 = firstSeed.copy(); - logger.info("Sending events"); currentOffspringIndex = 0; firstSeed.send(new OnBreed(firstSeed, secondSeed, offspring1)); firstSeed.send(new OnBreed(firstSeed, secondSeed, offspring2)); @@ -74,7 +68,6 @@ public void onSeedsAdded(BeforeItemPutInInventory event, EntityRef entity, SeedM public void onSeedsBred(OnBreed event, EntityRef entity, SeedComponent seedComponent) { if (inventory != null) { EntityRef offspring = event.getOffspring(); - logger.info(offspring.getComponent(GenomeComponent.class).genes); inventory.itemSlots.set(currentOffspringIndex + 2, offspring); currentOffspringIndex += 1; if (currentOffspringIndex == 2) { From ea88fe5965c01d5ad3f16f23909d3c5dc654b26c Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Tue, 21 Mar 2017 22:13:25 +0530 Subject: [PATCH 3/9] breeding+harvesting working --- .../org/terasology/simpleFarming/systems/GeneticsSystem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java index 67b8f35a..cb467674 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/GeneticsSystem.java @@ -44,7 +44,7 @@ public void preBegin() { //A=5, F=10, K=15 GeneMutator geneMutator = new VocabularyGeneMutator("ABCDEFGHIJK"); - BreedingAlgorithm breedingAlgorithm = new MonoploidBreedingAlgorithm(0, 0.4f, geneMutator); + BreedingAlgorithm breedingAlgorithm = new MonoploidBreedingAlgorithm(0, 0.05f, geneMutator); SeedBasedGenomeMap genomeMap = new SeedBasedGenomeMap(worldProvider.getSeed().hashCode()); genomeMap.addSeedBasedProperty("filling", 0, genomeLength-1, 1, Integer.class, From ab1c2ec47a635e9fc224a14cc15f9c3808d20c57 Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Fri, 24 Mar 2017 11:25:57 +0530 Subject: [PATCH 4/9] Added command to check genome of held seed --- .../systems/SeedMixerSystem.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java index 6203edd5..27c6196e 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java @@ -19,10 +19,15 @@ import org.terasology.entitySystem.event.ReceiveEvent; import org.terasology.entitySystem.systems.BaseComponentSystem; import org.terasology.entitySystem.systems.RegisterSystem; +import org.terasology.genome.component.GenomeComponent; import org.terasology.genome.events.OnBreed; +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.logic.inventory.InventoryComponent; import org.terasology.logic.inventory.InventoryManager; import org.terasology.logic.inventory.events.BeforeItemPutInInventory; +import org.terasology.network.ClientComponent; import org.terasology.registry.In; import org.terasology.simpleFarming.components.SeedComponent; import org.terasology.simpleFarming.components.SeedMixerComponent; @@ -76,4 +81,19 @@ public void onSeedsBred(OnBreed event, EntityRef entity, SeedComponent seedCompo } } } + + @Command(shortDescription = "Prints genome of held seed.") + public String seedGenomeCheck(@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(SeedComponent.class) && selectedItem.hasComponent(GenomeComponent.class)) { + return selectedItem.getComponent(GenomeComponent.class).genes; + } else { + return "Command not valid for current conditions."; + } + } else { + return "Command not valid for current conditions."; + } + } } From 9849ddb0f95b739d1b395861e1892e7d64202dbe Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Mon, 27 Mar 2017 08:33:40 +0530 Subject: [PATCH 5/9] changing UI for seed mixer --- assets/ui/SeedMixer.ui | 50 ++++++++++++++++--- .../simpleFarming/ui/SeedMixerWindow.java | 50 +++++++++++++++++++ 2 files changed, 94 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java diff --git a/assets/ui/SeedMixer.ui b/assets/ui/SeedMixer.ui index 7f002276..d0fe4cca 100644 --- a/assets/ui/SeedMixer.ui +++ b/assets/ui/SeedMixer.ui @@ -1,5 +1,5 @@ { - "type": "containerScreen", + "type": "SeedMixerWindow", "skin": "inventoryDefault", "contents": { "type": "relativeLayout", @@ -19,9 +19,46 @@ } }, { - "type": "InventoryGrid", - "id": "container", - "maxHorizontalCells": 4, + "type": "relativeLayout", + "contents": [ + { + "type": "InventoryGrid", + "id": "S1", + "maxHorizontalCells": 1, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true + + } + }, + { + "type": "InventoryGrid", + "id": "S2", + "maxHorizontalCells": 1, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true + } + }, + { + "type": "InventoryGrid", + "id": "O1", + "maxHorizontalCells": 1, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true + } + }, + { + "type": "InventoryGrid", + "id": "O2", + "maxHorizontalCells": 1, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true + } + } + ], "layoutInfo": { "use-content-width": true, "use-content-height": true, @@ -30,9 +67,10 @@ "widget": "inventory", "offset": 16 }, - "position-horizontal-center": {} + "position-horizontal-center": {}, + "position-vertical-center": {} } - }, + } ] } } \ No newline at end of file diff --git a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java new file mode 100644 index 00000000..d429153b --- /dev/null +++ b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017 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 + * + * http://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.simpleFarming.ui; + +import org.terasology.entitySystem.entity.EntityRef; +import org.terasology.rendering.nui.BaseInteractionScreen; +import org.terasology.rendering.nui.layers.ingame.inventory.InventoryGrid; + +/** + * This class represents the seed mixer window. + */ +public class SeedMixerWindow extends BaseInteractionScreen { + + private InventoryGrid playerInventory; + + private InventoryGrid seed1; + private InventoryGrid seed2; + private InventoryGrid offspring1; + private InventoryGrid offspring2; + + private EntityRef player = EntityRef.NULL; + + @Override + public void initialise() { + player = EntityRef.NULL; + + seed1 = find("S1", InventoryGrid.class); + seed2 = find("S1", InventoryGrid.class); + offspring1 = find("O1", InventoryGrid.class); + offspring2 = find("O2", InventoryGrid.class); + } + + @Override + protected void initializeWithInteractionTarget(EntityRef interactionTarget) { + } + +} From 6efcc8d2ba9dd30efd705cdb2dba392b962d436e Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Wed, 29 Mar 2017 13:42:25 +0530 Subject: [PATCH 6/9] added plus and equals textures --- assets/textures/equals.png | Bin 0 -> 299 bytes assets/textures/plus.png | Bin 0 -> 514 bytes assets/ui/SeedMixer.ui | 153 ++++++++++-------- .../simpleFarming/ui/SeedMixerWindow.java | 62 ++++++- 4 files changed, 137 insertions(+), 78 deletions(-) create mode 100644 assets/textures/equals.png create mode 100644 assets/textures/plus.png diff --git a/assets/textures/equals.png b/assets/textures/equals.png new file mode 100644 index 0000000000000000000000000000000000000000..9c3ea0f3257cec04bde168f4226964b7021e9934 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTCwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&pI+S(ZhJDfNw>8Bl14r;B4q#=W;!cXKj1inKobua~FL z6mhUAbjFPtqBmxAiq42WsMOK;!0;y1w8FF-2R}dkyswyl#!MiHs85~wT*&1e3nk$-E!=aY^vvci>3DB`HLqlO5t1Kl=(W}ZsX(|o^Mpj mgseN~9`RM*2(sGr4fosb_>;c-AI<^#fx*+&&t;ucLK6U+P;+bm literal 0 HcmV?d00001 diff --git a/assets/textures/plus.png b/assets/textures/plus.png new file mode 100644 index 0000000000000000000000000000000000000000..13a340ec3afce4c966129427d7046259951d4f63 GIT binary patch literal 514 zcmV+d0{#7oP)?60h1FHy37f>>BVw_+#_e{#wQ4L(M3*R48e;+)kV}Y3?_Ko znG(19kcH(C>5nw}iooG;I2;bg6{?D=&VD}!RRJC{^IdjlKgq-fcmTF$>VUI|T$WNw zJ5@cZ>YIIzs=6!TYgLFt13Uqb_WW+P?5GM6_yC6Bc`(~z2&kPpK?Zb51bz)pU=ajn zC}>>s@tw%#FC_yhq8E3axGQDzHAx3V#17_LVH*odM^1h)4QOIruv1+F^+>=K(5EVP z(kNkSy0-v_k+M)D))>)^*)PD^0<1>-)<&!a4kB_YrNmp{IZ)Usf`$>9GD_6J{PaJ% zP-+G`;3cT_5+&3X8>bU5@jfV<6L7EqvtHuW#K5f?$;E=1^8G$A^*}2kuM_() { + @Override + public EntityRef get() { + return CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + } + }); + playerInventory.setCellOffset(10); + playerInventory.setMaxCellCount(40); + + player = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + } + + @Override + public void onOpened() { + EntityRef characterEntity = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + CharacterComponent characterComponent = characterEntity.getComponent(CharacterComponent.class); + + // In case the player has not been created yet, exit out early to prevent an error. + if (characterComponent == null) { + return; + } + + // If the reference to the player entity hasn't been set yet, or it refers to a NULL entity, call the reInit() + // method to set it. The getId() check is necessary for certain network entities whose ID is 0, but are + // erroneously marked as existent. + if (!player.exists() || (player.exists() && (player == EntityRef.NULL || player.getId() == 0 || player == null))) { + reInit(); + } + + // As long as there's an interaction target, open this window. + if (getInteractionTarget() != EntityRef.NULL) { + initializeWithInteractionTarget(getInteractionTarget()); + super.onOpened(); + } } @Override protected void initializeWithInteractionTarget(EntityRef interactionTarget) { + reInit(); } } From 986ce9b21289f213cdd0cfab8f9bb0a84cd01f2a Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Thu, 30 Mar 2017 11:19:39 +0530 Subject: [PATCH 7/9] Bound inventory cell targets --- .../simpleFarming/ui/SeedMixerWindow.java | 68 +++++++++++++++---- 1 file changed, 54 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java index 571d7a01..4c2a002c 100644 --- a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java +++ b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java @@ -15,12 +15,15 @@ */ package org.terasology.simpleFarming.ui; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.logic.characters.CharacterComponent; import org.terasology.logic.inventory.InventoryComponent; import org.terasology.logic.players.LocalPlayer; import org.terasology.registry.CoreRegistry; import org.terasology.rendering.nui.BaseInteractionScreen; +import org.terasology.rendering.nui.databinding.Binding; import org.terasology.rendering.nui.databinding.ReadOnlyBinding; import org.terasology.rendering.nui.layers.ingame.inventory.InventoryCell; import org.terasology.rendering.nui.layers.ingame.inventory.InventoryGrid; @@ -32,6 +35,8 @@ public class SeedMixerWindow extends BaseInteractionScreen { private InventoryGrid playerInventory; + private static final Logger logger = LoggerFactory.getLogger(SeedMixerWindow.class); + private InventoryCell seed1; private InventoryCell seed2; private InventoryCell offspring1; @@ -41,6 +46,7 @@ public class SeedMixerWindow extends BaseInteractionScreen { @Override public void initialise() { + logger.info("Initialise called."); player = EntityRef.NULL; seed1 = find("S1", InventoryCell.class); @@ -48,24 +54,21 @@ public void initialise() { offspring1 = find("O1", InventoryCell.class); offspring2 = find("O2", InventoryCell.class); - } - - public void reInit() { playerInventory = find("inventory", InventoryGrid.class); + player = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); playerInventory.bindTargetEntity(new ReadOnlyBinding() { @Override public EntityRef get() { - return CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + return player; } }); playerInventory.setCellOffset(10); playerInventory.setMaxCellCount(40); - - player = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); } @Override public void onOpened() { + logger.info("onOpened"); EntityRef characterEntity = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); CharacterComponent characterComponent = characterEntity.getComponent(CharacterComponent.class); @@ -74,13 +77,6 @@ public void onOpened() { return; } - // If the reference to the player entity hasn't been set yet, or it refers to a NULL entity, call the reInit() - // method to set it. The getId() check is necessary for certain network entities whose ID is 0, but are - // erroneously marked as existent. - if (!player.exists() || (player.exists() && (player == EntityRef.NULL || player.getId() == 0 || player == null))) { - reInit(); - } - // As long as there's an interaction target, open this window. if (getInteractionTarget() != EntityRef.NULL) { initializeWithInteractionTarget(getInteractionTarget()); @@ -90,7 +86,51 @@ public void onOpened() { @Override protected void initializeWithInteractionTarget(EntityRef interactionTarget) { - reInit(); + logger.info(interactionTarget.toFullDescription()); + seed1.bindTargetInventory(new Binding() { + @Override + public EntityRef get() { + return interactionTarget; + } + + @Override + public void set(EntityRef value) { + seed1.setTargetInventory(value); + } + }); + seed2.bindTargetInventory(new Binding() { + @Override + public EntityRef get() { + return interactionTarget; + } + + @Override + public void set(EntityRef value) { + seed2.setTargetInventory(value); + } + }); + offspring1.bindTargetInventory(new Binding() { + @Override + public EntityRef get() { + return interactionTarget; + } + + @Override + public void set(EntityRef value) { + seed1.setTargetInventory(value); + } + }); + offspring2.bindTargetInventory(new Binding() { + @Override + public EntityRef get() { + return interactionTarget; + } + + @Override + public void set(EntityRef value) { + seed1.setTargetInventory(value); + } + }); } } From 49453f79c9e6d36306852058574e3bc15290a764 Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Wed, 5 Apr 2017 17:59:08 +0530 Subject: [PATCH 8/9] Made new window class --- assets/ui/SeedMixer.ui | 2 +- ...dMixerWindow.java => SeedMixerScreen.java} | 105 +++++++++--------- 2 files changed, 54 insertions(+), 53 deletions(-) rename src/main/java/org/terasology/simpleFarming/ui/{SeedMixerWindow.java => SeedMixerScreen.java} (83%) diff --git a/assets/ui/SeedMixer.ui b/assets/ui/SeedMixer.ui index 5fa8ce2f..01c9296d 100644 --- a/assets/ui/SeedMixer.ui +++ b/assets/ui/SeedMixer.ui @@ -1,5 +1,5 @@ { - "type": "SeedMixerWindow", + "type": "SeedMixerScreen", "skin": "inventoryDefault", "contents": { "type": "relativeLayout", diff --git a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java similarity index 83% rename from src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java rename to src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java index 4c2a002c..793a99cb 100644 --- a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerWindow.java +++ b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java @@ -15,11 +15,11 @@ */ package org.terasology.simpleFarming.ui; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.logic.characters.CharacterComponent; -import org.terasology.logic.inventory.InventoryComponent; import org.terasology.logic.players.LocalPlayer; import org.terasology.registry.CoreRegistry; import org.terasology.rendering.nui.BaseInteractionScreen; @@ -28,65 +28,20 @@ import org.terasology.rendering.nui.layers.ingame.inventory.InventoryCell; import org.terasology.rendering.nui.layers.ingame.inventory.InventoryGrid; -/** - * This class represents the seed mixer window. - */ -public class SeedMixerWindow extends BaseInteractionScreen { +public class SeedMixerScreen extends BaseInteractionScreen { - private InventoryGrid playerInventory; + private EntityRef player = EntityRef.NULL; - private static final Logger logger = LoggerFactory.getLogger(SeedMixerWindow.class); + private InventoryGrid playerInventory; + private static final Logger logger = LoggerFactory.getLogger(SeedMixerScreen.class); private InventoryCell seed1; private InventoryCell seed2; private InventoryCell offspring1; private InventoryCell offspring2; - private EntityRef player = EntityRef.NULL; - - @Override - public void initialise() { - logger.info("Initialise called."); - player = EntityRef.NULL; - - seed1 = find("S1", InventoryCell.class); - seed2 = find("S1", InventoryCell.class); - offspring1 = find("O1", InventoryCell.class); - offspring2 = find("O2", InventoryCell.class); - - playerInventory = find("inventory", InventoryGrid.class); - player = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); - playerInventory.bindTargetEntity(new ReadOnlyBinding() { - @Override - public EntityRef get() { - return player; - } - }); - playerInventory.setCellOffset(10); - playerInventory.setMaxCellCount(40); - } - - @Override - public void onOpened() { - logger.info("onOpened"); - EntityRef characterEntity = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); - CharacterComponent characterComponent = characterEntity.getComponent(CharacterComponent.class); - - // In case the player has not been created yet, exit out early to prevent an error. - if (characterComponent == null) { - return; - } - - // As long as there's an interaction target, open this window. - if (getInteractionTarget() != EntityRef.NULL) { - initializeWithInteractionTarget(getInteractionTarget()); - super.onOpened(); - } - } - @Override protected void initializeWithInteractionTarget(EntityRef interactionTarget) { - logger.info(interactionTarget.toFullDescription()); seed1.bindTargetInventory(new Binding() { @Override public EntityRef get() { @@ -117,7 +72,7 @@ public EntityRef get() { @Override public void set(EntityRef value) { - seed1.setTargetInventory(value); + offspring1.setTargetInventory(value); } }); offspring2.bindTargetInventory(new Binding() { @@ -128,9 +83,55 @@ public EntityRef get() { @Override public void set(EntityRef value) { - seed1.setTargetInventory(value); + offspring2.setTargetInventory(value); } }); } + private void reInit() { + player = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + playerInventory = find("inventory", InventoryGrid.class); + playerInventory.bindTargetEntity(new ReadOnlyBinding() { + @Override + public EntityRef get() { + return player; + } + }); + playerInventory.setCellOffset(10); + } + + @Override + public void initialise() { + player = EntityRef.NULL; + + seed1 = find("S1", InventoryCell.class); + seed2 = find("S1", InventoryCell.class); + offspring1 = find("O1", InventoryCell.class); + offspring2 = find("O2", InventoryCell.class); + } + + @Override + public void onOpened() { + EntityRef characterEntity = CoreRegistry.get(LocalPlayer.class).getCharacterEntity(); + CharacterComponent characterComponent = characterEntity.getComponent(CharacterComponent.class); + + // In case the player has been created yet, exit out early to prevent an error. + if (characterComponent == null) { + logger.info("character component null"); + return; + } + + // If the reference to the player entity hasn't been set yet, or it refers to a NULL entity, call the reInit() + // method to set it. The getId() check is necessary for certain network entities whose ID is 0, but are + // erroneously marked as existent. + if (!player.exists() || (player.exists() && (player == EntityRef.NULL || player.getId() == 0 || player == null))) { + reInit(); + } + + // As long as there's an interaction target, open this window. + if (getInteractionTarget() != EntityRef.NULL) { + initializeWithInteractionTarget(getInteractionTarget()); + super.onOpened(); + } + } } From dae8cfe1599e413478b90f1dc0cb1d1fd5091f2b Mon Sep 17 00:00:00 2001 From: Arpan Banerjee Date: Thu, 6 Apr 2017 12:23:26 +0530 Subject: [PATCH 9/9] UI change completed --- assets/ui/SeedMixer.ui | 166 +++++++++--------- .../systems/SeedMixerSystem.java | 6 +- .../simpleFarming/ui/SeedMixerScreen.java | 7 +- 3 files changed, 91 insertions(+), 88 deletions(-) diff --git a/assets/ui/SeedMixer.ui b/assets/ui/SeedMixer.ui index 01c9296d..ea8e12e2 100644 --- a/assets/ui/SeedMixer.ui +++ b/assets/ui/SeedMixer.ui @@ -1,89 +1,89 @@ { - "type": "SeedMixerScreen", - "skin": "inventoryDefault", - "contents": { - "type": "relativeLayout", - "contents": [ - { - "type": "InventoryGrid", - "id": "inventory", - "maxHorizontalCells" : 10, - "layoutInfo": { - "use-content-width": true, - "use-content-height": true, - "position-bottom": { - "target": "BOTTOM", - "offset": 128 - }, - "position-horizontal-center": {} - } - }, - { - "type": "flowLayout", - "id": "mixerInventory", - "contents": [ - { - "type": "InventoryCell", - "id": "S1", - "targetSlot": 0 - }, - { - "type": "UIImage", - "image": "SimpleFarming:plus", - "layoutInfo": { - "width": 48, - "height": 48, - "position-vertical-center": {} - } - }, - { - "type": "InventoryCell", - "id": "S2", - "targetSlot": 1 - }, - { - "type": "UIImage", - "image": "SimpleFarming:equals", - "layoutInfo": { - "width": 48, - "height": 48, - "position-vertical-center": {} - } - }, - { - "type": "InventoryCell", - "id": "O1", - "targetSlot": 2 - }, - { - "type": "UIImage", - "image": "SimpleFarming:plus", - "layoutInfo": { - "width": 48, - "height": 48, - "position-bottom": { - "target": "BOTTOM", - "widget": "mixerInventory" + "type": "SeedMixerScreen", + "skin": "inventoryDefault", + "contents": { + "type": "relativeLayout", + "contents": [ + { + "type": "InventoryGrid", + "id": "inventory", + "maxHorizontalCells" : 10, + "layoutInfo": { + "use-content-width": true, + "use-content-height": true, + "position-bottom": { + "target": "BOTTOM", + "offset": 128 + }, + "position-horizontal-center": {} + } + }, + { + "type": "flowLayout", + "id": "mixerInventory", + "contents": [ + { + "type": "InventoryCell", + "id": "S1", + "targetSlot": 0 + }, + { + "type": "UIImage", + "image": "SimpleFarming:plus", + "layoutInfo": { + "width": 48, + "height": 48, + "position-vertical-center": {} } + }, + { + "type": "InventoryCell", + "id": "S2", + "targetSlot": 1 + }, + { + "type": "UIImage", + "image": "SimpleFarming:equals", + "layoutInfo": { + "width": 48, + "height": 48, + "position-vertical-center": {} + } + }, + { + "type": "InventoryCell", + "id": "O1", + "targetSlot": 2 + }, + { + "type": "UIImage", + "image": "SimpleFarming:plus", + "layoutInfo": { + "width": 48, + "height": 48, + "position-bottom": { + "target": "BOTTOM", + "widget": "mixerInventory" + } + } + }, + { + "type": "InventoryCell", + "id": "O2", + "targetSlot": 3 + } + ], + "layoutInfo": { + "use-content-width": true, + "use-content-height": true, + "position-horizontal-center": {}, + "position-bottom": { + "target": "TOP", + "widget": "inventory", + "offset": 16 } - }, - { - "type": "InventoryCell", - "id": "O2", - "targetSlot": 3 - } - ], - "layoutInfo": { - "use-content-width": true, - "use-content-height": true, - "position-horizontal-center": {}, - "position-bottom": { - "target": "TOP", - "widget": "inventory", - "offset": 16 } } - } - ] - } + ] + } } \ No newline at end of file diff --git a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java index 27c6196e..09522e33 100644 --- a/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java +++ b/src/main/java/org/terasology/simpleFarming/systems/SeedMixerSystem.java @@ -82,12 +82,12 @@ public void onSeedsBred(OnBreed event, EntityRef entity, SeedComponent seedCompo } } - @Command(shortDescription = "Prints genome of held seed.") - public String seedGenomeCheck(@Sender EntityRef client) { + @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(SeedComponent.class) && selectedItem.hasComponent(GenomeComponent.class)) { + if (selectedItem.hasComponent(GenomeComponent.class)) { return selectedItem.getComponent(GenomeComponent.class).genes; } else { return "Command not valid for current conditions."; diff --git a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java index 793a99cb..95fab41a 100644 --- a/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java +++ b/src/main/java/org/terasology/simpleFarming/ui/SeedMixerScreen.java @@ -20,6 +20,7 @@ import org.slf4j.LoggerFactory; import org.terasology.entitySystem.entity.EntityRef; import org.terasology.logic.characters.CharacterComponent; +import org.terasology.logic.inventory.InventoryComponent; import org.terasology.logic.players.LocalPlayer; import org.terasology.registry.CoreRegistry; import org.terasology.rendering.nui.BaseInteractionScreen; @@ -42,6 +43,8 @@ public class SeedMixerScreen extends BaseInteractionScreen { @Override protected void initializeWithInteractionTarget(EntityRef interactionTarget) { + logger.info(interactionTarget.toFullDescription()); + logger.info(String.valueOf(interactionTarget.hasComponent(InventoryComponent.class))); seed1.bindTargetInventory(new Binding() { @Override public EntityRef get() { @@ -97,7 +100,7 @@ public EntityRef get() { return player; } }); - playerInventory.setCellOffset(10); + playerInventory.setMaxCellCount(40); } @Override @@ -105,7 +108,7 @@ public void initialise() { player = EntityRef.NULL; seed1 = find("S1", InventoryCell.class); - seed2 = find("S1", InventoryCell.class); + seed2 = find("S2", InventoryCell.class); offspring1 = find("O1", InventoryCell.class); offspring2 = find("O2", InventoryCell.class); }