diff --git a/Jenkinsfile b/Jenkinsfile index 487ac8d3d3..ed6d117907 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -115,20 +115,24 @@ pipeline { stage('Analytics') { steps { sh './gradlew --console=plain check -x test' - // the default resolution when omitting `defaultBranch` is to `master` - // this is wrong in our case, so explicitly set `develop` as default - // TODO: does this also work for PRs with different base branch? - discoverGitReferenceBuild(defaultBranch: 'develop') - recordIssues skipBlames: true, - tools: [ - checkStyle(pattern: '**/build/reports/checkstyle/*.xml'), - spotBugs(pattern: '**/build/reports/spotbugs/main/*.xml', useRankAsPriority: true), - pmdParser(pattern: '**/build/reports/pmd/*.xml') - ] + } + post { + always { + // the default resolution when omitting `defaultBranch` is to `master` + // this is wrong in our case, so explicitly set `develop` as default + // TODO: does this also work for PRs with different base branch? + discoverGitReferenceBuild(defaultBranch: 'develop') + recordIssues skipBlames: true, enabledForFailure: true, + tools: [ + checkStyle(pattern: '**/build/reports/checkstyle/*.xml'), + spotBugs(pattern: '**/build/reports/spotbugs/main/*.xml', useRankAsPriority: true), + pmdParser(pattern: '**/build/reports/pmd/*.xml') + ] - recordIssues skipBlames: true, - tool: taskScanner(includePattern: '**/*.java,**/*.groovy,**/*.gradle', \ - lowTags: 'WIBNIF', normalTags: 'TODO', highTags: 'ASAP') + recordIssues skipBlames: true, enabledForFailure: true, + tool: taskScanner(includePattern: '**/*.java,**/*.groovy,**/*.gradle', \ + lowTags: 'WIBNIF', normalTags: 'TODO', highTags: 'ASAP') + } } } diff --git a/config/gradle/common.gradle b/config/gradle/common.gradle index 206eaa6685..d14931b36a 100644 --- a/config/gradle/common.gradle +++ b/config/gradle/common.gradle @@ -89,7 +89,7 @@ jacocoTestReport { // Solo module builds in Jenkins get a copy of the config dir from the engine harness so it still lives at root/config // TODO: Maybe update other projects like modules to pull the zipped dependency so fewer quirks are needed in Jenkins checkstyle { - ignoreFailures = true + ignoreFailures = false configFile = new File(rootDir, 'config/metrics/checkstyle/checkstyle.xml') configProperties.samedir = checkstyle.configFile.parentFile } diff --git a/engine-tests/src/main/java/org/terasology/engine/Environment.java b/engine-tests/src/main/java/org/terasology/engine/Environment.java index 56f0f27a70..032ae6cebe 100644 --- a/engine-tests/src/main/java/org/terasology/engine/Environment.java +++ b/engine-tests/src/main/java/org/terasology/engine/Environment.java @@ -34,7 +34,7 @@ class Environment { * * @param moduleNames a list of module names */ - public Environment(Name... moduleNames) { + Environment(Name... moduleNames) { try { reset(Sets.newHashSet(moduleNames)); } catch (Exception e) { diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/EntityRefComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/EntityRefComponent.java index ace5c103a8..7a7669ab8e 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/EntityRefComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/EntityRefComponent.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; -public class EntityRefComponent implements Component { +public class EntityRefComponent implements Component { public EntityRef entityRef = EntityRef.NULL; @@ -16,4 +16,9 @@ public EntityRefComponent() { public EntityRefComponent(EntityRef ref) { this.entityRef = ref; } + + @Override + public void copyFrom(EntityRefComponent other) { + this.entityRef = other.entityRef; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/ForceBlockActiveComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/ForceBlockActiveComponent.java index d34cc46930..c7af15ffe3 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/ForceBlockActiveComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/ForceBlockActiveComponent.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; @ForceBlockActive -public class ForceBlockActiveComponent implements Component { +public class ForceBlockActiveComponent extends EmptyComponent { } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/GetterSetterComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/GetterSetterComponent.java index 87d18b8715..10551680ae 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/GetterSetterComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/GetterSetterComponent.java @@ -3,9 +3,9 @@ package org.terasology.unittest.stubs; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class GetterSetterComponent implements Component { +public class GetterSetterComponent implements Component { public transient boolean getterUsed; public transient boolean setterUsed; @@ -20,4 +20,10 @@ public void setValue(Vector3f value) { this.value = value; setterUsed = true; } + + @Override + public void copyFrom(GetterSetterComponent other) { + this.getterUsed = other.getterUsed; + this.setterUsed = other.setterUsed; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/IntegerComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/IntegerComponent.java index a2341a8b87..048eaed3ef 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/IntegerComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/IntegerComponent.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public final class IntegerComponent implements Component { +public final class IntegerComponent implements Component { public int value; public IntegerComponent() { @@ -36,4 +36,9 @@ public boolean equals(Object o) { public int hashCode() { return value; } + + @Override + public void copyFrom(IntegerComponent other) { + this.value = other.value; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfEnumsComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfEnumsComponent.java index ada27a02cb..f2bc64bf42 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfEnumsComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfEnumsComponent.java @@ -2,12 +2,18 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Lists; import org.terasology.engine.math.Side; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.ArrayList; import java.util.List; -public class ListOfEnumsComponent implements Component { +public class ListOfEnumsComponent implements Component { public List elements = new ArrayList<>(); + + @Override + public void copyFrom(ListOfEnumsComponent other) { + this.elements = Lists.newArrayList(other.elements); + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfObjectComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfObjectComponent.java index ce45021730..d2eb60a28a 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfObjectComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/ListOfObjectComponent.java @@ -3,19 +3,38 @@ package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.reflection.MappedContainer; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; -public class ListOfObjectComponent implements Component { +public class ListOfObjectComponent implements Component { public String shortName; public List elements = new ArrayList<>(); + @Override + public void copyFrom(ListOfObjectComponent other) { + this.shortName = other.shortName; + this.elements = other.elements.stream() + .map(SubElement::new) + .collect(Collectors.toList()); + } + @MappedContainer public static class SubElement { public String id; public String type; + + public SubElement() { + + } + + public SubElement(SubElement other) { + this(); + this.id = other.id; + this.type = other.type; + } } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedContainerComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedContainerComponent.java index 7b2ea43734..213c2b0879 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedContainerComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedContainerComponent.java @@ -2,14 +2,24 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.reflection.MappedContainer; import java.util.Set; +import java.util.stream.Collectors; -public class MappedContainerComponent implements Component { +public class MappedContainerComponent implements Component { public Set containers; + @Override + public void copyFrom(MappedContainerComponent other) { + this.containers = other.containers.stream().map((cont)-> { + Cont newCont = new Cont(); + newCont.value = cont.value; + return newCont; + }).collect(Collectors.toSet()); + } + @MappedContainer public static class Cont { public String value; diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedTypeComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedTypeComponent.java index 471cb68daf..5e8c6df880 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedTypeComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/MappedTypeComponent.java @@ -3,14 +3,20 @@ package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.reflection.MappedContainer; -public class MappedTypeComponent implements Component { +public class MappedTypeComponent implements Component { public InnerType val = new InnerType(); public Number number = 2; + @Override + public void copyFrom(MappedTypeComponent other) { + this.val = other.val; + this.number = other.number; + } + @MappedContainer public static class InnerType { public static final int STATIC_VALUE = 2; diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/OrderedMapTestComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/OrderedMapTestComponent.java index 61fe23e9df..1370a25feb 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/OrderedMapTestComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/OrderedMapTestComponent.java @@ -2,10 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Maps; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; -public final class OrderedMapTestComponent implements Component { +public final class OrderedMapTestComponent implements Component { public Map orderedMap; + + @Override + public void copyFrom(OrderedMapTestComponent other) { + this.orderedMap = Maps.newHashMap(other.orderedMap); + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/OwnerComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/OwnerComponent.java index ebbf65ca5c..c3a0b4c367 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/OwnerComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/OwnerComponent.java @@ -2,11 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; -public class OwnerComponent implements Component { +public class OwnerComponent implements Component { @Owns public EntityRef child = EntityRef.NULL; + + @Override + public void copyFrom(OwnerComponent other) { + this.child = other.child; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/RetainedOnBlockChangeComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/RetainedOnBlockChangeComponent.java index 9fc1ea6d89..68e398186c 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/RetainedOnBlockChangeComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/RetainedOnBlockChangeComponent.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.Component; @ForceBlockActive(retainUnalteredOnBlockChange = true) -public class RetainedOnBlockChangeComponent implements Component { +public class RetainedOnBlockChangeComponent implements Component { public int value; public RetainedOnBlockChangeComponent() { @@ -15,4 +15,9 @@ public RetainedOnBlockChangeComponent() { public RetainedOnBlockChangeComponent(int value) { this.value = value; } + + @Override + public void copyFrom(RetainedOnBlockChangeComponent other) { + this.value = other.value; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/StringComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/StringComponent.java index 83b2705191..567591477e 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/StringComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/StringComponent.java @@ -4,10 +4,10 @@ import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public final class StringComponent implements Component { +public final class StringComponent implements Component{ public static String staticValue = "Test"; public String value; @@ -41,4 +41,9 @@ public String toString() { .addValue(value) .toString(); } + + @Override + public void copyFrom(StringComponent other) { + this.value = other.value; + } } diff --git a/engine-tests/src/main/java/org/terasology/unittest/stubs/UnsupportedTypeComponent.java b/engine-tests/src/main/java/org/terasology/unittest/stubs/UnsupportedTypeComponent.java index ff519f3702..d06153bbd6 100644 --- a/engine-tests/src/main/java/org/terasology/unittest/stubs/UnsupportedTypeComponent.java +++ b/engine-tests/src/main/java/org/terasology/unittest/stubs/UnsupportedTypeComponent.java @@ -3,15 +3,22 @@ package org.terasology.unittest.stubs; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.systems.internal.DoNotAutoRegister; +import org.terasology.gestalt.entitysystem.component.Component; @DoNotAutoRegister -public class UnsupportedTypeComponent implements Component { +public class UnsupportedTypeComponent implements Component { public UnsupportedType value; public UnsupportedType2 value2; public UnsupportedType3 value3; + @Override + public void copyFrom(UnsupportedTypeComponent other) { + this.value = other.value; + this.value2 = other.value2; + this.value3 = other.value3; + } + public interface UnsupportedType3 { } diff --git a/engine-tests/src/test/java/org/terasology/engine/core/module/ModuleManagerTest.java b/engine-tests/src/test/java/org/terasology/engine/core/module/ModuleManagerTest.java index 32a083ee2f..63d9eda83e 100644 --- a/engine-tests/src/test/java/org/terasology/engine/core/module/ModuleManagerTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/core/module/ModuleManagerTest.java @@ -14,7 +14,6 @@ import org.terasology.engine.core.PathManager; import org.terasology.engine.core.PathManagerProvider; import org.terasology.engine.core.subsystem.EngineSubsystem; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.logic.permission.PermissionSetComponent; import org.terasology.engine.world.block.structure.AttachSupportRequiredComponent; import org.terasology.gestalt.module.Module; @@ -104,7 +103,6 @@ public void nonApiClassesAreNotPermitted(Class disallowedClass) { */ @ParameterizedTest @ValueSource(classes = { - Component.class, AttachSupportRequiredComponent.class, PermissionSetComponent.class }) diff --git a/engine-tests/src/test/java/org/terasology/engine/entitySystem/PojoEntityManagerTest.java b/engine-tests/src/test/java/org/terasology/engine/entitySystem/PojoEntityManagerTest.java index 0419bef7b4..1fdd8726b6 100644 --- a/engine-tests/src/test/java/org/terasology/engine/entitySystem/PojoEntityManagerTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/entitySystem/PojoEntityManagerTest.java @@ -6,13 +6,10 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.terasology.engine.core.module.ModuleManager; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.gestalt.assets.management.AssetManager; -import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; import org.terasology.engine.context.Context; import org.terasology.engine.context.internal.ContextImpl; import org.terasology.engine.core.bootstrap.EntitySystemSetupUtil; +import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager; @@ -26,16 +23,19 @@ import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; import org.terasology.engine.entitySystem.prefab.internal.PojoPrefab; -import org.terasology.unittest.stubs.EntityRefComponent; -import org.terasology.unittest.stubs.IntegerComponent; -import org.terasology.unittest.stubs.StringComponent; import org.terasology.engine.network.NetworkMode; import org.terasology.engine.network.NetworkSystem; import org.terasology.engine.recording.RecordAndReplayCurrentStatus; import org.terasology.engine.registry.CoreRegistry; import org.terasology.engine.testUtil.ModuleManagerFactory; import org.terasology.engine.utilities.Assets; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.assets.management.AssetManager; +import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManagerImpl; +import org.terasology.unittest.stubs.EntityRefComponent; +import org.terasology.unittest.stubs.IntegerComponent; +import org.terasology.unittest.stubs.StringComponent; import java.util.Collections; import java.util.Iterator; @@ -360,7 +360,7 @@ public void testIsLoadedFalseAfterPersist() { @Test public void testIsLoadedTrueAfterRestore() { entityManager.setNextId(3); - EntityRef entity = entityManager.createEntityWithId(2, Collections.emptyList()); + EntityRef entity = entityManager.createEntityWithId(2, Collections.emptyList()); assertTrue(entity.isActive()); } diff --git a/engine-tests/src/test/java/org/terasology/engine/entitySystem/metadata/OwnedCollectionComponent.java b/engine-tests/src/test/java/org/terasology/engine/entitySystem/metadata/OwnedCollectionComponent.java index b225fa9486..d228c90ca5 100644 --- a/engine-tests/src/test/java/org/terasology/engine/entitySystem/metadata/OwnedCollectionComponent.java +++ b/engine-tests/src/test/java/org/terasology/engine/entitySystem/metadata/OwnedCollectionComponent.java @@ -3,13 +3,19 @@ package org.terasology.engine.entitySystem.metadata; import com.google.common.collect.Lists; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; -public class OwnedCollectionComponent implements Component { +public class OwnedCollectionComponent implements Component { @Owns public List items = Lists.newArrayList(); + + + @Override + public void copyFrom(OwnedCollectionComponent other) { + this.items = Lists.newArrayList(other.items); + } } diff --git a/engine-tests/src/test/java/org/terasology/engine/logic/delay/ArbritaryDelayActionComponent.java b/engine-tests/src/test/java/org/terasology/engine/logic/delay/ArbritaryDelayActionComponent.java index d86a7cd855..077d3ffbf2 100644 --- a/engine-tests/src/test/java/org/terasology/engine/logic/delay/ArbritaryDelayActionComponent.java +++ b/engine-tests/src/test/java/org/terasology/engine/logic/delay/ArbritaryDelayActionComponent.java @@ -2,8 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.delay; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class ArbritaryDelayActionComponent implements Component { +public class ArbritaryDelayActionComponent implements Component { public int value = 1; + + @Override + public void copyFrom(ArbritaryDelayActionComponent other) { + this.value = other.value; + } } diff --git a/engine-tests/src/test/java/org/terasology/engine/particles/updating/ParticleUpdaterImplTest.java b/engine-tests/src/test/java/org/terasology/engine/particles/updating/ParticleUpdaterImplTest.java index 5beea506b9..e4abb034a2 100644 --- a/engine-tests/src/test/java/org/terasology/engine/particles/updating/ParticleUpdaterImplTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/particles/updating/ParticleUpdaterImplTest.java @@ -6,13 +6,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.particles.components.ParticleEmitterComponent; import org.terasology.engine.particles.components.affectors.VelocityAffectorComponent; import org.terasology.engine.particles.components.generators.EnergyRangeGeneratorComponent; import org.terasology.engine.physics.Physics; import org.terasology.engine.physics.engine.PhysicsEngine; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; import java.util.Iterator; diff --git a/engine-tests/src/test/java/org/terasology/engine/persistence/ComponentSerializerTest.java b/engine-tests/src/test/java/org/terasology/engine/persistence/ComponentSerializerTest.java index cc27d421f8..53959d5f32 100644 --- a/engine-tests/src/test/java/org/terasology/engine/persistence/ComponentSerializerTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/persistence/ComponentSerializerTest.java @@ -9,17 +9,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.reflections.Reflections; -import org.terasology.engine.core.module.ModuleManager; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.context.Context; import org.terasology.engine.context.internal.ContextImpl; import org.terasology.engine.core.bootstrap.EntitySystemSetupUtil; -import org.terasology.engine.entitySystem.Component; +import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; -import org.terasology.unittest.stubs.GetterSetterComponent; -import org.terasology.unittest.stubs.IntegerComponent; -import org.terasology.unittest.stubs.StringComponent; import org.terasology.engine.network.NetworkMode; import org.terasology.engine.network.NetworkSystem; import org.terasology.engine.persistence.serializers.ComponentSerializer; @@ -28,9 +23,14 @@ import org.terasology.engine.persistence.typeHandling.mathTypes.Vector3fTypeHandler; import org.terasology.engine.recording.RecordAndReplayCurrentStatus; import org.terasology.engine.registry.CoreRegistry; +import org.terasology.engine.testUtil.ModuleManagerFactory; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; import org.terasology.protobuf.EntityData; -import org.terasology.engine.testUtil.ModuleManagerFactory; +import org.terasology.unittest.stubs.GetterSetterComponent; +import org.terasology.unittest.stubs.IntegerComponent; +import org.terasology.unittest.stubs.StringComponent; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/engine-tests/src/test/java/org/terasology/engine/persistence/EntitySerializerTest.java b/engine-tests/src/test/java/org/terasology/engine/persistence/EntitySerializerTest.java index 346590c933..16606010e9 100644 --- a/engine-tests/src/test/java/org/terasology/engine/persistence/EntitySerializerTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/persistence/EntitySerializerTest.java @@ -6,14 +6,10 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.terasology.engine.core.module.ModuleManager; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.gestalt.assets.management.AssetManager; -import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; import org.terasology.engine.context.Context; import org.terasology.engine.context.internal.ContextImpl; import org.terasology.engine.core.bootstrap.EntitySystemSetupUtil; -import org.terasology.engine.entitySystem.Component; +import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.entitySystem.DoNotPersist; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; @@ -23,20 +19,24 @@ import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; import org.terasology.engine.entitySystem.prefab.internal.PojoPrefab; -import org.terasology.unittest.stubs.GetterSetterComponent; -import org.terasology.unittest.stubs.IntegerComponent; -import org.terasology.unittest.stubs.MappedTypeComponent; -import org.terasology.unittest.stubs.StringComponent; import org.terasology.engine.network.NetworkMode; import org.terasology.engine.network.NetworkSystem; import org.terasology.engine.persistence.serializers.EntitySerializer; -import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManagerImpl; import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; -import org.terasology.protobuf.EntityData; import org.terasology.engine.recording.RecordAndReplayCurrentStatus; import org.terasology.engine.registry.CoreRegistry; import org.terasology.engine.testUtil.ModuleManagerFactory; import org.terasology.engine.utilities.Assets; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.assets.management.AssetManager; +import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; +import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManagerImpl; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; +import org.terasology.protobuf.EntityData; +import org.terasology.unittest.stubs.GetterSetterComponent; +import org.terasology.unittest.stubs.IntegerComponent; +import org.terasology.unittest.stubs.MappedTypeComponent; +import org.terasology.unittest.stubs.StringComponent; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -321,6 +321,6 @@ public void testComponentWithDoNotPersistIsIgnoredUponDeserialization() { } @DoNotPersist - public static class NonpersistedComponent implements Component { + public static class NonpersistedComponent extends EmptyComponent { } } diff --git a/engine-tests/src/test/java/org/terasology/engine/persistence/typeHandling/reflection/TestModuleEnvironmentSandbox.java b/engine-tests/src/test/java/org/terasology/engine/persistence/typeHandling/reflection/TestModuleEnvironmentSandbox.java index 60da6e9761..09eb859b2e 100644 --- a/engine-tests/src/test/java/org/terasology/engine/persistence/typeHandling/reflection/TestModuleEnvironmentSandbox.java +++ b/engine-tests/src/test/java/org/terasology/engine/persistence/typeHandling/reflection/TestModuleEnvironmentSandbox.java @@ -10,8 +10,8 @@ import org.terasology.engine.core.PathManager; import org.terasology.engine.core.PathManagerProvider; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.testUtil.ModuleManagerFactory; +import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.reflection.ModuleTypeRegistry; import org.terasology.reflection.TypeRegistry; @@ -53,7 +53,7 @@ public void findSubtypeOfGlobalClass() { @Test public void findSubtypeOfEngineClass() { - assertNotEmpty(sandbox.findSubTypeOf("engine:BlockComponent", Component.class)); + assertNotEmpty(sandbox.findSubTypeOf("engine:AbstractBlockFamily", BlockFamily.class)); } @Test diff --git a/engine-tests/src/test/java/org/terasology/engine/world/EntityAwareWorldProviderTest.java b/engine-tests/src/test/java/org/terasology/engine/world/EntityAwareWorldProviderTest.java index 2fab363677..c68c85f98d 100644 --- a/engine-tests/src/test/java/org/terasology/engine/world/EntityAwareWorldProviderTest.java +++ b/engine-tests/src/test/java/org/terasology/engine/world/EntityAwareWorldProviderTest.java @@ -10,10 +10,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.terasology.engine.TerasologyTestingEnvironment; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.gestalt.assets.management.AssetManager; import org.terasology.engine.core.GameThread; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent; @@ -27,10 +24,6 @@ import org.terasology.engine.entitySystem.event.internal.EventSystem; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; -import org.terasology.unittest.stubs.ForceBlockActiveComponent; -import org.terasology.unittest.stubs.IntegerComponent; -import org.terasology.unittest.stubs.RetainedOnBlockChangeComponent; -import org.terasology.unittest.stubs.StringComponent; import org.terasology.engine.entitySystem.systems.BaseComponentSystem; import org.terasology.engine.network.NetworkComponent; import org.terasology.engine.testUtil.WorldProviderCoreStub; @@ -43,6 +36,13 @@ import org.terasology.engine.world.block.loader.BlockFamilyDefinition; import org.terasology.engine.world.block.loader.BlockFamilyDefinitionData; import org.terasology.engine.world.internal.EntityAwareWorldProvider; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.assets.management.AssetManager; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.unittest.stubs.ForceBlockActiveComponent; +import org.terasology.unittest.stubs.IntegerComponent; +import org.terasology.unittest.stubs.RetainedOnBlockChangeComponent; +import org.terasology.unittest.stubs.StringComponent; import java.util.Iterator; import java.util.List; diff --git a/engine-tests/src/test/java/org/terasology/reflection/TypeRegistryTest.java b/engine-tests/src/test/java/org/terasology/reflection/TypeRegistryTest.java index 483fe2bc89..311ea4a98a 100644 --- a/engine-tests/src/test/java/org/terasology/reflection/TypeRegistryTest.java +++ b/engine-tests/src/test/java/org/terasology/reflection/TypeRegistryTest.java @@ -7,7 +7,7 @@ import org.reflections.Reflections; import org.terasology.engine.ModuleEnvironmentTest; import org.terasology.engine.core.module.ExternalApiWhitelist; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.naming.Name; import java.util.Collection; diff --git a/engine/build.gradle b/engine/build.gradle index 75a8d13c39..26fe3702c3 100644 --- a/engine/build.gradle +++ b/engine/build.gradle @@ -114,9 +114,11 @@ dependencies { implementation group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '4.10' // Our developed libs - api group: 'org.terasology.gestalt', name: 'gestalt-asset-core', version: '7.1.0' - api group: 'org.terasology.gestalt', name: 'gestalt-module', version: '7.1.0' - api group: 'org.terasology.gestalt', name: 'gestalt-util', version: '7.1.0' + api group: 'org.terasology.gestalt', name: 'gestalt-asset-core', version: '7.2.0-SNAPSHOT' + api group: 'org.terasology.gestalt', name: 'gestalt-module', version: '7.2.0-SNAPSHOT' + api group: 'org.terasology.gestalt', name: 'gestalt-entity-system', version: '7.2.0-SNAPSHOT' + api group: 'org.terasology.gestalt', name: 'gestalt-util', version: '7.2.0-SNAPSHOT' + api "com.github.zafarkhaja:java-semver:0.10.0" // ASAP: Remove after https://github.com/MovingBlocks/gestalt/pull/110 api group: 'org.terasology', name: 'TeraMath', version: '1.5.0' api group: 'org.terasology', name: 'splash-screen', version: '1.1.1' diff --git a/engine/src/jmh/java/org/terasology/benchmark/entitySystem/EntityCreateBenchmark.java b/engine/src/jmh/java/org/terasology/benchmark/entitySystem/EntityCreateBenchmark.java index d8d1e541e7..710c7af590 100644 --- a/engine/src/jmh/java/org/terasology/benchmark/entitySystem/EntityCreateBenchmark.java +++ b/engine/src/jmh/java/org/terasology/benchmark/entitySystem/EntityCreateBenchmark.java @@ -14,13 +14,13 @@ import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager; import org.terasology.engine.logic.location.LocationComponent; import org.terasology.engine.rendering.logic.MeshComponent; import org.terasology.engine.utilities.random.FastRandom; import org.terasology.engine.world.block.BlockComponent; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/engine/src/jmh/java/org/terasology/benchmark/entitySystem/IterateComponentsBenchmark.java b/engine/src/jmh/java/org/terasology/benchmark/entitySystem/IterateComponentsBenchmark.java index f04b9a905b..80de094c60 100644 --- a/engine/src/jmh/java/org/terasology/benchmark/entitySystem/IterateComponentsBenchmark.java +++ b/engine/src/jmh/java/org/terasology/benchmark/entitySystem/IterateComponentsBenchmark.java @@ -12,13 +12,13 @@ import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.PojoEntityManager; import org.terasology.engine.logic.location.LocationComponent; import org.terasology.engine.rendering.logic.MeshComponent; import org.terasology.engine.utilities.random.FastRandom; import org.terasology.engine.world.block.BlockComponent; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/engine/src/jmh/java/org/terasology/benchmark/reflectFactory/GetterSetterComponent.java b/engine/src/jmh/java/org/terasology/benchmark/reflectFactory/GetterSetterComponent.java index 74560bd452..f75755611b 100644 --- a/engine/src/jmh/java/org/terasology/benchmark/reflectFactory/GetterSetterComponent.java +++ b/engine/src/jmh/java/org/terasology/benchmark/reflectFactory/GetterSetterComponent.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.benchmark.reflectFactory; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class GetterSetterComponent implements Component { +public class GetterSetterComponent implements Component { private int value; public void setValue(int value) { @@ -14,4 +14,9 @@ public void setValue(int value) { public int getValue() { return value; } + + @Override + public void copyFrom(GetterSetterComponent other) { + this.value = other.value; + } } diff --git a/engine/src/main/java/org/terasology/engine/config/Config.java b/engine/src/main/java/org/terasology/engine/config/Config.java index 958c6976e3..f5999dbce6 100644 --- a/engine/src/main/java/org/terasology/engine/config/Config.java +++ b/engine/src/main/java/org/terasology/engine/config/Config.java @@ -17,12 +17,12 @@ import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.TerasologyConstants; import org.terasology.engine.core.subsystem.Resolution; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.utilities.gson.CaseInsensitiveEnumTypeAdapterFactory; import org.terasology.engine.utilities.gson.InputHandler; import org.terasology.engine.utilities.gson.ResolutionHandler; import org.terasology.engine.utilities.gson.SetMultimapTypeAdapter; import org.terasology.engine.utilities.gson.UriTypeAdapterFactory; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; import org.terasology.gestalt.naming.Name; import org.terasology.gestalt.naming.Version; @@ -239,7 +239,7 @@ public Set getModuleConfigKeys(SimpleUri uri) { * @param clazz the class to convert the data to * @return a config component for the given uri and class or null */ - public T getModuleConfig(SimpleUri uri, String key, Class clazz) { + public > T getModuleConfig(SimpleUri uri, String key, Class clazz) { Map map = config.getModuleConfigs().get(uri); if (map == null) { return null; diff --git a/engine/src/main/java/org/terasology/engine/config/RenderingConfig.java b/engine/src/main/java/org/terasology/engine/config/RenderingConfig.java index 31df80689d..2918bc0979 100644 --- a/engine/src/main/java/org/terasology/engine/config/RenderingConfig.java +++ b/engine/src/main/java/org/terasology/engine/config/RenderingConfig.java @@ -26,6 +26,7 @@ public class RenderingConfig extends AbstractSubscribable { public static final String ANIMATED_MENU = "AnimatedMenu"; public static final String VIEW_DISTANCE = "viewDistance"; public static final String CHUNK_LODS = "chunkLods"; + public static final String BILLBOARD_LIMIT = "billboardLimit"; public static final String FLICKERING_LIGHT = "FlickeringLight"; public static final String ANIMATE_GRASS = "AnimateGrass"; public static final String ANIMATE_WATER = "AnimateWater"; @@ -76,6 +77,7 @@ public class RenderingConfig extends AbstractSubscribable { private boolean animatedMenu; private ViewDistance viewDistance; private float chunkLods; + private float billboardLimit; private boolean flickeringLight; private boolean animateGrass; private boolean animateWater; @@ -270,6 +272,16 @@ public void setChunkLods(float chunkLods) { propertyChangeSupport.firePropertyChange(CHUNK_LODS, oldLods, chunkLods); } + public float getBillboardLimit() { + return billboardLimit; + } + + public void setBillboardLimit(float billboardLimit) { + float oldValue = this.billboardLimit; + this.billboardLimit = billboardLimit; + propertyChangeSupport.firePropertyChange(BILLBOARD_LIMIT, oldValue, this.billboardLimit); + } + public boolean isFlickeringLight() { return flickeringLight; } diff --git a/engine/src/main/java/org/terasology/engine/core/bootstrap/EntitySystemSetupUtil.java b/engine/src/main/java/org/terasology/engine/core/bootstrap/EntitySystemSetupUtil.java index 2d4cbcdc1a..781b8c9a92 100644 --- a/engine/src/main/java/org/terasology/engine/core/bootstrap/EntitySystemSetupUtil.java +++ b/engine/src/main/java/org/terasology/engine/core/bootstrap/EntitySystemSetupUtil.java @@ -6,7 +6,6 @@ import org.terasology.engine.audio.events.PlaySoundEvent; import org.terasology.engine.context.Context; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; @@ -39,6 +38,7 @@ import org.terasology.engine.recording.RecordedEventStore; import org.terasology.engine.recording.RecordingEventSystemDecorator; import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.gestalt.naming.Name; import org.terasology.nui.properties.OneOfProviderFactory; @@ -48,6 +48,7 @@ import org.terasology.reflection.reflect.ReflectFactory; import org.terasology.reflection.reflect.ReflectionReflectFactory; +import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.List; @@ -169,7 +170,9 @@ private static EventSystem createEventSystem(NetworkSystem networkSystem, static void registerComponents(ComponentLibrary library, ModuleEnvironment environment) { for (Class componentType : environment.getSubtypesOf(Component.class)) { - if (componentType.getAnnotation(DoNotAutoRegister.class) == null) { + if (componentType.getAnnotation(DoNotAutoRegister.class) == null + && !componentType.isInterface() + && !Modifier.isAbstract(componentType.getModifiers())) { String componentName = MetadataUtil.getComponentClassName(componentType); Name componentModuleName = verifyNotNull(environment.getModuleProviding(componentType), "Could not find module for %s %s", componentName, componentType); diff --git a/engine/src/main/java/org/terasology/engine/core/bootstrap/EnvironmentSwitchHandler.java b/engine/src/main/java/org/terasology/engine/core/bootstrap/EnvironmentSwitchHandler.java index 152a3ab686..af4db2dc92 100644 --- a/engine/src/main/java/org/terasology/engine/core/bootstrap/EnvironmentSwitchHandler.java +++ b/engine/src/main/java/org/terasology/engine/core/bootstrap/EnvironmentSwitchHandler.java @@ -18,9 +18,11 @@ import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary; import org.terasology.engine.entitySystem.metadata.EventLibrary; +import org.terasology.engine.entitySystem.metadata.MetadataUtil; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.internal.PrefabDeltaFormat; import org.terasology.engine.entitySystem.prefab.internal.PrefabFormat; +import org.terasology.engine.entitySystem.systems.internal.DoNotAutoRegister; import org.terasology.engine.persistence.typeHandling.RegisterTypeHandler; import org.terasology.engine.persistence.typeHandling.RegisterTypeHandlerFactory; import org.terasology.engine.persistence.typeHandling.TypeHandlerLibraryImpl; @@ -28,8 +30,11 @@ import org.terasology.engine.physics.CollisionGroup; import org.terasology.engine.physics.CollisionGroupManager; import org.terasology.engine.registry.InjectionHelper; +import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.ModuleEnvironment; +import org.terasology.gestalt.naming.Name; import org.terasology.gestalt.util.reflection.GenericsUtil; import org.terasology.persistence.typeHandling.TypeHandler; import org.terasology.persistence.typeHandling.TypeHandlerFactory; @@ -40,11 +45,12 @@ import org.terasology.reflection.copy.CopyStrategyLibrary; import org.terasology.reflection.reflect.ReflectFactory; +import java.lang.reflect.Modifier; import java.lang.reflect.Type; import java.util.Collection; import java.util.Optional; -import static org.terasology.engine.core.bootstrap.EntitySystemSetupUtil.registerComponents; +import static com.google.common.base.Verify.verifyNotNull; /** * Handles an environment switch by updating the asset manager, component library, and other context objects. @@ -184,6 +190,20 @@ private void unregisterPrefabFormats(ModuleAwareAssetTypeManager assetTypeManage } } + + private static void registerComponents(ComponentLibrary library, ModuleEnvironment environment) { + for (Class componentType : environment.getSubtypesOf(Component.class)) { + if (componentType.getAnnotation(DoNotAutoRegister.class) == null + && !componentType.isInterface() + && !Modifier.isAbstract(componentType.getModifiers())) { + String componentName = MetadataUtil.getComponentClassName(componentType); + Name componentModuleName = verifyNotNull(environment.getModuleProviding(componentType), + "Could not find module for %s %s", componentName, componentType); + library.register(new ResourceUrn(componentModuleName.toString(), componentName), componentType); + } + } + } + @SuppressWarnings({"rawtypes", "unchecked"}) private static void registerTypeHandlers(Context context, TypeHandlerLibrary library, ModuleEnvironment environment) { for (Class handler : environment.getSubtypesOf(TypeHandler.class)) { diff --git a/engine/src/main/java/org/terasology/engine/core/bootstrap/eventSystem/AbstractEventSystemDecorator.java b/engine/src/main/java/org/terasology/engine/core/bootstrap/eventSystem/AbstractEventSystemDecorator.java index d9ce888d9b..a5214a8f37 100644 --- a/engine/src/main/java/org/terasology/engine/core/bootstrap/eventSystem/AbstractEventSystemDecorator.java +++ b/engine/src/main/java/org/terasology/engine/core/bootstrap/eventSystem/AbstractEventSystemDecorator.java @@ -3,13 +3,13 @@ package org.terasology.engine.core.bootstrap.eventSystem; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.event.internal.EventReceiver; import org.terasology.engine.entitySystem.event.internal.EventSystem; import org.terasology.engine.entitySystem.systems.ComponentSystem; import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; public abstract class AbstractEventSystemDecorator implements EventSystem { private final EventSystem eventSystem; diff --git a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/CreateWorldEntity.java b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/CreateWorldEntity.java index 5e582cf655..88c5f5b4e8 100644 --- a/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/CreateWorldEntity.java +++ b/engine/src/main/java/org/terasology/engine/core/modes/loadProcesses/CreateWorldEntity.java @@ -9,7 +9,6 @@ import org.terasology.engine.context.Context; import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.modes.SingleStepLoadProcess; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.game.GameManifest; @@ -18,6 +17,7 @@ import org.terasology.engine.world.chunks.ChunkProvider; import org.terasology.engine.world.generator.WorldConfigurator; import org.terasology.engine.world.generator.WorldGenerator; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Iterator; diff --git a/engine/src/main/java/org/terasology/engine/core/module/ExternalApiWhitelist.java b/engine/src/main/java/org/terasology/engine/core/module/ExternalApiWhitelist.java index 5989879117..f2feb86435 100644 --- a/engine/src/main/java/org/terasology/engine/core/module/ExternalApiWhitelist.java +++ b/engine/src/main/java/org/terasology/engine/core/module/ExternalApiWhitelist.java @@ -48,8 +48,13 @@ public final class ExternalApiWhitelist { .add(org.terasology.reflection.TypeInfo.class) .build(); + private static final Set GESTALT_ECS_PACKAGES = new ImmutableSet.Builder() + .add("org.terasology.gestalt.entitysystem.component") + .build(); + public static final Set PACKAGES = new ImmutableSet.Builder() .addAll(NUI_PACKAGES) + .addAll(GESTALT_ECS_PACKAGES) .add("org.terasology.math") .add("org.terasology.math.geom") .add("org.terasology.joml.geom") diff --git a/engine/src/main/java/org/terasology/engine/core/subsystem/lwjgl/LwjglGraphicsUtil.java b/engine/src/main/java/org/terasology/engine/core/subsystem/lwjgl/LwjglGraphicsUtil.java index 1413ffbf3c..29c514ffeb 100644 --- a/engine/src/main/java/org/terasology/engine/core/subsystem/lwjgl/LwjglGraphicsUtil.java +++ b/engine/src/main/java/org/terasology/engine/core/subsystem/lwjgl/LwjglGraphicsUtil.java @@ -22,7 +22,6 @@ import static org.lwjgl.opengl.GL11.GL_LINEAR_MIPMAP_LINEAR; import static org.lwjgl.opengl.GL11.GL_NEAREST; import static org.lwjgl.opengl.GL11.GL_NEAREST_MIPMAP_NEAREST; -import static org.lwjgl.opengl.GL11.GL_NORMALIZE; import static org.lwjgl.opengl.GL11.GL_REPEAT; import static org.lwjgl.opengl.GL11.glDepthFunc; import static org.lwjgl.opengl.GL11.glEnable; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/Component.java b/engine/src/main/java/org/terasology/engine/entitySystem/Component.java deleted file mode 100644 index 70eef49bba..0000000000 --- a/engine/src/main/java/org/terasology/engine/entitySystem/Component.java +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2021 The Terasology Foundation -// SPDX-License-Identifier: Apache-2.0 -package org.terasology.engine.entitySystem; - -/** - * A Component is (a collection of) data that - *
    - *
  • can be attached to/carried by an entity, and
  • - *
  • can be inspected and/or edited by one or more {@link org.terasology.engine.entitySystem.systems.ComponentSystem}s.
  • - *
- * - */ -public interface Component { - -} diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/ComponentContainer.java b/engine/src/main/java/org/terasology/engine/entitySystem/ComponentContainer.java index 4ab51cf428..93c03d76ef 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/ComponentContainer.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/ComponentContainer.java @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem; +import org.terasology.gestalt.entitysystem.component.Component; + import java.util.List; public interface ComponentContainer { diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/MutableComponentContainer.java b/engine/src/main/java/org/terasology/engine/entitySystem/MutableComponentContainer.java index a97a36f495..36f85f3824 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/MutableComponentContainer.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/MutableComponentContainer.java @@ -2,6 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem; +import org.terasology.gestalt.entitysystem.component.Component; + import java.util.Optional; import java.util.function.Function; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityBuilder.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityBuilder.java index 53bebb50a6..f822263c7d 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityBuilder.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityBuilder.java @@ -5,7 +5,6 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.MutableComponentContainer; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.internal.EngineEntityPool; @@ -14,6 +13,7 @@ import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent; import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityManager.java index 08cb56b825..31e284cf74 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityManager.java @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.internal.EngineEntityPool; import org.terasology.engine.entitySystem.event.internal.EventSystem; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; @@ -10,6 +9,7 @@ import org.terasology.engine.entitySystem.sectors.SectorSimulationComponent; import org.terasology.engine.game.GameManifest; import org.terasology.engine.world.internal.WorldInfo; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityPool.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityPool.java index 27c5d25c66..81db3be6f5 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityPool.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityPool.java @@ -4,8 +4,8 @@ import org.joml.Quaternionfc; import org.joml.Vector3fc; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; public interface EntityPool { diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityStore.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityStore.java index fe3a4922e3..1f9bda9cd4 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityStore.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/EntityStore.java @@ -3,10 +3,9 @@ package org.terasology.engine.entitySystem.entity; import com.google.common.collect.Maps; - -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.MutableComponentContainer; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/LowLevelEntityManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/LowLevelEntityManager.java index 1c208615f7..0de8754b20 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/LowLevelEntityManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/LowLevelEntityManager.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.internal.EngineEntityPool; import org.terasology.engine.entitySystem.entity.internal.EngineSectorManager; +import org.terasology.gestalt.entitysystem.component.Component; public interface LowLevelEntityManager extends EntityManager { diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/BaseEntityRef.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/BaseEntityRef.java index 15b955e1a1..a0d08befd5 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/BaseEntityRef.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/BaseEntityRef.java @@ -4,7 +4,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.LowLevelEntityManager; import org.terasology.engine.entitySystem.event.Event; @@ -13,6 +12,7 @@ import org.terasology.engine.network.NetworkComponent; import org.terasology.engine.persistence.serializers.EntityDataJSONFormat; import org.terasology.engine.persistence.serializers.EntitySerializer; +import org.terasology.gestalt.entitysystem.component.Component; import java.security.AccessController; import java.security.PrivilegedAction; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/ComponentTable.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/ComponentTable.java index 2201e9bd0f..b0c91c0b55 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/ComponentTable.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/ComponentTable.java @@ -10,7 +10,7 @@ import gnu.trove.map.hash.TLongObjectHashMap; import gnu.trove.set.TLongSet; import gnu.trove.set.hash.TLongHashSet; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityManager.java index 2bfa2aa7de..ef9dc46787 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityManager.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.LowLevelEntityManager; import org.terasology.engine.entitySystem.event.internal.EventSystem; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; import java.util.Optional; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityPool.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityPool.java index 973e839beb..d790aa8c83 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityPool.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EngineEntityPool.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityPool; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Optional; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityChangeSubscriber.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityChangeSubscriber.java index 612c4930ec..7091321d5b 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityChangeSubscriber.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityChangeSubscriber.java @@ -3,8 +3,8 @@ package org.terasology.engine.entitySystem.entity.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityInfoComponent.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityInfoComponent.java index b0aabe4d3d..ec06853d0c 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityInfoComponent.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/EntityInfoComponent.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.DoNotPersist; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; import javax.annotation.Nullable; @@ -14,7 +14,7 @@ * Component for storing entity system information on an entity */ @DoNotPersist -public class EntityInfoComponent implements Component { +public class EntityInfoComponent implements Component { // TODO: Switch this to use Optional public Prefab parentPrefab; /** @@ -42,4 +42,13 @@ public EntityInfoComponent(@Nullable Prefab parentPrefab, boolean persisted, boo this(parentPrefab, persisted, alwaysRelevant); this.scope = scope; } + + @Override + public void copyFrom(EntityInfoComponent other) { + this.persisted = other.persisted; + this.parentPrefab = other.parentPrefab; + this.alwaysRelevant = other.alwaysRelevant; + this.scope = other.scope; + this.owner = other.owner; + } } diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/NullEntityRef.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/NullEntityRef.java index d2ef1c28bd..e5644fc762 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/NullEntityRef.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/NullEntityRef.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.entity.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/OwnershipHelper.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/OwnershipHelper.java index f4041f8e29..14645c0abe 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/OwnershipHelper.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/OwnershipHelper.java @@ -3,11 +3,11 @@ package org.terasology.engine.entitySystem.entity.internal; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.metadata.ComponentFieldMetadata; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityManager.java index 46efa1ff22..c2ce163f18 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityManager.java @@ -16,7 +16,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.TerasologyConstants; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent; @@ -31,6 +30,7 @@ import org.terasology.engine.entitySystem.sectors.SectorSimulationComponent; import org.terasology.engine.game.GameManifest; import org.terasology.engine.world.internal.WorldInfo; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; import java.util.ArrayList; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityPool.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityPool.java index 5a2a9cdd02..13ce0a6d8c 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityPool.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoEntityPool.java @@ -8,7 +8,6 @@ import org.joml.Vector3fc; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent; @@ -16,6 +15,7 @@ import org.terasology.engine.entitySystem.event.internal.EventSystem; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.logic.location.LocationComponent; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Arrays; import java.util.Collections; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoSectorManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoSectorManager.java index 0c4f387be6..4797a6f835 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoSectorManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/internal/PojoSectorManager.java @@ -5,11 +5,11 @@ import com.google.common.collect.Iterables; import org.joml.Quaternionfc; import org.joml.Vector3fc; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityPool; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.ArrayList; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/entity/lifecycleEvents/BeforeEntityCreated.java b/engine/src/main/java/org/terasology/engine/entitySystem/entity/lifecycleEvents/BeforeEntityCreated.java index f894882bd9..38a98ab3c6 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/entity/lifecycleEvents/BeforeEntityCreated.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/entity/lifecycleEvents/BeforeEntityCreated.java @@ -4,9 +4,9 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Iterator; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/event/PendingEvent.java b/engine/src/main/java/org/terasology/engine/entitySystem/event/PendingEvent.java index 663af160ae..b95b0d5edf 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/event/PendingEvent.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/event/PendingEvent.java @@ -3,8 +3,8 @@ package org.terasology.engine.entitySystem.event; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; public class PendingEvent { private EntityRef entity; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/event/ReceiveEvent.java b/engine/src/main/java/org/terasology/engine/entitySystem/event/ReceiveEvent.java index ba80259c8a..7b6e8cdfa7 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/event/ReceiveEvent.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/event/ReceiveEvent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.event; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.systems.RegisterMode; +import org.terasology.gestalt.entitysystem.component.Component; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystem.java b/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystem.java index 188bb9ba8d..9d07b5f242 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystem.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystem.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.event.internal; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.systems.ComponentSystem; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; /** * Event system propagates events to registered handlers diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystemImpl.java b/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystemImpl.java index 8bc135cf75..f1ca75223f 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystemImpl.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/event/internal/EventSystemImpl.java @@ -17,7 +17,6 @@ import org.reflections.ReflectionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.AbstractConsumableEvent; import org.terasology.engine.entitySystem.event.ConsumableEvent; @@ -28,6 +27,7 @@ import org.terasology.engine.entitySystem.systems.ComponentSystem; import org.terasology.engine.monitoring.PerformanceMonitor; import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import java.lang.reflect.Method; import java.lang.reflect.Modifier; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentFieldMetadata.java b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentFieldMetadata.java index e488071092..dd540a6435 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentFieldMetadata.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentFieldMetadata.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.metadata; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.reflection.copy.strategy.EntityCopyStrategy; import org.terasology.engine.utilities.ReflectionUtil; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.reflection.copy.CopyStrategy; import org.terasology.reflection.copy.CopyStrategyLibrary; import org.terasology.reflection.metadata.ClassMetadata; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentLibrary.java b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentLibrary.java index fe05abcaf2..18995d9d80 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentLibrary.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentLibrary.java @@ -6,9 +6,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.ModuleEnvironment; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; +import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.gestalt.naming.Name; import org.terasology.reflection.copy.CopyStrategy; import org.terasology.reflection.copy.CopyStrategyLibrary; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentMetadata.java b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentMetadata.java index 8288fee146..06d2648025 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentMetadata.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/ComponentMetadata.java @@ -5,16 +5,16 @@ import com.google.common.base.Predicates; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.DoNotPersist; import org.terasology.engine.network.Replicate; +import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.engine.world.block.RequiresBlockLifecycleEvents; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.reflection.copy.CopyStrategyLibrary; import org.terasology.reflection.metadata.ClassMetadata; import org.terasology.reflection.reflect.InaccessibleFieldException; import org.terasology.reflection.reflect.ReflectFactory; -import org.terasology.engine.world.block.ForceBlockActive; -import org.terasology.engine.world.block.RequiresBlockLifecycleEvents; import java.lang.annotation.Annotation; import java.lang.reflect.Field; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/MetadataUtil.java b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/MetadataUtil.java index cd1d465393..d640c69a6a 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/metadata/MetadataUtil.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/metadata/MetadataUtil.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.metadata; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Locale; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabData.java b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabData.java index a9e42f0dda..6c7204f6d4 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabData.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabData.java @@ -3,9 +3,9 @@ package org.terasology.engine.entitySystem.prefab; import com.google.common.collect.Maps; -import org.terasology.gestalt.assets.AssetData; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.MutableComponentContainer; +import org.terasology.gestalt.assets.AssetData; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabManager.java index 91ae1d72fa..3e24d09b58 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/PrefabManager.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.prefab; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefab.java b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefab.java index 98b7f6f4e2..57cd760c3a 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefab.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefab.java @@ -5,11 +5,11 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import org.terasology.gestalt.assets.AssetType; -import org.terasology.gestalt.assets.ResourceUrn; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; +import org.terasology.gestalt.assets.AssetType; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefabManager.java b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefabManager.java index d409c3467d..0cd4338c09 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefabManager.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/prefab/internal/PojoPrefabManager.java @@ -4,10 +4,10 @@ import com.google.common.base.Strings; import org.terasology.engine.context.Context; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabManager; import org.terasology.gestalt.assets.management.AssetManager; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; import java.util.HashSet; diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorRegionComponent.java b/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorRegionComponent.java index d14e5eff76..d321db6499 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorRegionComponent.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorRegionComponent.java @@ -3,12 +3,13 @@ package org.terasology.engine.entitySystem.sectors; import org.joml.Vector3i; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.world.chunks.Chunk; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import java.util.HashSet; import java.util.Set; +import java.util.stream.Collectors; /** * When this component is added to a sector-scope entity, the {@link SectorSimulationComponent} will count any chunks @@ -18,11 +19,17 @@ * rather than positions, if desired. */ @API -public class SectorRegionComponent implements Component { +public class SectorRegionComponent implements Component { /** * The set of positions of chunks for this entity to watch. */ public Set chunks = new HashSet<>(); + @Override + public void copyFrom(SectorRegionComponent other) { + this.chunks = other.chunks.stream() + .map(Vector3i::new) + .collect(Collectors.toSet()); + } } diff --git a/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorSimulationComponent.java b/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorSimulationComponent.java index 734d9ff750..ef64b9cbdf 100644 --- a/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorSimulationComponent.java +++ b/engine/src/main/java/org/terasology/engine/entitySystem/sectors/SectorSimulationComponent.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.entitySystem.sectors; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.internal.BaseEntityRef; import org.terasology.engine.entitySystem.entity.internal.EntityScope; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; /** @@ -15,7 +15,7 @@ * {@link BaseEntityRef#setScope(EntityScope)}, so modules should not need to modify or add it. */ @API -public class SectorSimulationComponent implements Component { +public class SectorSimulationComponent implements Component { public static final long UNLOADED_MAX_DELTA_DEFAULT = 60_000; public static final long LOADED_MAX_DELTA_DEFAULT = 10_000; @@ -56,4 +56,10 @@ public SectorSimulationComponent() { loadedMaxDelta = LOADED_MAX_DELTA_DEFAULT; } + @Override + public void copyFrom(SectorSimulationComponent other) { + this.lastSimulationTime = other.lastSimulationTime; + this.loadedMaxDelta = other.loadedMaxDelta; + this.unloadedMaxDelta = other.unloadedMaxDelta; + } } diff --git a/engine/src/main/java/org/terasology/engine/game/GameManifest.java b/engine/src/main/java/org/terasology/engine/game/GameManifest.java index 111ca0d97b..002295b6d0 100644 --- a/engine/src/main/java/org/terasology/engine/game/GameManifest.java +++ b/engine/src/main/java/org/terasology/engine/game/GameManifest.java @@ -10,10 +10,10 @@ import com.google.gson.JsonElement; import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.TerasologyConstants; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.utilities.gson.CaseInsensitiveEnumTypeAdapterFactory; import org.terasology.engine.utilities.gson.UriTypeAdapterFactory; import org.terasology.engine.world.internal.WorldInfo; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.naming.Name; import org.terasology.gestalt.naming.NameVersion; import org.terasology.gestalt.naming.Version; diff --git a/engine/src/main/java/org/terasology/engine/input/cameraTarget/CameraTargetSystem.java b/engine/src/main/java/org/terasology/engine/input/cameraTarget/CameraTargetSystem.java index c9a9aa1d33..436a4f5b47 100644 --- a/engine/src/main/java/org/terasology/engine/input/cameraTarget/CameraTargetSystem.java +++ b/engine/src/main/java/org/terasology/engine/input/cameraTarget/CameraTargetSystem.java @@ -16,7 +16,6 @@ import org.terasology.engine.physics.Physics; import org.terasology.engine.physics.StandardCollisionGroup; import org.terasology.engine.registry.In; -import org.terasology.engine.rendering.world.WorldRenderer; import org.terasology.engine.world.BlockEntityRegistry; import org.terasology.engine.world.block.BlockComponent; import org.terasology.math.TeraMath; @@ -34,9 +33,6 @@ public class CameraTargetSystem extends BaseComponentSystem { @In private Config config; - @In - private WorldRenderer worldRenderer; - @In private Physics physics; diff --git a/engine/src/main/java/org/terasology/engine/logic/actions/PlaySoundActionComponent.java b/engine/src/main/java/org/terasology/engine/logic/actions/PlaySoundActionComponent.java index 105bfc17a9..52adae48e6 100644 --- a/engine/src/main/java/org/terasology/engine/logic/actions/PlaySoundActionComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/actions/PlaySoundActionComponent.java @@ -4,7 +4,7 @@ import com.google.common.collect.Lists; import org.terasology.engine.audio.StaticSound; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Arrays; import java.util.List; @@ -13,7 +13,7 @@ * When activated, plays a random sound * */ -public class PlaySoundActionComponent implements Component { +public class PlaySoundActionComponent implements Component { public List sounds = Lists.newArrayList(); public float volume = 1.0f; public ActionTarget relativeTo = ActionTarget.Instigator; @@ -28,4 +28,11 @@ public PlaySoundActionComponent() { public PlaySoundActionComponent(StaticSound... sounds) { this.sounds.addAll(Arrays.asList(sounds)); } + + @Override + public void copyFrom(PlaySoundActionComponent other) { + this.sounds = Lists.newArrayList(other.sounds); + this.volume = other.volume; + this.relativeTo = other.relativeTo; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/actions/SpawnPrefabActionComponent.java b/engine/src/main/java/org/terasology/engine/logic/actions/SpawnPrefabActionComponent.java index 98103cac1d..2490743c08 100644 --- a/engine/src/main/java/org/terasology/engine/logic/actions/SpawnPrefabActionComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/actions/SpawnPrefabActionComponent.java @@ -3,9 +3,15 @@ package org.terasology.engine.logic.actions; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class SpawnPrefabActionComponent implements Component { +public class SpawnPrefabActionComponent implements Component { public String prefab; public ActionTarget spawnLocationRelativeTo = ActionTarget.Target; + + @Override + public void copyFrom(SpawnPrefabActionComponent other) { + this.prefab = other.prefab; + this.spawnLocationRelativeTo = other.spawnLocationRelativeTo; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/afk/AfkComponent.java b/engine/src/main/java/org/terasology/engine/logic/afk/AfkComponent.java index c23c15e6f5..4a49e0a84b 100644 --- a/engine/src/main/java/org/terasology/engine/logic/afk/AfkComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/afk/AfkComponent.java @@ -2,12 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.afk; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; -public class AfkComponent implements Component { +public class AfkComponent implements Component { @Replicate public boolean afk; + @Override + public void copyFrom(AfkComponent other) { + this.afk = other.afk; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/ai/HierarchicalAIComponent.java b/engine/src/main/java/org/terasology/engine/logic/ai/HierarchicalAIComponent.java index 66c2f7a128..8b8c89ba72 100644 --- a/engine/src/main/java/org/terasology/engine/logic/ai/HierarchicalAIComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/ai/HierarchicalAIComponent.java @@ -3,9 +3,9 @@ package org.terasology.engine.logic.ai; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public final class HierarchicalAIComponent implements Component { +public final class HierarchicalAIComponent implements Component { //how often updates are progressed, handle whit care public int updateFrequency; @@ -64,4 +64,37 @@ public final class HierarchicalAIComponent implements Component { //TODO remove this when fight system is ready!!! public int damage = 50; public int damageFrequency = 500; + + @Override + public void copyFrom(HierarchicalAIComponent other) { + this.updateFrequency = other.updateFrequency; + this.lastProgressedUpdateAt = other.lastProgressedUpdateAt; + this.movementTarget = new Vector3f(other.movementTarget); + this.lastChangeOfDirectionAt = other.lastChangeOfDirectionAt; + this.lastChangeOfMovementAt = other.lastChangeOfMovementAt; + this.lastChangeOfidlingtAt = other.lastChangeOfidlingtAt; + this.lastChangeOfDangerAt = other.lastChangeOfDangerAt; + this.moveUpdateTime = other.moveUpdateTime; + this.directionUpdateTime = other.directionUpdateTime; + this.idlingUpdateTime = other.idlingUpdateTime; + this.dangerUpdateTime = other.dangerUpdateTime; + this.dieIfPlayerFar = other.dieIfPlayerFar; + this.dieDistance = other.dieDistance; + this.hunter = other.hunter; + this.aggressive = other.aggressive; + this.wild = other.wild; + this.flying = other.flying; + this.maxAltitude = other.maxAltitude; + this.hectic = other.hectic; + this.straightLined = other.straightLined; + this.forgiving = other.forgiving; + this.playerSense = other.playerSense; + this.playerdistance = other.playerdistance; + this.attackDistance = other.attackDistance; + this.runDistance = other.runDistance; + this.panicDistance = other.panicDistance; + this.inDanger = other.inDanger; + this.damage = other.damage; + this.damageFrequency = other.damageFrequency; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/ai/SimpleAIComponent.java b/engine/src/main/java/org/terasology/engine/logic/ai/SimpleAIComponent.java index 3bd81b1634..b21aab2719 100644 --- a/engine/src/main/java/org/terasology/engine/logic/ai/SimpleAIComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/ai/SimpleAIComponent.java @@ -3,12 +3,18 @@ package org.terasology.engine.logic.ai; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public final class SimpleAIComponent implements Component { +public final class SimpleAIComponent implements Component { public long lastChangeOfDirectionAt; public Vector3f movementTarget = new Vector3f(); public boolean followingPlayer; + @Override + public void copyFrom(SimpleAIComponent other) { + this.lastChangeOfDirectionAt = other.lastChangeOfDirectionAt; + this.movementTarget = new Vector3f(other.movementTarget); + this.followingPlayer = other.followingPlayer; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/autoCreate/AutoCreateComponent.java b/engine/src/main/java/org/terasology/engine/logic/autoCreate/AutoCreateComponent.java index f06bc36962..a483019869 100644 --- a/engine/src/main/java/org/terasology/engine/logic/autoCreate/AutoCreateComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/autoCreate/AutoCreateComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.autoCreate; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; -import org.terasology.engine.entitySystem.Component; /** * This component is used to mark prefabs that should automatically created when a game begins or is loaded, if one does not already exist. @@ -12,6 +12,11 @@ * */ @API -public class AutoCreateComponent implements Component { +public class AutoCreateComponent implements Component { public boolean createClientSide; + + @Override + public void copyFrom(AutoCreateComponent other) { + this.createClientSide = other.createClientSide; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/BehaviorComponent.java b/engine/src/main/java/org/terasology/engine/logic/behavior/BehaviorComponent.java index 79fece522c..4c25a44ed4 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/BehaviorComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/BehaviorComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.behavior; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.logic.behavior.asset.BehaviorTree; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; /** @@ -11,7 +11,13 @@ * */ @API -public class BehaviorComponent implements Component { +public class BehaviorComponent implements Component { public BehaviorTree tree; public transient Interpreter interpreter; + + @Override + public void copyFrom(BehaviorComponent other) { + this.tree = other.tree; + this.interpreter = other.interpreter; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/CollectiveBehaviorComponent.java b/engine/src/main/java/org/terasology/engine/logic/behavior/CollectiveBehaviorComponent.java index cec41174d2..8d8b07ce1b 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/CollectiveBehaviorComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/CollectiveBehaviorComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.behavior; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.logic.behavior.asset.BehaviorTree; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; /** @@ -11,7 +11,13 @@ * */ @API -public class CollectiveBehaviorComponent implements Component { +public class CollectiveBehaviorComponent implements Component { public BehaviorTree tree; public transient CollectiveInterpreter collectiveInterpreter; + + @Override + public void copyFrom(CollectiveBehaviorComponent other) { + this.tree = other.tree; + this.collectiveInterpreter = other.collectiveInterpreter; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/GroupMindComponent.java b/engine/src/main/java/org/terasology/engine/logic/behavior/GroupMindComponent.java index 6ca360e267..91a9ec35cd 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/GroupMindComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/GroupMindComponent.java @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.behavior; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Sets; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.HashSet; import java.util.Set; @@ -14,7 +15,7 @@ * behavior by all entities belonging to a group. * @see GroupTagComponent */ -public class GroupMindComponent implements Component { +public class GroupMindComponent implements Component { /** * The unique group identifier with which the component will be associated */ @@ -28,4 +29,11 @@ public class GroupMindComponent implements Component { * The identifiers for each of the entities belonging to the group. */ public Set groupMembers = new HashSet<>(); + + @Override + public void copyFrom(GroupMindComponent other) { + this.groupLabel = other.groupLabel; + this.behavior = other.behavior; + this.groupMembers = Sets.newHashSet(other.groupMembers); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/GroupTagComponent.java b/engine/src/main/java/org/terasology/engine/logic/behavior/GroupTagComponent.java index f71a1a16be..ed27fc5bb1 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/GroupTagComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/GroupTagComponent.java @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.behavior; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Lists; import org.terasology.engine.logic.behavior.asset.BehaviorTree; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.ArrayList; import java.util.List; @@ -16,7 +17,7 @@ * easy identification/addition/removal of grouped * entities. */ -public class GroupTagComponent implements Component { +public class GroupTagComponent implements Component { /** * Groups to which the entity belong. @@ -39,4 +40,11 @@ public class GroupTagComponent implements Component { public BehaviorTree backupBT; public Interpreter backupRunningState; + + @Override + public void copyFrom(GroupTagComponent other) { + this.groups = Lists.newArrayList(other.groups); + this.backupBT = other.backupBT; + this.backupRunningState = other.backupRunningState; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/actions/conditions/ConditionAction.java b/engine/src/main/java/org/terasology/engine/logic/behavior/actions/conditions/ConditionAction.java index 9ba2ff5168..e97fc70ad9 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/actions/conditions/ConditionAction.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/actions/conditions/ConditionAction.java @@ -5,7 +5,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.logic.behavior.BehaviorAction; @@ -13,6 +12,7 @@ import org.terasology.engine.logic.behavior.core.BaseAction; import org.terasology.engine.logic.behavior.core.BehaviorState; import org.terasology.engine.registry.In; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/core/Actor.java b/engine/src/main/java/org/terasology/engine/logic/behavior/core/Actor.java index d1fb89d814..2e781748b2 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/core/Actor.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/core/Actor.java @@ -5,16 +5,16 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.core.ComponentFieldUri; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.metadata.EntitySystemLibrary; +import org.terasology.engine.registry.CoreRegistry; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; import org.terasology.reflection.metadata.FieldMetadata; -import org.terasology.engine.registry.CoreRegistry; import java.lang.reflect.Field; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorEditorScreen.java b/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorEditorScreen.java index 427ae5e3b3..3038210f44 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorEditorScreen.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorEditorScreen.java @@ -6,29 +6,29 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.context.Context; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; -import org.terasology.engine.logic.behavior.asset.BehaviorTree; -import org.terasology.engine.logic.behavior.core.ActionNode; -import org.terasology.engine.logic.behavior.core.BehaviorNode; import org.terasology.engine.logic.behavior.BehaviorComponent; import org.terasology.engine.logic.behavior.BehaviorSystem; import org.terasology.engine.logic.behavior.Interpreter; -import org.terasology.nui.WidgetUtil; -import org.terasology.nui.widgets.UIDropdown; -import org.terasology.nui.widgets.UIList; -import org.terasology.reflection.reflect.ReflectFactory; +import org.terasology.engine.logic.behavior.asset.BehaviorTree; +import org.terasology.engine.logic.behavior.core.ActionNode; +import org.terasology.engine.logic.behavior.core.BehaviorNode; import org.terasology.engine.registry.In; import org.terasology.engine.rendering.nui.CoreScreenLayer; import org.terasology.engine.rendering.nui.NUIManager; +import org.terasology.engine.rendering.nui.layers.mainMenu.EnterTextPopup; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.nui.WidgetUtil; import org.terasology.nui.databinding.Binding; import org.terasology.nui.databinding.ReadOnlyBinding; import org.terasology.nui.itemRendering.ToStringTextRenderer; -import org.terasology.engine.rendering.nui.layers.mainMenu.EnterTextPopup; import org.terasology.nui.layouts.PropertyLayout; import org.terasology.nui.properties.OneOfProviderFactory; import org.terasology.nui.properties.Property; import org.terasology.nui.properties.PropertyProvider; +import org.terasology.nui.widgets.UIDropdown; +import org.terasology.nui.widgets.UIList; +import org.terasology.reflection.reflect.ReflectFactory; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; diff --git a/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorNodeComponent.java b/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorNodeComponent.java index d1f9239290..8ecabfb483 100644 --- a/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorNodeComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/behavior/nui/BehaviorNodeComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.behavior.nui; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; import org.terasology.nui.Color; @@ -11,7 +11,7 @@ * */ @API -public class BehaviorNodeComponent implements Component { +public class BehaviorNodeComponent implements Component { public static final BehaviorNodeComponent DEFAULT = new BehaviorNodeComponent(); public String action; // the node(s) to create @@ -27,4 +27,16 @@ public class BehaviorNodeComponent implements Component { public String toString() { return displayName; } + + @Override + public void copyFrom(BehaviorNodeComponent other) { + this.action = other.action; + this.name = other.name; + this.displayName = other.displayName; + this.category = other.category; + this.shape = other.shape; + this.color = new Color(other.color); + this.textColor = new Color(other.textColor); + this.description = other.description; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/AliveCharacterComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/AliveCharacterComponent.java index dccc08bbde..1ee1b8288b 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/AliveCharacterComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/AliveCharacterComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * This is only attached to the alive character entities.
@@ -15,5 +15,5 @@ * or respawn after a while. */ @Replicate -public class AliveCharacterComponent implements Component { +public class AliveCharacterComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterComponent.java index 514569e326..cfb8d38fb3 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterComponent.java @@ -2,19 +2,19 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.logic.characters.interactions.InteractionEndPredicted; import org.terasology.engine.logic.characters.interactions.InteractionStartPredicted; import org.terasology.engine.network.FieldReplicateType; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * Information common to characters (the physical body of players and creatures) * */ -public final class CharacterComponent implements Component { +public final class CharacterComponent implements Component { /** * Recommended height from center at which name tags should be placed if there is one. */ @@ -65,4 +65,16 @@ public final class CharacterComponent implements Component { @Replicate(FieldReplicateType.SERVER_TO_OWNER) public EntityRef controller = EntityRef.NULL; + + @Override + public void copyFrom(CharacterComponent other) { + this.nameTagOffset = other.nameTagOffset; + this.interactionRange = other.interactionRange; + this.authorizedInteractionTarget = other.authorizedInteractionTarget; + this.authorizedInteractionId = other.authorizedInteractionId; + this.predictedInteractionTarget = other.predictedInteractionTarget; + this.predictedInteractionId = other.predictedInteractionId; + this.movingItem = other.movingItem; + this.controller = other.controller; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterHeldItemComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterHeldItemComponent.java index 04803d4628..dc0ad93834 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterHeldItemComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterHeldItemComponent.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; -public class CharacterHeldItemComponent implements Component { +public class CharacterHeldItemComponent implements Component { @Replicate public EntityRef selectedItem = EntityRef.NULL; @@ -16,4 +16,11 @@ public class CharacterHeldItemComponent implements Component { @Replicate public long nextItemUseTime; + + @Override + public void copyFrom(CharacterHeldItemComponent other) { + this.selectedItem = other.selectedItem; + this.lastItemUsedTime = other.lastItemUsedTime; + this.nextItemUseTime = other.nextItemUseTime; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterMovementComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterMovementComponent.java index c4fcfd4c63..16935f5335 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterMovementComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterMovementComponent.java @@ -3,23 +3,22 @@ package org.terasology.engine.logic.characters; import com.google.common.collect.Lists; - import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.FieldReplicateType; import org.terasology.engine.network.Replicate; -import org.terasology.nui.properties.Range; import org.terasology.engine.physics.CollisionGroup; import org.terasology.engine.physics.StandardCollisionGroup; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.nui.properties.Range; import java.util.List; /** - * This component is attached to all character entities. It governs movement and stores - * associated paramenters, and can be used instead of a CapsuleShapeComponent by the physics system to define the collision shape.
- * The {@link AliveCharacterComponent} should necessarily be attached to the character entity for the movement systems to work. + * This component is attached to all character entities. It governs movement and stores associated paramenters, and can + * be used instead of a CapsuleShapeComponent by the physics system to define the collision shape.
The {@link + * AliveCharacterComponent} should necessarily be attached to the character entity for the movement systems to work. */ -public final class CharacterMovementComponent implements Component { +public final class CharacterMovementComponent implements Component { // Collision settings @Range(min = 1, max = 25) @@ -27,7 +26,11 @@ public final class CharacterMovementComponent implements Component { @Range(min = 0, max = 5) public float radius = 0.3f; public CollisionGroup collisionGroup = StandardCollisionGroup.CHARACTER; - public List collidesWith = Lists.newArrayList(StandardCollisionGroup.WORLD, StandardCollisionGroup.SENSOR, StandardCollisionGroup.CHARACTER); + public List collidesWith = Lists.newArrayList( + StandardCollisionGroup.WORLD, + StandardCollisionGroup.SENSOR, + StandardCollisionGroup.CHARACTER + ); @Range(min = 0, max = 5) public float pickupRadius = 1.5f; @@ -84,4 +87,27 @@ public void setVelocity(Vector3f newVelocity) { velocity.set(newVelocity); } + @Override + public void copyFrom(CharacterMovementComponent other) { + this.height = other.height; + this.radius = other.radius; + this.collisionGroup = other.collisionGroup; + this.collidesWith = Lists.newArrayList(other.collidesWith); + this.pickupRadius = other.pickupRadius; + this.speedMultiplier = other.speedMultiplier; + this.runFactor = other.runFactor; + this.jumpSpeed = other.jumpSpeed; + this.stepHeight = other.stepHeight; + this.slopeFactor = other.slopeFactor; + this.baseNumberOfJumpsMax = other.baseNumberOfJumpsMax; + this.numberOfJumpsMax = other.numberOfJumpsMax; + this.numberOfJumpsLeft = other.numberOfJumpsLeft; + this.distanceBetweenFootsteps = other.distanceBetweenFootsteps; + this.faceMovementDirection = other.faceMovementDirection; + this.mode = other.mode; + this.grounded = other.grounded; + this.jump = other.jump; + this.footstepDelta = other.footstepDelta; + this.velocity = new Vector3f(other.velocity); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSoundComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSoundComponent.java index 543c6e9715..4b4e83f5be 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSoundComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSoundComponent.java @@ -3,13 +3,12 @@ package org.terasology.engine.logic.characters; import com.google.common.collect.Lists; - import org.terasology.engine.audio.StaticSound; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; -public final class CharacterSoundComponent implements Component { +public final class CharacterSoundComponent implements Component { public List footstepSounds = Lists.newArrayList(); public List damageSounds = Lists.newArrayList(); @@ -33,4 +32,25 @@ public final class CharacterSoundComponent implements Component { public long lastSoundTime; + @Override + public void copyFrom(CharacterSoundComponent other) { + this.footstepSounds = Lists.newArrayList(other.footstepSounds); + this.damageSounds = Lists.newArrayList(other.damageSounds); + this.landingSounds = Lists.newArrayList(other.landingSounds); + this.jumpSounds = Lists.newArrayList(other.jumpSounds); + this.deathSounds = Lists.newArrayList(other.deathSounds); + this.respawnSounds = Lists.newArrayList(other.respawnSounds); + this.swimSounds = Lists.newArrayList(other.swimSounds); + this.enterWaterSounds = Lists.newArrayList(other.enterWaterSounds); + this.leaveWaterSounds = Lists.newArrayList(other.leaveWaterSounds); + this.footstepVolume = other.footstepVolume; + this.damageVolume = other.damageVolume; + this.jumpVolume = other.jumpVolume; + this.landingVolume = other.landingVolume; + this.deathVolume = other.deathVolume; + this.respawnVolume = other.respawnVolume; + this.swimmingVolume = other.swimmingVolume; + this.diveVolume = other.diveVolume; + this.lastSoundTime = other.lastSoundTime; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSystem.java b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSystem.java index ab75099a7d..de1d85b33d 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSystem.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/CharacterSystem.java @@ -18,7 +18,6 @@ import org.terasology.engine.entitySystem.systems.RegisterSystem; import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem; import org.terasology.engine.input.binds.interaction.AttackButton; -import org.terasology.engine.input.cameraTarget.PlayerTargetSystem; import org.terasology.engine.logic.characters.events.ActivationRequest; import org.terasology.engine.logic.characters.events.ActivationRequestDenied; import org.terasology.engine.logic.characters.events.AttackEvent; @@ -48,13 +47,11 @@ import org.terasology.engine.recording.RecordAndReplayCurrentStatus; import org.terasology.engine.recording.RecordAndReplayStatus; import org.terasology.engine.registry.In; -import org.terasology.engine.world.BlockEntityRegistry; import org.terasology.engine.world.block.BlockComponent; import org.terasology.engine.world.block.regions.ActAsBlockComponent; import java.util.Optional; - @RegisterSystem public class CharacterSystem extends BaseComponentSystem implements UpdateSubscriberSystem { public static final CollisionGroup[] DEFAULTPHYSICSFILTER = @@ -76,12 +73,6 @@ public class CharacterSystem extends BaseComponentSystem implements UpdateSubscr @In private Time time; - @In - private PlayerTargetSystem targetSystem; - - @In - private BlockEntityRegistry blockRegistry; - @In private DirectionAndOriginPosRecorderList directionAndOriginPosRecorderList; diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/GazeMountPointComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/GazeMountPointComponent.java index cdb6ef5e8c..f96a411115 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/GazeMountPointComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/GazeMountPointComponent.java @@ -3,10 +3,10 @@ package org.terasology.engine.logic.characters; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * The gaze mount point represents a character's "eyes". @@ -16,7 +16,7 @@ * The character location usually points to the center of the entity. The gaze mount point translation is relative to * that anchor location. */ -public class GazeMountPointComponent implements Component { +public class GazeMountPointComponent implements Component { /** * Holds an entity that will have its location linked to the character entity. *

@@ -33,4 +33,10 @@ public class GazeMountPointComponent implements Component { */ @Replicate public Vector3f translate = new Vector3f(0, 0, 0); + + @Override + public void copyFrom(GazeMountPointComponent other) { + this.gazeEntity = other.gazeEntity; + this.translate = new Vector3f(other.translate); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/KinematicCharacterMover.java b/engine/src/main/java/org/terasology/engine/logic/characters/KinematicCharacterMover.java index 82c648cf70..3e50dd1bd9 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/KinematicCharacterMover.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/KinematicCharacterMover.java @@ -7,8 +7,6 @@ import org.joml.RoundingMode; import org.joml.Vector3f; import org.joml.Vector3i; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.logic.characters.events.FootstepEvent; import org.terasology.engine.logic.characters.events.HorizontalCollisionEvent; @@ -17,13 +15,13 @@ import org.terasology.engine.logic.characters.events.SwimStrokeEvent; import org.terasology.engine.logic.characters.events.VerticalCollisionEvent; import org.terasology.engine.logic.location.LocationComponent; -import org.terasology.math.TeraMath; import org.terasology.engine.physics.engine.CharacterCollider; import org.terasology.engine.physics.engine.PhysicsEngine; import org.terasology.engine.physics.engine.SweepCallback; import org.terasology.engine.physics.events.MovedEvent; import org.terasology.engine.world.WorldProvider; import org.terasology.engine.world.block.Block; +import org.terasology.math.TeraMath; /** * Calculates character movement using a physics-engine provided CharacterCollider. @@ -66,7 +64,6 @@ public class KinematicCharacterMover implements CharacterMover { public static final float VERTICAL_PENETRATION_LEEWAY = 0.05f; private static final float CHECK_FORWARD_DIST = 0.05f; - private static final Logger logger = LoggerFactory.getLogger(KinematicCharacterMover.class); private boolean stepped; // Processing state variables diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/StandComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/StandComponent.java index 5ac7ab3ebf..20508d4647 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/StandComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/StandComponent.java @@ -3,8 +3,8 @@ package org.terasology.engine.logic.characters; import com.google.common.collect.Lists; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.rendering.assets.animation.MeshAnimation; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; @@ -12,7 +12,7 @@ * The component gets currently only used to define the idle stand animations. * */ -public class StandComponent implements Component { +public class StandComponent implements Component { /** * A pool of idle stand animations. It gets currently only used by behavior trees to make a skeletal mesh perform a * idle stand animation loop. The animations of the pool will be picked by random. The result is a randomized @@ -21,4 +21,8 @@ public class StandComponent implements Component { */ public List animationPool = Lists.newArrayList(); + @Override + public void copyFrom(StandComponent other) { + this.animationPool = Lists.newArrayList(other.animationPool); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/VisualCharacterComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/VisualCharacterComponent.java index 7f3051d66e..5b393f0959 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/VisualCharacterComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/VisualCharacterComponent.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.logic.characters.events.CreateVisualCharacterEvent; import org.terasology.engine.network.NoReplicate; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * Add this component to characters to give them a visual appearance. @@ -19,10 +19,15 @@ * */ @Replicate -public class VisualCharacterComponent implements Component { +public class VisualCharacterComponent implements Component { /** * Should not be set manually. Can however be used to forward events from character to visual character. */ @NoReplicate public EntityRef visualCharacter = EntityRef.NULL; + + @Override + public void copyFrom(VisualCharacterComponent other) { + this.visualCharacter = other.visualCharacter; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/WalkComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/WalkComponent.java index 68169ce6a8..9a5bd884e2 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/WalkComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/WalkComponent.java @@ -3,8 +3,8 @@ package org.terasology.engine.logic.characters; import com.google.common.collect.Lists; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.rendering.assets.animation.MeshAnimation; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; @@ -13,11 +13,16 @@ * but will in future also store the walk speed. * */ -public class WalkComponent implements Component { +public class WalkComponent implements Component { /** * A pool of walk animations. It gets currently only used by behavior trees to make a skeletal mesh perform a * walk animation loop. The animations of the pool will be picked by random. The result is a randomized animation * loop. The same animation can be put multiple times in the pool, so that it will be chosen more frequently. */ public List animationPool = Lists.newArrayList(); + + @Override + public void copyFrom(WalkComponent other) { + this.animationPool = Lists.newArrayList(other.animationPool); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionScreenComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionScreenComponent.java index 856556022b..1b659dcb03 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionScreenComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionScreenComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters.interactions; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; /** @@ -10,7 +10,11 @@ * */ @API -public class InteractionScreenComponent implements Component { +public class InteractionScreenComponent implements Component { public String screen; + @Override + public void copyFrom(InteractionScreenComponent other) { + this.screen = other.screen; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionTargetComponent.java b/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionTargetComponent.java index 70b8d64e90..d8ac924ad3 100644 --- a/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionTargetComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/characters/interactions/InteractionTargetComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.characters.interactions; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; -public class InteractionTargetComponent implements Component { +public class InteractionTargetComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/common/DisplayNameComponent.java b/engine/src/main/java/org/terasology/engine/logic/common/DisplayNameComponent.java index af2ac9e9de..fa14e0299f 100644 --- a/engine/src/main/java/org/terasology/engine/logic/common/DisplayNameComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/common/DisplayNameComponent.java @@ -3,12 +3,12 @@ package org.terasology.engine.logic.common; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; import org.terasology.engine.world.block.items.AddToBlockBasedItem; +import org.terasology.gestalt.entitysystem.component.Component; @AddToBlockBasedItem -public class DisplayNameComponent implements Component { +public class DisplayNameComponent implements Component { @Replicate public String name = ""; @Replicate @@ -19,4 +19,10 @@ public class DisplayNameComponent implements Component { public String toString() { return String.format("DisplayName(name = '%s', description = '%s')", name, description); } + + @Override + public void copyFrom(DisplayNameComponent other) { + this.name = other.name; + this.description = other.description; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/common/InspectionToolComponent.java b/engine/src/main/java/org/terasology/engine/logic/common/InspectionToolComponent.java index 08afaca892..ed9d1be387 100644 --- a/engine/src/main/java/org/terasology/engine/logic/common/InspectionToolComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/common/InspectionToolComponent.java @@ -2,16 +2,21 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.common; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * Component of the inspection tool which can be used to view the json data of * entities. This component can also be used to test external references. * */ -public class InspectionToolComponent implements Component { +public class InspectionToolComponent implements Component { @Replicate public EntityRef inspectedEntity = EntityRef.NULL; + + @Override + public void copyFrom(InspectionToolComponent other) { + this.inspectedEntity = other.inspectedEntity; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/common/RangeComponent.java b/engine/src/main/java/org/terasology/engine/logic/common/RangeComponent.java index 2a7f6fc05d..1ebdb08c18 100644 --- a/engine/src/main/java/org/terasology/engine/logic/common/RangeComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/common/RangeComponent.java @@ -3,16 +3,21 @@ package org.terasology.engine.logic.common; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; /** * Indicate that an entity has a range. *

* This can be used to give items an extended range for activation, but may also be used to indicate any other ranged ability of an entity. */ -public class RangeComponent implements Component { +public class RangeComponent implements Component { /** * The range measured in in-game blocks. */ public float range; + + @Override + public void copyFrom(RangeComponent other) { + this.range = other.range; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/common/RetainComponentsComponent.java b/engine/src/main/java/org/terasology/engine/logic/common/RetainComponentsComponent.java index 3f051ce870..638cff1ba5 100644 --- a/engine/src/main/java/org/terasology/engine/logic/common/RetainComponentsComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/common/RetainComponentsComponent.java @@ -3,8 +3,8 @@ package org.terasology.engine.logic.common; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Set; @@ -15,7 +15,12 @@ * If a block (item) entity has a component that is not part of its prefab, retaining this component results in the block * entity still having this component afterwards. If not retained, it is likely to be removed instead. */ -public class RetainComponentsComponent implements Component { +public class RetainComponentsComponent implements Component { @Replicate public Set> components = Sets.newHashSet(); + + @Override + public void copyFrom(RetainComponentsComponent other) { + this.components = Sets.newHashSet(other.components); // TODO Investigate, needs to deep-copy or not! + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/common/lifespan/LifespanComponent.java b/engine/src/main/java/org/terasology/engine/logic/common/lifespan/LifespanComponent.java index d01c04b6cf..386b34cf41 100644 --- a/engine/src/main/java/org/terasology/engine/logic/common/lifespan/LifespanComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/common/lifespan/LifespanComponent.java @@ -3,14 +3,14 @@ package org.terasology.engine.logic.common.lifespan; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * Component describes the lifespan of an entity. When the lifespan ends the entity is destroyed. * */ -public class LifespanComponent implements Component { +public class LifespanComponent implements Component { // Lifespan in seconds @Replicate public float lifespan = 5; @@ -23,4 +23,10 @@ public LifespanComponent() { public LifespanComponent(float span) { this.lifespan = span; } + + @Override + public void copyFrom(LifespanComponent other) { + this.lifespan = other.lifespan; + this.deathTime = other.deathTime; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/config/ModuleConfigComponent.java b/engine/src/main/java/org/terasology/engine/logic/config/ModuleConfigComponent.java index ec9036c6a8..527737d0ae 100644 --- a/engine/src/main/java/org/terasology/engine/logic/config/ModuleConfigComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/config/ModuleConfigComponent.java @@ -2,11 +2,18 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.config; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Maps; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; -public class ModuleConfigComponent implements Component { +public class ModuleConfigComponent implements Component { public String moduleName; public Map properties; + + @Override + public void copyFrom(ModuleConfigComponent other) { + this.moduleName = other.moduleName; + this.properties = Maps.newHashMap(other.properties); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/console/commands/CoreCommands.java b/engine/src/main/java/org/terasology/engine/logic/console/commands/CoreCommands.java index d41851df02..9c1fda59b9 100644 --- a/engine/src/main/java/org/terasology/engine/logic/console/commands/CoreCommands.java +++ b/engine/src/main/java/org/terasology/engine/logic/console/commands/CoreCommands.java @@ -15,7 +15,6 @@ import org.terasology.engine.core.modes.StateMainMenu; import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.core.subsystem.DisplayDevice; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; @@ -62,6 +61,7 @@ import org.terasology.engine.world.block.loader.BlockFamilyDefinition; import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.gestalt.assets.management.AssetManager; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.naming.Name; import org.terasology.nui.FontColor; import org.terasology.nui.asset.UIElement; diff --git a/engine/src/main/java/org/terasology/engine/logic/delay/DelayedActionComponent.java b/engine/src/main/java/org/terasology/engine/logic/delay/DelayedActionComponent.java index c3595f7df0..c7696cd26e 100644 --- a/engine/src/main/java/org/terasology/engine/logic/delay/DelayedActionComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/delay/DelayedActionComponent.java @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.delay; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Maps; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.HashMap; import java.util.HashSet; @@ -15,7 +16,7 @@ * Not for public use. Use DelayManager instead. */ @ForceBlockActive -public final class DelayedActionComponent implements Component { +public final class DelayedActionComponent implements Component { private Map actionIdsWakeUp = new HashMap<>(); private long lowestWakeUp = Long.MAX_VALUE; @@ -68,4 +69,10 @@ private long findSmallestWakeUp() { } return result; } + + @Override + public void copyFrom(DelayedActionComponent other) { + this.actionIdsWakeUp = Maps.newHashMap(other.actionIdsWakeUp); + this.lowestWakeUp = other.lowestWakeUp; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/delay/PeriodicActionComponent.java b/engine/src/main/java/org/terasology/engine/logic/delay/PeriodicActionComponent.java index 22379ff542..0e58c13da3 100644 --- a/engine/src/main/java/org/terasology/engine/logic/delay/PeriodicActionComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/delay/PeriodicActionComponent.java @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.delay; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Maps; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.HashMap; import java.util.HashSet; @@ -15,7 +16,7 @@ * Not for public use. Use DelayManager instead. */ @ForceBlockActive -public final class PeriodicActionComponent implements Component { +public final class PeriodicActionComponent implements Component { private Map actionIdsWakeUp = new HashMap<>(); private Map actionIdsPeriod = new HashMap<>(); private long lowestWakeUp = Long.MAX_VALUE; @@ -77,4 +78,11 @@ public boolean isEmpty() { public boolean containsActionId(String actionId) { return actionIdsWakeUp.containsKey(actionId); } + + @Override + public void copyFrom(PeriodicActionComponent other) { + this.actionIdsPeriod = Maps.newHashMap(other.actionIdsPeriod); + this.actionIdsWakeUp = Maps.newHashMap(other.actionIdsPeriod); + this.lowestWakeUp = other.lowestWakeUp; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/inventory/ItemComponent.java b/engine/src/main/java/org/terasology/engine/logic/inventory/ItemComponent.java index 711472cc52..8445191391 100644 --- a/engine/src/main/java/org/terasology/engine/logic/inventory/ItemComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/inventory/ItemComponent.java @@ -3,17 +3,17 @@ package org.terasology.engine.logic.inventory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.network.FieldReplicateType; import org.terasology.engine.network.Replicate; import org.terasology.engine.rendering.assets.texture.TextureRegionAsset; +import org.terasology.gestalt.entitysystem.component.Component; /** * Item data is stored using this component * */ -public final class ItemComponent implements Component { +public final class ItemComponent implements Component { /** * Name of the icon this item should be rendered with */ @@ -73,4 +73,18 @@ public enum UsageType { public Prefab pickupPrefab; public int cooldownTime = 200; + + @Override + public void copyFrom(ItemComponent other) { + this.icon = other.icon; + this.stackId = other.stackId; + this.maxStackSize = other.maxStackSize; + this.stackCount = other.stackCount; + this.usage = other.usage; + this.consumedOnUse = other.consumedOnUse; + this.baseDamage = other.baseDamage; + this.damageType = other.damageType; + this.pickupPrefab = other.pickupPrefab; + this.cooldownTime = other.cooldownTime; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/inventory/ItemPickupAuthoritySystem.java b/engine/src/main/java/org/terasology/engine/logic/inventory/ItemPickupAuthoritySystem.java index 3ecd04f20d..a6e007a0c1 100644 --- a/engine/src/main/java/org/terasology/engine/logic/inventory/ItemPickupAuthoritySystem.java +++ b/engine/src/main/java/org/terasology/engine/logic/inventory/ItemPickupAuthoritySystem.java @@ -7,7 +7,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.Time; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnAddedComponent; import org.terasology.engine.entitySystem.event.ReceiveEvent; @@ -24,6 +23,7 @@ import org.terasology.engine.registry.In; import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.world.block.items.BlockItemComponent; +import org.terasology.gestalt.entitysystem.component.Component; /** * This system uses the pickup prefab on an item component to add on extra components needed for the item to display in the world. diff --git a/engine/src/main/java/org/terasology/engine/logic/inventory/PickupComponent.java b/engine/src/main/java/org/terasology/engine/logic/inventory/PickupComponent.java index 0c5c490fa8..de7ce752bf 100644 --- a/engine/src/main/java/org/terasology/engine/logic/inventory/PickupComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/inventory/PickupComponent.java @@ -3,11 +3,17 @@ package org.terasology.engine.logic.inventory; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class PickupComponent implements Component { +public class PickupComponent implements Component { public long timeToPickUp; public long timeDropped; + + @Override + public void copyFrom(PickupComponent other) { + this.timeToPickUp = other.timeToPickUp; + this.timeDropped = other.timeDropped; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemBlockMeshComponent.java b/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemBlockMeshComponent.java index 9f056c86f3..0d4c9a8612 100644 --- a/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemBlockMeshComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemBlockMeshComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.inventory; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; -public class RenderItemBlockMeshComponent implements Component { +public class RenderItemBlockMeshComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemIconMeshComponent.java b/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemIconMeshComponent.java index e2691079b6..52090ce80a 100644 --- a/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemIconMeshComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/inventory/RenderItemIconMeshComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.inventory; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; -public class RenderItemIconMeshComponent implements Component { +public class RenderItemIconMeshComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/location/LocationComponent.java b/engine/src/main/java/org/terasology/engine/logic/location/LocationComponent.java index 307b6c4260..81ee78cc95 100644 --- a/engine/src/main/java/org/terasology/engine/logic/location/LocationComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/location/LocationComponent.java @@ -8,11 +8,11 @@ import org.joml.Quaternionfc; import org.joml.Vector3f; import org.joml.Vector3fc; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.math.Direction; import org.terasology.engine.network.Replicate; import org.terasology.engine.network.ReplicationCheck; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.nui.properties.TextField; import org.terasology.reflection.metadata.FieldMetadata; @@ -23,17 +23,15 @@ /** * Component represent the location and facing of an entity in the world */ -public final class LocationComponent implements Component, ReplicationCheck { +public final class LocationComponent implements Component, ReplicationCheck { public boolean replicateChanges = true; // Relative to @Replicate EntityRef parent = EntityRef.NULL; - @Replicate List children = Lists.newArrayList(); - // Standard position/rotation @Replicate @TextField @@ -46,7 +44,6 @@ public final class LocationComponent implements Component, ReplicationCheck { Vector3f lastPosition = new Vector3f(); @Replicate Quaternionf lastRotation = new Quaternionf(); - private boolean isDirty = false; public LocationComponent() { @@ -124,15 +121,6 @@ public Vector3f getLocalDirection(Vector3f dest) { return dest.set(Direction.FORWARD.asVector3i()).rotate(getLocalRotation()); } - /** - * set the local scale - * - * @param value the scale - */ - public void setLocalScale(float value) { - this.scale = value; - } - /** * local scale * @@ -142,6 +130,15 @@ public float getLocalScale() { return scale; } + /** + * set the local scale + * + * @param value the scale + */ + public void setLocalScale(float value) { + this.scale = value; + } + /** * get the world position * @@ -207,6 +204,14 @@ public float getWorldScale() { return result; } + public void setWorldScale(float value) { + this.scale = value; + LocationComponent parentLoc = parent.getComponent(LocationComponent.class); + if (parentLoc != null) { + this.scale /= parentLoc.getWorldScale(); + } + } + /** * set the world position of the {@link LocationComponent} * @@ -238,14 +243,6 @@ public void setWorldRotation(Quaternionfc value) { } } - public void setWorldScale(float value) { - this.scale = value; - LocationComponent parentLoc = parent.getComponent(LocationComponent.class); - if (parentLoc != null) { - this.scale /= parentLoc.getWorldScale(); - } - } - public EntityRef getParent() { return parent; } @@ -276,4 +273,18 @@ public int hashCode() { public boolean shouldReplicate(FieldMetadata field, boolean initial, boolean toOwner) { return initial || replicateChanges; } + + + @Override + public void copyFrom(LocationComponent other) { + this.replicateChanges = other.replicateChanges; + this.isDirty = other.isDirty; + this.parent = other.parent; + this.children = Lists.newArrayList(other.children); + this.position = new Vector3f(other.position); + this.rotation = new Quaternionf(other.rotation); + this.scale = other.scale; + this.lastPosition = new Vector3f(other.lastPosition); + this.lastRotation = new Quaternionf(other.lastRotation); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/nameTags/NameTagComponent.java b/engine/src/main/java/org/terasology/engine/logic/nameTags/NameTagComponent.java index 565a3aa619..4593d1006d 100644 --- a/engine/src/main/java/org/terasology/engine/logic/nameTags/NameTagComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/nameTags/NameTagComponent.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.nameTags; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.logic.common.DisplayNameComponent; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import org.terasology.nui.Color; /** @@ -16,7 +16,7 @@ * The color of the name tag is based on the {@link org.terasology.engine.network.ColorComponent} of this entity */ @API -public class NameTagComponent implements Component { +public class NameTagComponent implements Component { @Replicate public float yOffset = 0.3f; @@ -29,4 +29,12 @@ public class NameTagComponent implements Component { @Replicate public float scale = 1f; + + @Override + public void copyFrom(NameTagComponent other) { + this.yOffset = other.yOffset; + this.text = other.text; + this.textColor = new Color(other.textColor); + this.scale = other.scale; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/permission/PermissionSetComponent.java b/engine/src/main/java/org/terasology/engine/logic/permission/PermissionSetComponent.java index b1a2f631d8..de76c69db1 100644 --- a/engine/src/main/java/org/terasology/engine/logic/permission/PermissionSetComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/permission/PermissionSetComponent.java @@ -2,10 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.permission; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Sets; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Set; -public class PermissionSetComponent implements Component { +public class PermissionSetComponent implements Component { public Set permissions; + + @Override + public void copyFrom(PermissionSetComponent other) { + this.permissions = Sets.newHashSet(other.permissions); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/AutoMountCameraComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/AutoMountCameraComponent.java index ad0dc87e50..26caf257bc 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/AutoMountCameraComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/AutoMountCameraComponent.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.players; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * Adding this component to a client entity will automatically attempt to link the client's camera entity to the controlled character */ -public class AutoMountCameraComponent implements Component { +public class AutoMountCameraComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonClientSystem.java b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonClientSystem.java index 3469dbc1de..4ea8e6ac90 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonClientSystem.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonClientSystem.java @@ -5,7 +5,6 @@ import org.joml.Quaternionf; import org.joml.Vector3f; import org.terasology.engine.core.Time; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; @@ -17,16 +16,17 @@ import org.terasology.engine.entitySystem.systems.RegisterSystem; import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem; import org.terasology.engine.logic.characters.CharacterComponent; -import org.terasology.engine.logic.location.Location; -import org.terasology.engine.logic.location.LocationComponent; import org.terasology.engine.logic.characters.CharacterHeldItemComponent; import org.terasology.engine.logic.console.commandSystem.annotations.Command; import org.terasology.engine.logic.console.commandSystem.annotations.CommandParam; -import org.terasology.math.TeraMath; +import org.terasology.engine.logic.location.Location; +import org.terasology.engine.logic.location.LocationComponent; import org.terasology.engine.network.ClientComponent; import org.terasology.engine.registry.In; import org.terasology.engine.rendering.logic.VisualComponent; import org.terasology.engine.rendering.world.WorldRenderer; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.math.TeraMath; @RegisterSystem(RegisterMode.CLIENT) public class FirstPersonClientSystem extends BaseComponentSystem implements UpdateSubscriberSystem { diff --git a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemMountPointComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemMountPointComponent.java index b31e0151e8..4a0fd80bc2 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemMountPointComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemMountPointComponent.java @@ -5,15 +5,15 @@ import org.joml.Matrix4f; import org.joml.Quaternionf; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.math.TeraMath; /** * Only used by the client side so that held items can be positioned in line with the camera */ -public class FirstPersonHeldItemMountPointComponent implements Component { +public class FirstPersonHeldItemMountPointComponent implements Component { @Owns public EntityRef mountPointEntity = EntityRef.NULL; @@ -43,6 +43,17 @@ public boolean isTracked() { return trackingDataReceived; } + @Override + public void copyFrom(FirstPersonHeldItemMountPointComponent other) { + this.mountPointEntity = other.mountPointEntity; + this.rotateDegrees = new Vector3f(other.rotateDegrees); + this.translate = new Vector3f(other.translate); + this.rotationQuaternion = new Quaternionf(other.rotationQuaternion); + this.scale = other.scale; + this.trackingDataReceived = other.trackingDataReceived; + this.toolAdjustmentMatrix = new Matrix4f(other.toolAdjustmentMatrix); + } + /** * A callback target for the controller listener. When this callback triggers, the pos of the mount point will * cuange to the value of the pose parameter. This is mainly designed as a callback, and not intended to be part diff --git a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemTransformComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemTransformComponent.java index 6d0fad075d..5d745fa73f 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemTransformComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/FirstPersonHeldItemTransformComponent.java @@ -5,8 +5,15 @@ import org.joml.Vector3f; import org.terasology.engine.rendering.logic.VisualComponent; -public class FirstPersonHeldItemTransformComponent implements VisualComponent { +public class FirstPersonHeldItemTransformComponent implements VisualComponent { public Vector3f rotateDegrees = new Vector3f(); public Vector3f translate = new Vector3f(); public float scale = 1f; + + @Override + public void copyFrom(FirstPersonHeldItemTransformComponent other) { + this.rotateDegrees = new Vector3f(other.rotateDegrees); + this.translate = new Vector3f(other.translate); + this.scale = other.scale; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/ItemIsHeldComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/ItemIsHeldComponent.java index 46d2d5e6a0..ebf1e5a966 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/ItemIsHeldComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/ItemIsHeldComponent.java @@ -2,10 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.players; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * This is used on the client side to track and clean up items that are no longer held, but are still location linked */ -public class ItemIsHeldComponent implements Component { +public class ItemIsHeldComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/ItemIsRemotelyHeldComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/ItemIsRemotelyHeldComponent.java index b40a7541fb..11322c9e16 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/ItemIsRemotelyHeldComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/ItemIsRemotelyHeldComponent.java @@ -2,12 +2,17 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.players; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; /** * This is used on the client side to track and clean up items that are no longer held by remote players, but are still location linked */ -public class ItemIsRemotelyHeldComponent implements Component { +public class ItemIsRemotelyHeldComponent implements Component { public EntityRef remotePlayer = EntityRef.NULL; + + @Override + public void copyFrom(ItemIsRemotelyHeldComponent other) { + this.remotePlayer = other.remotePlayer; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/PlayerCharacterComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/PlayerCharacterComponent.java index f207a7d14e..9c0f616d1e 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/PlayerCharacterComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/PlayerCharacterComponent.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.players; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * This is only attached to the player entities.
* Used to differentiate between player characters and other character entities. */ -public class PlayerCharacterComponent implements Component { +public class PlayerCharacterComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemMountPointComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemMountPointComponent.java index bc62714b06..829a983883 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemMountPointComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemMountPointComponent.java @@ -4,14 +4,14 @@ import org.joml.Quaternionf; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; /** * Only used by the client side so that held items of other players can be positioned in line with them. */ -public class RemotePersonHeldItemMountPointComponent implements Component { +public class RemotePersonHeldItemMountPointComponent implements Component { @Owns public EntityRef mountPointEntity = EntityRef.NULL; @@ -20,4 +20,12 @@ public class RemotePersonHeldItemMountPointComponent implements Component { public Quaternionf rotationQuaternion; public float scale = 1f; + @Override + public void copyFrom(RemotePersonHeldItemMountPointComponent other) { + this.mountPointEntity = other.mountPointEntity; + this.rotateDegrees = new Vector3f(other.rotateDegrees); + this.translate = new Vector3f(other.translate); + this.rotationQuaternion = new Quaternionf(other.rotationQuaternion); + this.scale = other.scale; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemTransformComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemTransformComponent.java index ede7d042da..47ca0b2cac 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemTransformComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/RemotePersonHeldItemTransformComponent.java @@ -5,8 +5,15 @@ import org.joml.Vector3f; import org.terasology.engine.rendering.logic.VisualComponent; -public class RemotePersonHeldItemTransformComponent implements VisualComponent { +public class RemotePersonHeldItemTransformComponent implements VisualComponent { public Vector3f rotateDegrees = new Vector3f(); public Vector3f translate = new Vector3f(); public float scale = 1f; + + @Override + public void copyFrom(RemotePersonHeldItemTransformComponent other) { + this.rotateDegrees = new Vector3f(other.rotateDegrees); + this.translate = new Vector3f(other.translate); + this.scale = other.scale; + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/StaticSpawnLocationComponent.java b/engine/src/main/java/org/terasology/engine/logic/players/StaticSpawnLocationComponent.java index 2467e7dae6..2b64e0428d 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/StaticSpawnLocationComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/StaticSpawnLocationComponent.java @@ -3,13 +3,18 @@ package org.terasology.engine.logic.players; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * This is attached to the player entities in order to manually set a custom spawn location. */ -public class StaticSpawnLocationComponent implements Component { +public class StaticSpawnLocationComponent implements Component { @Replicate public Vector3f position; + + @Override + public void copyFrom(StaticSpawnLocationComponent other) { + this.position = new Vector3f(other.position); + } } diff --git a/engine/src/main/java/org/terasology/engine/logic/players/ThirdPersonRemoteClientSystem.java b/engine/src/main/java/org/terasology/engine/logic/players/ThirdPersonRemoteClientSystem.java index 9c209dddb1..0261584207 100644 --- a/engine/src/main/java/org/terasology/engine/logic/players/ThirdPersonRemoteClientSystem.java +++ b/engine/src/main/java/org/terasology/engine/logic/players/ThirdPersonRemoteClientSystem.java @@ -9,7 +9,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.Time; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; @@ -29,6 +28,7 @@ import org.terasology.engine.network.ClientComponent; import org.terasology.engine.registry.In; import org.terasology.engine.rendering.logic.VisualComponent; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Iterator; import java.util.Set; diff --git a/engine/src/main/java/org/terasology/engine/logic/selection/OnItemActivateSelectionComponent.java b/engine/src/main/java/org/terasology/engine/logic/selection/OnItemActivateSelectionComponent.java index bdf598bff5..6a245ce832 100644 --- a/engine/src/main/java/org/terasology/engine/logic/selection/OnItemActivateSelectionComponent.java +++ b/engine/src/main/java/org/terasology/engine/logic/selection/OnItemActivateSelectionComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.logic.selection; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; -public final class OnItemActivateSelectionComponent implements Component { +public final class OnItemActivateSelectionComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/math/IntegerRange.java b/engine/src/main/java/org/terasology/engine/math/IntegerRange.java index 904638ed98..d8b7dd156a 100644 --- a/engine/src/main/java/org/terasology/engine/math/IntegerRange.java +++ b/engine/src/main/java/org/terasology/engine/math/IntegerRange.java @@ -8,7 +8,7 @@ import java.util.TreeMap; public class IntegerRange implements Iterable { - private Map ranges = new TreeMap<>(); + private final Map ranges = new TreeMap<>(); public void addNumbers(int from, int to) { if (from > to) { @@ -21,6 +21,14 @@ public void addNumbers(int from, int to) { } } + public IntegerRange copy() { + IntegerRange newRange = new IntegerRange(); + for (Map.Entry entry : ranges.entrySet()) { + newRange.addNumbers(entry.getKey(), entry.getValue()); + } + return newRange; + } + @Override public Iterator iterator() { return new RangesIterator(ranges); diff --git a/engine/src/main/java/org/terasology/engine/math/Side.java b/engine/src/main/java/org/terasology/engine/math/Side.java index e792265234..6036c83ec8 100644 --- a/engine/src/main/java/org/terasology/engine/math/Side.java +++ b/engine/src/main/java/org/terasology/engine/math/Side.java @@ -3,13 +3,11 @@ package org.terasology.engine.math; import com.google.common.collect.ImmutableList; -import com.google.common.collect.Sets; import org.joml.Vector3fc; import org.joml.Vector3i; import org.joml.Vector3ic; import org.terasology.math.TeraMath; -import java.util.EnumSet; import java.util.List; /** @@ -35,7 +33,7 @@ public enum Side { public static final ImmutableList Y_VERTICAL_SIDE = ImmutableList.of(TOP, BOTTOM); public static final ImmutableList Z_VERTICAL_SIDE = ImmutableList.of(FRONT, BACK); - private static final ImmutableList ALL_SIDES = ImmutableList.of(TOP ,BOTTOM ,LEFT ,RIGHT ,FRONT ,BACK); + private static final ImmutableList ALL_SIDES = ImmutableList.of(TOP, BOTTOM, LEFT, RIGHT, FRONT, BACK); private final Vector3ic direction; Side(Vector3i vector3i) { diff --git a/engine/src/main/java/org/terasology/engine/network/ClientComponent.java b/engine/src/main/java/org/terasology/engine/network/ClientComponent.java index 315e8ed49f..2545b35d0b 100644 --- a/engine/src/main/java/org/terasology/engine/network/ClientComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/ClientComponent.java @@ -3,15 +3,15 @@ package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; /** * The component that marks an entity as being a Client Entity (essentially, a player) and ties them to a * client info entity (for replicated information) and character entity (their body). * */ -public class ClientComponent implements Component { +public class ClientComponent implements Component { public boolean local; @Replicate @@ -21,4 +21,13 @@ public class ClientComponent implements Component { public EntityRef character = EntityRef.NULL; public EntityRef camera = EntityRef.NULL; + + + @Override + public void copyFrom(ClientComponent other) { + this.local = other.local; + this.clientInfo = other.clientInfo; + this.character = other.character; + this.camera = other.camera; + } } diff --git a/engine/src/main/java/org/terasology/engine/network/ClientInfoComponent.java b/engine/src/main/java/org/terasology/engine/network/ClientInfoComponent.java index 5a67ea38fc..3f7dcf5363 100644 --- a/engine/src/main/java/org/terasology/engine/network/ClientInfoComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/ClientInfoComponent.java @@ -3,14 +3,14 @@ package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; /** * The component that marks an entity as being a Client Info Entity. */ @Replicate -public final class ClientInfoComponent implements Component { +public final class ClientInfoComponent implements Component { /** * When a client connects, the game searches a client info component for the client id ({@link Client#getId()}). @@ -27,4 +27,10 @@ public final class ClientInfoComponent implements Component { */ @Replicate public EntityRef client = EntityRef.NULL; + + @Override + public void copyFrom(ClientInfoComponent other) { + this.playerId = other.playerId; + this.client = other.client; + } } diff --git a/engine/src/main/java/org/terasology/engine/network/ColorComponent.java b/engine/src/main/java/org/terasology/engine/network/ColorComponent.java index 2088d408e5..3a18eeca22 100644 --- a/engine/src/main/java/org/terasology/engine/network/ColorComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/ColorComponent.java @@ -3,14 +3,19 @@ package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.nui.Color; /** * A component that provides a color to describe an entity */ -public class ColorComponent implements Component { +public class ColorComponent implements Component { @Replicate public Color color; + + @Override + public void copyFrom(ColorComponent other) { + this.color = new Color(other.color); + } } diff --git a/engine/src/main/java/org/terasology/engine/network/NetworkComponent.java b/engine/src/main/java/org/terasology/engine/network/NetworkComponent.java index 8650db63f7..43a09a0578 100644 --- a/engine/src/main/java/org/terasology/engine/network/NetworkComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/NetworkComponent.java @@ -3,15 +3,21 @@ package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class NetworkComponent implements Component { +public class NetworkComponent implements Component { public ReplicateMode replicateMode = ReplicateMode.RELEVANT; // Network identifier for the entity @Replicate private int networkId; + @Override + public void copyFrom(NetworkComponent other) { + this.networkId = other.networkId; + this.replicateMode = other.replicateMode; + } + public enum ReplicateMode { ALWAYS, // Always replicate this entity to all clients RELEVANT, // Replicate to client which this entity is relevant to (based on distance) diff --git a/engine/src/main/java/org/terasology/engine/network/PingStockComponent.java b/engine/src/main/java/org/terasology/engine/network/PingStockComponent.java index 7bafa8f1c0..46608e283c 100644 --- a/engine/src/main/java/org/terasology/engine/network/PingStockComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/PingStockComponent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.ArrayList; import java.util.HashMap; @@ -15,7 +15,7 @@ *

* Might be used to stock ping information and display it in future. */ -public final class PingStockComponent implements Component { +public final class PingStockComponent implements Component { // TODO Map is not supported for replication (no type handler), // therefore keys and values are replicated via lists. @@ -42,4 +42,9 @@ public Map getValues() { } return returnValues; } + + @Override + public void copyFrom(PingStockComponent other) { + this.setValues(other.getValues()); + } } diff --git a/engine/src/main/java/org/terasology/engine/network/PingSubscriberComponent.java b/engine/src/main/java/org/terasology/engine/network/PingSubscriberComponent.java index 77be6630fd..34e11715a8 100644 --- a/engine/src/main/java/org/terasology/engine/network/PingSubscriberComponent.java +++ b/engine/src/main/java/org/terasology/engine/network/PingSubscriberComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * PingSubscriberComponent, only on the server system, will be added to a client entity when this client subscribe. @@ -10,5 +10,5 @@ *

* It can be used to stock the ping information of users in future. */ -public class PingSubscriberComponent implements Component { +public class PingSubscriberComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/network/Server.java b/engine/src/main/java/org/terasology/engine/network/Server.java index 449cacc584..ff2d9d4b0f 100644 --- a/engine/src/main/java/org/terasology/engine/network/Server.java +++ b/engine/src/main/java/org/terasology/engine/network/Server.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.network; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; -import org.terasology.protobuf.NetData; import org.terasology.engine.world.chunks.remoteChunkProvider.ChunkReadyListener; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.protobuf.NetData; public interface Server extends ChunkReadyListener { diff --git a/engine/src/main/java/org/terasology/engine/network/internal/NetClient.java b/engine/src/main/java/org/terasology/engine/network/internal/NetClient.java index 8c31e98156..f69eaad8e1 100644 --- a/engine/src/main/java/org/terasology/engine/network/internal/NetClient.java +++ b/engine/src/main/java/org/terasology/engine/network/internal/NetClient.java @@ -21,7 +21,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.Time; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; @@ -49,6 +48,7 @@ import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.world.chunks.Chunk; import org.terasology.engine.world.chunks.Chunks; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.nui.Color; import org.terasology.persistence.typeHandling.DeserializationException; import org.terasology.persistence.typeHandling.SerializationException; diff --git a/engine/src/main/java/org/terasology/engine/network/internal/NetEntityRef.java b/engine/src/main/java/org/terasology/engine/network/internal/NetEntityRef.java index 7484210d6f..f227804048 100644 --- a/engine/src/main/java/org/terasology/engine/network/internal/NetEntityRef.java +++ b/engine/src/main/java/org/terasology/engine/network/internal/NetEntityRef.java @@ -3,11 +3,11 @@ package org.terasology.engine.network.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.LowLevelEntityManager; import org.terasology.engine.entitySystem.entity.internal.BaseEntityRef; import org.terasology.engine.network.NetworkComponent; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/network/internal/NetworkSystemImpl.java b/engine/src/main/java/org/terasology/engine/network/internal/NetworkSystemImpl.java index b000fa4916..06f65a828a 100644 --- a/engine/src/main/java/org/terasology/engine/network/internal/NetworkSystemImpl.java +++ b/engine/src/main/java/org/terasology/engine/network/internal/NetworkSystemImpl.java @@ -36,7 +36,6 @@ import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.core.module.StandardModuleExtension; import org.terasology.engine.core.subsystem.common.hibernation.HibernationManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.internal.EntityChangeSubscriber; @@ -71,6 +70,7 @@ import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.world.chunks.remoteChunkProvider.RemoteChunkProvider; import org.terasology.engine.world.generator.WorldGenerator; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.nui.Color; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; diff --git a/engine/src/main/java/org/terasology/engine/network/internal/ServerImpl.java b/engine/src/main/java/org/terasology/engine/network/internal/ServerImpl.java index 283522b71b..c3139d4f6d 100644 --- a/engine/src/main/java/org/terasology/engine/network/internal/ServerImpl.java +++ b/engine/src/main/java/org/terasology/engine/network/internal/ServerImpl.java @@ -20,7 +20,6 @@ import org.slf4j.LoggerFactory; import org.terasology.engine.core.EngineTime; import org.terasology.engine.core.Time; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.event.Event; @@ -45,6 +44,7 @@ import org.terasology.engine.world.chunks.blockdata.ExtraBlockDataManager; import org.terasology.engine.world.chunks.internal.ChunkSerializer; import org.terasology.engine.world.chunks.remoteChunkProvider.RemoteChunkProvider; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.DeserializationException; import org.terasology.persistence.typeHandling.SerializationException; import org.terasology.protobuf.EntityData; diff --git a/engine/src/main/java/org/terasology/engine/network/serialization/ClientComponentFieldCheck.java b/engine/src/main/java/org/terasology/engine/network/serialization/ClientComponentFieldCheck.java index 07d8d7ac29..2502260bbd 100644 --- a/engine/src/main/java/org/terasology/engine/network/serialization/ClientComponentFieldCheck.java +++ b/engine/src/main/java/org/terasology/engine/network/serialization/ClientComponentFieldCheck.java @@ -3,11 +3,11 @@ package org.terasology.engine.network.serialization; -import org.terasology.reflection.metadata.ClassMetadata; -import org.terasology.reflection.metadata.FieldMetadata; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ReplicatedFieldMetadata; import org.terasology.engine.persistence.serializers.FieldSerializeCheck; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.reflection.metadata.ClassMetadata; +import org.terasology.reflection.metadata.FieldMetadata; /** * Determines which fields should be serialized and deserialized by the client. diff --git a/engine/src/main/java/org/terasology/engine/network/serialization/NetComponentSerializeCheck.java b/engine/src/main/java/org/terasology/engine/network/serialization/NetComponentSerializeCheck.java index 31d9a426d2..a0e847e8ee 100644 --- a/engine/src/main/java/org/terasology/engine/network/serialization/NetComponentSerializeCheck.java +++ b/engine/src/main/java/org/terasology/engine/network/serialization/NetComponentSerializeCheck.java @@ -3,9 +3,9 @@ package org.terasology.engine.network.serialization; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.persistence.serializers.ComponentSerializeCheck; +import org.terasology.gestalt.entitysystem.component.Component; /** * Determines which components should be serialized over the network - only replicated components. diff --git a/engine/src/main/java/org/terasology/engine/network/serialization/ServerComponentFieldCheck.java b/engine/src/main/java/org/terasology/engine/network/serialization/ServerComponentFieldCheck.java index eac5f1fc5a..6e301dcab5 100644 --- a/engine/src/main/java/org/terasology/engine/network/serialization/ServerComponentFieldCheck.java +++ b/engine/src/main/java/org/terasology/engine/network/serialization/ServerComponentFieldCheck.java @@ -3,13 +3,13 @@ package org.terasology.engine.network.serialization; -import org.terasology.reflection.metadata.ClassMetadata; -import org.terasology.reflection.metadata.FieldMetadata; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ReplicatedFieldMetadata; import org.terasology.engine.network.FieldReplicateType; import org.terasology.engine.network.ReplicationCheck; import org.terasology.engine.persistence.serializers.FieldSerializeCheck; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.reflection.metadata.ClassMetadata; +import org.terasology.reflection.metadata.FieldMetadata; /** * Determines which fields should be sent and received by the server diff --git a/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManager.java b/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManager.java index 812d37a136..7a49ab2939 100644 --- a/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManager.java +++ b/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManager.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.rendering.ParticleRenderingData; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import java.util.stream.Stream; diff --git a/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManagerImpl.java b/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManagerImpl.java index d75c1b7a7d..8587318ff0 100644 --- a/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManagerImpl.java +++ b/engine/src/main/java/org/terasology/engine/particles/ParticleSystemManagerImpl.java @@ -3,7 +3,6 @@ package org.terasology.engine.particles; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent; import org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent; @@ -13,7 +12,6 @@ import org.terasology.engine.entitySystem.systems.RegisterSystem; import org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem; import org.terasology.engine.logic.location.LocationComponent; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.components.ParticleEmitterComponent; import org.terasology.engine.particles.events.ParticleSystemUpdateEvent; import org.terasology.engine.particles.rendering.ParticleRenderingData; @@ -22,6 +20,8 @@ import org.terasology.engine.physics.Physics; import org.terasology.engine.registry.In; import org.terasology.engine.registry.Share; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; diff --git a/engine/src/main/java/org/terasology/engine/particles/components/ParticleDataSpriteComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/ParticleDataSpriteComponent.java index 8b520a7706..0214cb782e 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/ParticleDataSpriteComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/ParticleDataSpriteComponent.java @@ -3,13 +3,13 @@ package org.terasology.engine.particles.components; import org.joml.Vector2f; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.rendering.assets.texture.Texture; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; @API -public class ParticleDataSpriteComponent implements Component { +public class ParticleDataSpriteComponent implements Component { /** * This system's particle texture */ @@ -19,4 +19,10 @@ public class ParticleDataSpriteComponent implements Component { * This system's particle texture size, in percents x: [0.0, 1.0], y: [0.0, 1.0] */ public Vector2f textureSize = new Vector2f(1.0f, 1.0f); + + @Override + public void copyFrom(ParticleDataSpriteComponent other) { + this.texture = other.texture; + this.textureSize = new Vector2f(other.textureSize); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/ParticleEmitterComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/ParticleEmitterComponent.java index 77fc0ddadd..5bfab104da 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/ParticleEmitterComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/ParticleEmitterComponent.java @@ -2,13 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.components; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.logic.location.LocationComponent; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.ParticlePool; import org.terasology.engine.particles.functions.affectors.AffectorFunction; import org.terasology.engine.particles.functions.generators.GeneratorFunction; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import java.util.LinkedHashMap; import java.util.Map; @@ -25,7 +25,7 @@ * See ParticleDataSpriteComponent and SpriteParticleRenderer for an example. */ @API -public class ParticleEmitterComponent implements Component { +public class ParticleEmitterComponent implements Component { public static final int INFINITE_PARTICLE_SPAWNS = -1; public static final int INDEFINITE_EMITTER_LIFETIME = -1; @@ -110,4 +110,26 @@ public class ParticleEmitterComponent implements Component { * Allows checking only some particles each update since it's a heavy operation. */ public int collisionUpdateIteration; + + @Override + public void copyFrom(ParticleEmitterComponent other) { + this.maxParticles = other.maxParticles; + this.particleCollision = other.particleCollision; + this.spawnRateMax = other.spawnRateMax; + this.spawnRateMin = other.spawnRateMin; + this.enabled = other.enabled; + this.lifeTime = other.lifeTime; + this.particleSpawnsLeft = other.particleSpawnsLeft; + this.destroyEntityWhenDead = other.destroyEntityWhenDead; + this.ownerEntity = other.ownerEntity; + this.particlePool = other.particlePool; + this.generatorFunctionMap.clear(); + this.generatorFunctionMap.putAll(other.generatorFunctionMap); + this.affectorFunctionMap.clear(); + this.affectorFunctionMap.putAll(other.affectorFunctionMap); + this.locationComponent = new LocationComponent(); + this.locationComponent.copyFrom(other.locationComponent); // TODO check this + this.nextEmission = other.nextEmission; + this.collisionUpdateIteration = other.collisionUpdateIteration; + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/affectors/AccelerationAffectorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/affectors/AccelerationAffectorComponent.java index 15088f43c6..d6930331b1 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/affectors/AccelerationAffectorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/affectors/AccelerationAffectorComponent.java @@ -3,13 +3,13 @@ package org.terasology.engine.particles.components.affectors; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; @API -public class AccelerationAffectorComponent implements Component { +public class AccelerationAffectorComponent implements Component { @Replicate public Vector3f acceleration; @@ -21,4 +21,9 @@ public AccelerationAffectorComponent() { public AccelerationAffectorComponent(Vector3f acceleration) { this.acceleration = acceleration; } + + @Override + public void copyFrom(AccelerationAffectorComponent other) { + this.acceleration = new Vector3f(other.acceleration); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/affectors/VelocityAffectorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/affectors/VelocityAffectorComponent.java index 0d1bb366e1..e113b4962c 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/affectors/VelocityAffectorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/affectors/VelocityAffectorComponent.java @@ -2,11 +2,10 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.components.affectors; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; import org.terasology.gestalt.module.sandbox.API; - @API -public class VelocityAffectorComponent implements Component { +public class VelocityAffectorComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/ColorRangeGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/ColorRangeGeneratorComponent.java index ab54680661..53777b4d5a 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/ColorRangeGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/ColorRangeGeneratorComponent.java @@ -3,12 +3,12 @@ package org.terasology.engine.particles.components.generators; import org.joml.Vector4f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; @API -public class ColorRangeGeneratorComponent implements Component { +public class ColorRangeGeneratorComponent implements Component { public Vector4f minColorComponents; public Vector4f maxColorComponents; @@ -22,4 +22,10 @@ public ColorRangeGeneratorComponent() { minColorComponents = new Vector4f(); maxColorComponents = new Vector4f(); } + + @Override + public void copyFrom(ColorRangeGeneratorComponent other) { + this.minColorComponents = new Vector4f(other.minColorComponents); + this.maxColorComponents = new Vector4f(other.maxColorComponents); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/EnergyRangeGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/EnergyRangeGeneratorComponent.java index 4b1323028c..4e327f5d94 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/EnergyRangeGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/EnergyRangeGeneratorComponent.java @@ -2,12 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.components.generators; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; @API -public class EnergyRangeGeneratorComponent implements Component { +public class EnergyRangeGeneratorComponent implements Component { public float minEnergy = 100.0f; public float maxEnergy = 100.0f; @@ -18,4 +18,10 @@ public EnergyRangeGeneratorComponent(final float minEnergy, final float maxEnerg public EnergyRangeGeneratorComponent() { } + + @Override + public void copyFrom(EnergyRangeGeneratorComponent other) { + this.minEnergy = other.minEnergy; + this.maxEnergy = other.maxEnergy; + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/PositionRangeGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/PositionRangeGeneratorComponent.java index 305c323ee0..66a209a10b 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/PositionRangeGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/PositionRangeGeneratorComponent.java @@ -3,12 +3,12 @@ package org.terasology.engine.particles.components.generators; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; @API -public class PositionRangeGeneratorComponent implements Component { +public class PositionRangeGeneratorComponent implements Component { public Vector3f minPosition; public Vector3f maxPosition; @@ -22,4 +22,10 @@ public PositionRangeGeneratorComponent() { minPosition = new Vector3f(); maxPosition = new Vector3f(); } + + @Override + public void copyFrom(PositionRangeGeneratorComponent other) { + this.minPosition = new Vector3f(other.minPosition); + this.maxPosition = new Vector3f(other.maxPosition); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/ScaleRangeGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/ScaleRangeGeneratorComponent.java index 2c6ec90e4c..7bfea47033 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/ScaleRangeGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/ScaleRangeGeneratorComponent.java @@ -3,12 +3,12 @@ package org.terasology.engine.particles.components.generators; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; @API -public class ScaleRangeGeneratorComponent implements Component { +public class ScaleRangeGeneratorComponent implements Component { public Vector3f minScale; public Vector3f maxScale; @@ -21,4 +21,10 @@ public ScaleRangeGeneratorComponent() { minScale = new Vector3f(); maxScale = new Vector3f(); } + + @Override + public void copyFrom(ScaleRangeGeneratorComponent other) { + this.minScale = new Vector3f(other.minScale); + this.maxScale = new Vector3f(other.maxScale); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/TextureOffsetGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/TextureOffsetGeneratorComponent.java index 2d15709bdb..5e37ff8000 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/TextureOffsetGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/TextureOffsetGeneratorComponent.java @@ -4,19 +4,20 @@ import org.joml.Vector2f; import org.joml.Vector2i; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.rendering.assets.texture.Texture; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; import java.util.LinkedList; import java.util.List; import java.util.function.Function; +import java.util.stream.Collectors; /** * Generator used to choose a particle's textureOffset (from a tile-map texture) */ @API -public class TextureOffsetGeneratorComponent implements Component { +public class TextureOffsetGeneratorComponent implements Component { public List validOffsets; public TextureOffsetGeneratorComponent() { @@ -60,4 +61,11 @@ public TextureOffsetGeneratorComponent(final Texture atlas, final Vector2i atlas this.validOffsets.add(absolute2Relative.apply(offset)); } } + + @Override + public void copyFrom(TextureOffsetGeneratorComponent other) { + this.validOffsets = other.validOffsets.stream() + .map(Vector2f::new) + .collect(Collectors.toList()); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/components/generators/VelocityRangeGeneratorComponent.java b/engine/src/main/java/org/terasology/engine/particles/components/generators/VelocityRangeGeneratorComponent.java index 69c884d511..e479f3cb02 100644 --- a/engine/src/main/java/org/terasology/engine/particles/components/generators/VelocityRangeGeneratorComponent.java +++ b/engine/src/main/java/org/terasology/engine/particles/components/generators/VelocityRangeGeneratorComponent.java @@ -3,7 +3,7 @@ package org.terasology.engine.particles.components.generators; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.sandbox.API; /** @@ -11,7 +11,7 @@ * Upon generation sets particle velocity at random between minVelocity and maxVelocity. */ @API -public class VelocityRangeGeneratorComponent implements Component { +public class VelocityRangeGeneratorComponent implements Component { public Vector3f minVelocity; public Vector3f maxVelocity; @@ -24,4 +24,10 @@ public VelocityRangeGeneratorComponent() { this.minVelocity = new Vector3f(); this.maxVelocity = new Vector3f(); } + + @Override + public void copyFrom(VelocityRangeGeneratorComponent other) { + this.minVelocity = new Vector3f(other.minVelocity); + this.maxVelocity = new Vector3f(other.maxVelocity); + } } diff --git a/engine/src/main/java/org/terasology/engine/particles/functions/affectors/AffectorFunction.java b/engine/src/main/java/org/terasology/engine/particles/functions/affectors/AffectorFunction.java index 2f1eb910b9..bc78f12043 100644 --- a/engine/src/main/java/org/terasology/engine/particles/functions/affectors/AffectorFunction.java +++ b/engine/src/main/java/org/terasology/engine/particles/functions/affectors/AffectorFunction.java @@ -2,12 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.functions.affectors; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.ParticleData; import org.terasology.engine.particles.ParticleDataMask; import org.terasology.engine.particles.functions.ParticleSystemFunction; import org.terasology.engine.utilities.random.Random; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; /** * A affector function is called on a particle's data when it is updated to set its fields (Ex. Apply a force to a particle). diff --git a/engine/src/main/java/org/terasology/engine/particles/functions/generators/GeneratorFunction.java b/engine/src/main/java/org/terasology/engine/particles/functions/generators/GeneratorFunction.java index da9ad2afc6..71a4fbd97d 100644 --- a/engine/src/main/java/org/terasology/engine/particles/functions/generators/GeneratorFunction.java +++ b/engine/src/main/java/org/terasology/engine/particles/functions/generators/GeneratorFunction.java @@ -2,12 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.functions.generators; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.ParticleData; import org.terasology.engine.particles.ParticleDataMask; import org.terasology.engine.particles.functions.ParticleSystemFunction; import org.terasology.engine.utilities.random.Random; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; /** * A generator function is called on a particle's data when it is created to set its fields. diff --git a/engine/src/main/java/org/terasology/engine/particles/rendering/ParticleRenderingData.java b/engine/src/main/java/org/terasology/engine/particles/rendering/ParticleRenderingData.java index 92189e4e8b..0e0aada992 100644 --- a/engine/src/main/java/org/terasology/engine/particles/rendering/ParticleRenderingData.java +++ b/engine/src/main/java/org/terasology/engine/particles/rendering/ParticleRenderingData.java @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.particles.rendering; -import org.terasology.engine.entitySystem.Component; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.particles.ParticlePool; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; @API diff --git a/engine/src/main/java/org/terasology/engine/particles/updating/ParticleUpdaterImpl.java b/engine/src/main/java/org/terasology/engine/particles/updating/ParticleUpdaterImpl.java index 4dafb6de18..ff68c0e6bf 100644 --- a/engine/src/main/java/org/terasology/engine/particles/updating/ParticleUpdaterImpl.java +++ b/engine/src/main/java/org/terasology/engine/particles/updating/ParticleUpdaterImpl.java @@ -10,10 +10,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; -import org.terasology.math.TeraMath; -import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.engine.particles.ParticleDataMask; import org.terasology.engine.particles.ParticlePool; import org.terasology.engine.particles.components.ParticleEmitterComponent; @@ -26,6 +23,9 @@ import org.terasology.engine.physics.StandardCollisionGroup; import org.terasology.engine.utilities.ReflectionUtil; import org.terasology.engine.utilities.random.FastRandom; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.ModuleEnvironment; +import org.terasology.math.TeraMath; import java.lang.reflect.Type; import java.util.Collection; diff --git a/engine/src/main/java/org/terasology/engine/persistence/WorldDumper.java b/engine/src/main/java/org/terasology/engine/persistence/WorldDumper.java index 6cd7644f2d..d4f20c4aa0 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/WorldDumper.java +++ b/engine/src/main/java/org/terasology/engine/persistence/WorldDumper.java @@ -3,12 +3,12 @@ package org.terasology.engine.persistence; import org.terasology.engine.core.TerasologyConstants; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.persistence.serializers.EntityDataJSONFormat; import org.terasology.engine.persistence.serializers.PrefabSerializer; import org.terasology.engine.persistence.serializers.WorldSerializer; import org.terasology.engine.persistence.serializers.WorldSerializerImpl; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.io.BufferedWriter; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/DelayedEntityRef.java b/engine/src/main/java/org/terasology/engine/persistence/internal/DelayedEntityRef.java index 03bbf13813..4593f9ef8a 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/DelayedEntityRef.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/DelayedEntityRef.java @@ -2,11 +2,11 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.persistence.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityDelta.java b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityDelta.java index b0e765bea4..76f2248604 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityDelta.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityDelta.java @@ -4,7 +4,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; import java.util.Set; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityRestorer.java b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityRestorer.java index ab874f68d7..c4c9cd3bae 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityRestorer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityRestorer.java @@ -3,12 +3,12 @@ package org.terasology.engine.persistence.internal; import com.google.common.collect.Maps; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.persistence.serializers.EntitySerializer; import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/EntitySetDeltaRecorder.java b/engine/src/main/java/org/terasology/engine/persistence/internal/EntitySetDeltaRecorder.java index 2d929c9169..9ec5d98359 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/EntitySetDeltaRecorder.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/EntitySetDeltaRecorder.java @@ -7,10 +7,10 @@ import gnu.trove.map.hash.TLongObjectHashMap; import gnu.trove.set.TLongSet; import gnu.trove.set.hash.TLongHashSet; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityStorer.java b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityStorer.java index 2f37667cb6..f03ea649f7 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/EntityStorer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/EntityStorer.java @@ -4,7 +4,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.internal.OwnershipHelper; @@ -12,6 +11,7 @@ import org.terasology.engine.persistence.serializers.EntitySerializer; import org.terasology.engine.persistence.serializers.FieldSerializeCheck; import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreBuilder.java b/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreBuilder.java index 3fd3e3e138..3be0e77cfa 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreBuilder.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreBuilder.java @@ -3,7 +3,6 @@ package org.terasology.engine.persistence.internal; import com.google.common.collect.Maps; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; @@ -11,6 +10,7 @@ import org.terasology.engine.persistence.serializers.EntitySerializer; import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; import org.terasology.engine.persistence.serializers.PrefabSerializer; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.util.HashSet; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreLoader.java b/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreLoader.java index f2858c19d9..7c6f2a8630 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreLoader.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/GlobalStoreLoader.java @@ -5,22 +5,22 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; -import org.terasology.engine.utilities.Assets; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.core.SimpleUri; -import org.terasology.engine.entitySystem.Component; +import org.terasology.engine.core.module.ModuleContext; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; import org.terasology.engine.entitySystem.prefab.PrefabManager; +import org.terasology.engine.persistence.serializers.EntitySerializer; +import org.terasology.engine.persistence.serializers.PersistenceComponentSerializeCheck; +import org.terasology.engine.persistence.serializers.PrefabSerializer; +import org.terasology.engine.utilities.Assets; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.gestalt.module.ModuleEnvironment; -import org.terasology.engine.core.module.ModuleContext; -import org.terasology.engine.persistence.serializers.EntitySerializer; -import org.terasology.engine.persistence.serializers.PrefabSerializer; import org.terasology.protobuf.EntityData; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/ReadWriteStorageManager.java b/engine/src/main/java/org/terasology/engine/persistence/internal/ReadWriteStorageManager.java index 5a9a4f65ca..25631ce3f2 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/ReadWriteStorageManager.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/ReadWriteStorageManager.java @@ -16,7 +16,6 @@ import org.terasology.engine.core.PathManager; import org.terasology.engine.core.Time; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.internal.EntityChangeSubscriber; @@ -50,6 +49,7 @@ import org.terasology.engine.world.generator.WorldConfigurator; import org.terasology.engine.world.generator.WorldGenerator; import org.terasology.engine.world.internal.WorldInfo; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; diff --git a/engine/src/main/java/org/terasology/engine/persistence/internal/SaveTransaction.java b/engine/src/main/java/org/terasology/engine/persistence/internal/SaveTransaction.java index 541ce506ed..b8512e9c46 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/internal/SaveTransaction.java +++ b/engine/src/main/java/org/terasology/engine/persistence/internal/SaveTransaction.java @@ -10,7 +10,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.PathManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.game.GameManifest; @@ -23,6 +22,7 @@ import org.terasology.engine.utilities.concurrency.AbstractTask; import org.terasology.engine.world.chunks.Chunks; import org.terasology.engine.world.chunks.internal.ChunkImpl; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.io.BufferedOutputStream; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializeCheck.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializeCheck.java index 160d6d24d6..30f413eec6 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializeCheck.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializeCheck.java @@ -3,9 +3,9 @@ package org.terasology.engine.persistence.serializers; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.internal.EntityInfoComponent; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; +import org.terasology.gestalt.entitysystem.component.Component; /** * Interface for checks as whether a component should be serialized diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializer.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializer.java index 2ef599a75b..f458f84674 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/ComponentSerializer.java @@ -10,12 +10,12 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.metadata.ReplicatedFieldMetadata; import org.terasology.engine.persistence.typeHandling.protobuf.ProtobufPersistedData; import org.terasology.engine.persistence.typeHandling.protobuf.ProtobufPersistedDataSerializer; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.persistence.typeHandling.PersistedData; import org.terasology.persistence.typeHandling.Serializer; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/EntitySerializer.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/EntitySerializer.java index 55197862e8..d76d75cea3 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/EntitySerializer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/EntitySerializer.java @@ -5,7 +5,6 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.entity.internal.EntityInfoComponent; @@ -14,6 +13,7 @@ import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabManager; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; import org.terasology.protobuf.EntityData; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/NetworkEntitySerializer.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/NetworkEntitySerializer.java index 29defc6538..4d1a78492a 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/NetworkEntitySerializer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/NetworkEntitySerializer.java @@ -12,7 +12,6 @@ import com.google.protobuf.ByteString; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.MutableComponentContainer; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityRef; @@ -23,6 +22,7 @@ import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.persistence.typeHandling.protobuf.ProtobufPersistedData; import org.terasology.engine.persistence.typeHandling.protobuf.ProtobufPersistedDataSerializer; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.PersistedData; import org.terasology.persistence.typeHandling.Serializer; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/PersistenceComponentSerializeCheck.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/PersistenceComponentSerializeCheck.java index 2268369027..498f408d6d 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/PersistenceComponentSerializeCheck.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/PersistenceComponentSerializeCheck.java @@ -3,8 +3,8 @@ package org.terasology.engine.persistence.serializers; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; +import org.terasology.gestalt.entitysystem.component.Component; public class PersistenceComponentSerializeCheck implements ComponentSerializeCheck { @Override diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/PrefabSerializer.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/PrefabSerializer.java index 4bb8c6d54a..b42865e041 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/PrefabSerializer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/PrefabSerializer.java @@ -6,12 +6,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.module.ModuleContext; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.entitySystem.prefab.PrefabData; import org.terasology.engine.utilities.Assets; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.persistence.typeHandling.TypeHandlerLibrary; import org.terasology.protobuf.EntityData; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializer.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializer.java index 746c14e463..8009c5c70e 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializer.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializer.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.persistence.serializers; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializerImpl.java b/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializerImpl.java index a6ff384f0d..6b2cecdf94 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializerImpl.java +++ b/engine/src/main/java/org/terasology/engine/persistence/serializers/WorldSerializerImpl.java @@ -10,7 +10,6 @@ import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.module.ModuleContext; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; @@ -21,6 +20,7 @@ import org.terasology.engine.registry.CoreRegistry; import org.terasology.engine.utilities.Assets; import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.protobuf.EntityData; import java.util.Collection; diff --git a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java index 8439b56537..85cbbfee70 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java +++ b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/TypeHandlerLibraryImpl.java @@ -13,13 +13,11 @@ import org.joml.Vector4ic; import org.reflections.Reflections; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.math.IntegerRange; import org.terasology.engine.persistence.typeHandling.extensionTypes.ChunkMeshTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.ColorTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.ColorcTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.NameTypeHandler; -import org.terasology.engine.persistence.typeHandling.extensionTypes.PrefabTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.TextureRegionTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.UITextureRegionTypeHandler; import org.terasology.engine.persistence.typeHandling.extensionTypes.factories.AssetTypeHandlerFactory; @@ -53,11 +51,11 @@ import org.terasology.engine.world.block.BlockArea; import org.terasology.engine.world.block.BlockAreac; import org.terasology.engine.world.block.BlockRegion; +import org.terasology.gestalt.naming.Name; import org.terasology.joml.geom.AABBf; import org.terasology.joml.geom.AABBi; import org.terasology.joml.geom.Rectanglef; import org.terasology.joml.geom.Rectanglei; -import org.terasology.gestalt.naming.Name; import org.terasology.nui.Color; import org.terasology.nui.Colorc; import org.terasology.nui.UITextureRegion; @@ -148,7 +146,6 @@ private static void populateWithDefaultHandlers(TypeHandlerLibrary serialization serializationLibrary.addTypeHandler(Quaternionf.class, new QuaternionfTypeHandler()); serializationLibrary.addTypeHandler(Quaternionfc.class, new QuaternionfcTypeHandler()); - serializationLibrary.addTypeHandler(Prefab.class, new PrefabTypeHandler()); serializationLibrary.addTypeHandler(IntegerRange.class, new IntegerRangeHandler()); } diff --git a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/ComponentClassTypeHandler.java b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/ComponentClassTypeHandler.java index 1213c5d8a9..33251760a2 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/ComponentClassTypeHandler.java +++ b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/ComponentClassTypeHandler.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.persistence.typeHandling.extensionTypes; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.StringRepresentationTypeHandler; import org.terasology.persistence.typeHandling.TypeHandlerContext; diff --git a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/PrefabTypeHandler.java b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/PrefabTypeHandler.java deleted file mode 100644 index ab003475a7..0000000000 --- a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/PrefabTypeHandler.java +++ /dev/null @@ -1,30 +0,0 @@ -// Copyright 2021 The Terasology Foundation -// SPDX-License-Identifier: Apache-2.0 - -package org.terasology.engine.persistence.typeHandling.extensionTypes; - -import org.terasology.engine.entitySystem.prefab.Prefab; -import org.terasology.engine.utilities.Assets; -import org.terasology.persistence.typeHandling.StringRepresentationTypeHandler; - -public class PrefabTypeHandler extends StringRepresentationTypeHandler { - - public PrefabTypeHandler() { - } - - @Override - public String getAsString(Prefab item) { - if (item == null) { - return ""; - } - return item.getName(); - } - - @Override - public Prefab getFromString(String representation) { - if (representation == null) { - return null; - } - return Assets.getPrefab(representation).orElse(null); - } -} diff --git a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/factories/ComponentClassTypeHandlerFactory.java b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/factories/ComponentClassTypeHandlerFactory.java index 6d1b017968..dd179c613c 100644 --- a/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/factories/ComponentClassTypeHandlerFactory.java +++ b/engine/src/main/java/org/terasology/engine/persistence/typeHandling/extensionTypes/factories/ComponentClassTypeHandlerFactory.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.persistence.typeHandling.extensionTypes.factories; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.persistence.typeHandling.extensionTypes.ComponentClassTypeHandler; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.persistence.typeHandling.SpecificTypeHandlerFactory; import org.terasology.persistence.typeHandling.TypeHandler; import org.terasology.persistence.typeHandling.TypeHandlerContext; diff --git a/engine/src/main/java/org/terasology/engine/physics/components/RigidBodyComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/RigidBodyComponent.java index 76efd9331b..16aed7534d 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/RigidBodyComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/RigidBodyComponent.java @@ -4,18 +4,17 @@ package org.terasology.engine.physics.components; import com.google.common.collect.Lists; - import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; import org.terasology.engine.physics.CollisionGroup; import org.terasology.engine.physics.StandardCollisionGroup; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; @ForceBlockActive -public class RigidBodyComponent implements Component { +public class RigidBodyComponent implements Component { @Replicate public float mass = 10.0f; @Replicate @@ -34,8 +33,8 @@ public class RigidBodyComponent implements Component { public float friction = 0.5f; /** - * The ratio of the relative velocity after impact to the relative velocity before the impact of two colliding bodies, - * equal to 1 for an elastic collision and 0 for an inelastic collision. + * The ratio of the relative velocity after impact to the relative velocity before the impact of two colliding + * bodies, equal to 1 for an elastic collision and 0 for an inelastic collision. */ @Replicate public float restitution = 0f; @@ -47,5 +46,20 @@ public class RigidBodyComponent implements Component { public CollisionGroup collisionGroup = StandardCollisionGroup.DEFAULT; @Replicate public List collidesWith = - Lists.newArrayList(StandardCollisionGroup.DEFAULT, StandardCollisionGroup.WORLD, StandardCollisionGroup.KINEMATIC); + Lists.newArrayList(StandardCollisionGroup.DEFAULT, StandardCollisionGroup.WORLD, + StandardCollisionGroup.KINEMATIC); + + @Override + public void copyFrom(RigidBodyComponent other) { + this.mass = other.mass; + this.kinematic = other.kinematic; + this.velocity = new Vector3f(other.velocity); + this.angularFactor = new Vector3f(other.angularFactor); + this.linearFactor = new Vector3f(other.linearFactor); + this.friction = other.friction; + this.restitution = other.restitution; + this.angularVelocity = new Vector3f(other.angularVelocity); + this.collisionGroup = other.collisionGroup; + this.collidesWith = Lists.newArrayList(other.collidesWith); + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/TriggerComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/TriggerComponent.java index 4d4e73ac8d..91cb02a1c2 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/TriggerComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/TriggerComponent.java @@ -4,19 +4,25 @@ package org.terasology.engine.physics.components; import com.google.common.collect.Lists; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; import org.terasology.engine.physics.CollisionGroup; import org.terasology.engine.physics.StandardCollisionGroup; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; @ForceBlockActive -public class TriggerComponent implements Component { +public class TriggerComponent implements Component { @Replicate public CollisionGroup collisionGroup = StandardCollisionGroup.SENSOR; @Replicate public List detectGroups = Lists.newArrayList(StandardCollisionGroup.DEFAULT); + + @Override + public void copyFrom(TriggerComponent other) { + this.collisionGroup = other.collisionGroup; + this.detectGroups = Lists.newArrayList(other.detectGroups); + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/shapes/BoxShapeComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/shapes/BoxShapeComponent.java index 54c72b960f..fa45697f2e 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/shapes/BoxShapeComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/shapes/BoxShapeComponent.java @@ -4,10 +4,15 @@ package org.terasology.engine.physics.components.shapes; import org.joml.Vector3f; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; -public class BoxShapeComponent implements Component { +public class BoxShapeComponent implements Component { @Replicate public Vector3f extents = new Vector3f(1, 1, 1); + + @Override + public void copyFrom(BoxShapeComponent other) { + this.extents = new Vector3f(other.extents); + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/shapes/CapsuleShapeComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/shapes/CapsuleShapeComponent.java index cc26c38445..071ac5b6fd 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/shapes/CapsuleShapeComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/shapes/CapsuleShapeComponent.java @@ -3,9 +3,15 @@ package org.terasology.engine.physics.components.shapes; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class CapsuleShapeComponent implements Component { +public class CapsuleShapeComponent implements Component { public float radius = 0.5f; public float height = 1.0f; + + @Override + public void copyFrom(CapsuleShapeComponent other) { + this.radius = other.radius; + this.height = other.height; + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/shapes/CylinderShapeComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/shapes/CylinderShapeComponent.java index d91b077e4d..edb4fb93c8 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/shapes/CylinderShapeComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/shapes/CylinderShapeComponent.java @@ -3,9 +3,15 @@ package org.terasology.engine.physics.components.shapes; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class CylinderShapeComponent implements Component { +public class CylinderShapeComponent implements Component { public float radius = 0.5f; public float height = 1.0f; + + @Override + public void copyFrom(CylinderShapeComponent other) { + this.radius = other.radius; + this.height = other.height; + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/shapes/HullShapeComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/shapes/HullShapeComponent.java index 43e440c518..a2015f282b 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/shapes/HullShapeComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/shapes/HullShapeComponent.java @@ -3,9 +3,14 @@ package org.terasology.engine.physics.components.shapes; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.rendering.assets.mesh.Mesh; +import org.terasology.gestalt.entitysystem.component.Component; -public class HullShapeComponent implements Component { +public class HullShapeComponent implements Component { public Mesh sourceMesh; + + @Override + public void copyFrom(HullShapeComponent other) { + this.sourceMesh = other.sourceMesh; + } } diff --git a/engine/src/main/java/org/terasology/engine/physics/components/shapes/SphereShapeComponent.java b/engine/src/main/java/org/terasology/engine/physics/components/shapes/SphereShapeComponent.java index ebdb3bd0c5..4121cb5511 100644 --- a/engine/src/main/java/org/terasology/engine/physics/components/shapes/SphereShapeComponent.java +++ b/engine/src/main/java/org/terasology/engine/physics/components/shapes/SphereShapeComponent.java @@ -3,8 +3,13 @@ package org.terasology.engine.physics.components.shapes; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class SphereShapeComponent implements Component { +public class SphereShapeComponent implements Component { public float radius = 0.5f; + + @Override + public void copyFrom(SphereShapeComponent other) { + this.radius = other.radius; + } } diff --git a/engine/src/main/java/org/terasology/engine/recording/EventSystemReplayImpl.java b/engine/src/main/java/org/terasology/engine/recording/EventSystemReplayImpl.java index d32b5a51a0..2ef30f75de 100644 --- a/engine/src/main/java/org/terasology/engine/recording/EventSystemReplayImpl.java +++ b/engine/src/main/java/org/terasology/engine/recording/EventSystemReplayImpl.java @@ -18,7 +18,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.core.PathManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.internal.EngineEntityManager; import org.terasology.engine.entitySystem.event.AbstractConsumableEvent; @@ -43,6 +42,7 @@ import org.terasology.engine.network.ServerEvent; import org.terasology.engine.world.block.BlockComponent; import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import java.lang.reflect.Method; import java.lang.reflect.Modifier; diff --git a/engine/src/main/java/org/terasology/engine/recording/RecordedEntityRef.java b/engine/src/main/java/org/terasology/engine/recording/RecordedEntityRef.java index 0c95343479..578dce16b8 100644 --- a/engine/src/main/java/org/terasology/engine/recording/RecordedEntityRef.java +++ b/engine/src/main/java/org/terasology/engine/recording/RecordedEntityRef.java @@ -2,12 +2,12 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.recording; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.LowLevelEntityManager; import org.terasology.engine.entitySystem.entity.internal.NullEntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.prefab.Prefab; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/recording/RecordedEvent.java b/engine/src/main/java/org/terasology/engine/recording/RecordedEvent.java index 490ccdafd0..14586d2e96 100644 --- a/engine/src/main/java/org/terasology/engine/recording/RecordedEvent.java +++ b/engine/src/main/java/org/terasology/engine/recording/RecordedEvent.java @@ -2,8 +2,8 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.recording; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.event.Event; +import org.terasology.gestalt.entitysystem.component.Component; /** * Saves a recorded event, the id of the entity it was sent against, the component it was sent with, the timestamp in diff --git a/engine/src/main/java/org/terasology/engine/recording/RecordingEventSystemDecorator.java b/engine/src/main/java/org/terasology/engine/recording/RecordingEventSystemDecorator.java index a90a977065..534aa14502 100644 --- a/engine/src/main/java/org/terasology/engine/recording/RecordingEventSystemDecorator.java +++ b/engine/src/main/java/org/terasology/engine/recording/RecordingEventSystemDecorator.java @@ -4,11 +4,11 @@ package org.terasology.engine.recording; import org.terasology.engine.core.bootstrap.eventSystem.AbstractEventSystemDecorator; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.event.Event; import org.terasology.engine.entitySystem.event.PendingEvent; import org.terasology.engine.entitySystem.event.internal.EventSystem; +import org.terasology.gestalt.entitysystem.component.Component; /** * Decorator for recording Events to Record&Replay subsystem. diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/ChunkMeshComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/ChunkMeshComponent.java index 8248dfc0c7..cf404ed510 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/ChunkMeshComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/ChunkMeshComponent.java @@ -11,7 +11,7 @@ * An entity that should be rendered as though it was a chunk. * Requires a LocationComponent as well in order to actually be rendered. */ -public class ChunkMeshComponent implements VisualComponent { +public class ChunkMeshComponent implements VisualComponent { @Replicate public ChunkMesh mesh; @Replicate @@ -25,4 +25,11 @@ public ChunkMeshComponent(ChunkMesh mesh, AABBf aabb) { this.mesh = mesh; this.aabb = aabb; } + + @Override + public void copyFrom(ChunkMeshComponent other) { + this.mesh = other.mesh; // TODO deep or shallow copy? + this.aabb = new AABBf(other.aabb); + this.animated = other.animated; + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/FloatingTextComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/FloatingTextComponent.java index f0f19a9459..a17196c791 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/FloatingTextComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/FloatingTextComponent.java @@ -7,10 +7,19 @@ /** * Makes the game render the specified text at the current location of the enitity. */ -public class FloatingTextComponent implements VisualComponent { +public class FloatingTextComponent implements VisualComponent { public String text; public Color textColor = Color.WHITE; public Color textShadowColor = Color.BLACK; public float scale = 1f; public boolean isOverlay; + + @Override + public void copyFrom(FloatingTextComponent other) { + this.text = other.text; + this.textColor = new Color(other.textColor); + this.textShadowColor = new Color(other.textShadowColor); + this.scale = other.scale; + this.isOverlay = other.isOverlay; + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/LightComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/LightComponent.java index c93f9adb3a..3e1e89891b 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/LightComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/LightComponent.java @@ -12,7 +12,7 @@ * By default the component is configured to act similarly to a placed torch block. */ // TODO: Split into multiple components? Point, Directional? -public final class LightComponent implements VisualComponent, ReplicationCheck { +public final class LightComponent implements VisualComponent, ReplicationCheck { public enum LightType { POINT, @@ -63,6 +63,19 @@ public enum LightType { public boolean simulateFading; + @Override + public void copyFrom(LightComponent other) { + this.lightColorDiffuse = new Vector3f(other.lightColorDiffuse); + this.lightColorAmbient = new Vector3f(other.lightColorAmbient); + this.lightDiffuseIntensity = other.lightDiffuseIntensity; + this.lightAmbientIntensity = other.lightAmbientIntensity; + this.lightSpecularPower = other.lightSpecularPower; + this.lightAttenuationRange = other.lightAttenuationRange; + this.lightAttenuationFalloff = other.lightAttenuationFalloff; + this.lightRenderingDistance = other.lightRenderingDistance; + this.lightType = other.lightType; + this.simulateFading = other.simulateFading; + } @Override public boolean shouldReplicate(FieldMetadata field, boolean initial, boolean toOwner) { diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/LightFadeComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/LightFadeComponent.java index a949e41b56..205a751353 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/LightFadeComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/LightFadeComponent.java @@ -4,7 +4,7 @@ import org.terasology.engine.network.Replicate; -public final class LightFadeComponent implements VisualComponent { +public final class LightFadeComponent implements VisualComponent { @Replicate public float targetDiffuseIntensity = 1.0f; @@ -21,4 +21,12 @@ public final class LightFadeComponent implements VisualComponent { @Replicate public float ambientFadeRate = 2.0f; + @Override + public void copyFrom(LightFadeComponent other) { + this.targetDiffuseIntensity = other.targetDiffuseIntensity; + this.targetAmbientIntensity = other.targetAmbientIntensity; + this.removeLightAfterFadeComplete = other.removeLightAfterFadeComplete; + this.diffuseFadeRate = other.diffuseFadeRate; + this.ambientFadeRate = other.ambientFadeRate; + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/MeshComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/MeshComponent.java index 959d8b30a1..f66b7d325b 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/MeshComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/MeshComponent.java @@ -2,14 +2,14 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.rendering.logic; -import org.terasology.engine.rendering.assets.material.Material; import org.terasology.engine.network.Replicate; -import org.terasology.nui.Color; +import org.terasology.engine.rendering.assets.material.Material; import org.terasology.engine.rendering.assets.mesh.Mesh; import org.terasology.engine.world.block.ForceBlockActive; +import org.terasology.nui.Color; @ForceBlockActive -public final class MeshComponent implements VisualComponent { +public final class MeshComponent implements VisualComponent { @Replicate public Mesh mesh; @@ -33,4 +33,13 @@ public final class MeshComponent implements VisualComponent { @Replicate public Color color = Color.WHITE; + @Override + public void copyFrom(MeshComponent other) { + this.mesh = other.mesh; + this.material = other.material; + this.translucent = other.translucent; + this.selfLuminance = other.selfLuminance; + this.hideFromOwner = other.hideFromOwner; + this.color = new Color(other.color); + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/RegionOutlineComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/RegionOutlineComponent.java index f8c05a3e3d..907ab48d92 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/RegionOutlineComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/RegionOutlineComponent.java @@ -8,8 +8,15 @@ /** * Entities with this component will cause a outline be drawn about the specified region in block coordinates. */ -public class RegionOutlineComponent implements VisualComponent { +public class RegionOutlineComponent implements VisualComponent { public Vector3i corner1; public Vector3i corner2; public Color color = new Color(Color.white); + + @Override + public void copyFrom(RegionOutlineComponent other) { + this.corner1 = new Vector3i(other.corner1); + this.corner2 = new Vector3i(other.corner2); + this.color = new Color(other.color); + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletalMeshComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletalMeshComponent.java index 17b2cabeec..66dc4302d8 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletalMeshComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletalMeshComponent.java @@ -4,22 +4,23 @@ package org.terasology.engine.rendering.logic; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import org.joml.Vector3f; import org.terasology.engine.entitySystem.Owns; import org.terasology.engine.entitySystem.entity.EntityRef; +import org.terasology.engine.network.Replicate; import org.terasology.engine.rendering.assets.animation.MeshAnimation; import org.terasology.engine.rendering.assets.material.Material; import org.terasology.engine.rendering.assets.skeletalmesh.SkeletalMesh; -import org.terasology.engine.network.Replicate; +import org.terasology.engine.world.block.ForceBlockActive; import org.terasology.nui.Color; import org.terasology.nui.properties.Range; -import org.terasology.engine.world.block.ForceBlockActive; import java.util.List; import java.util.Map; @ForceBlockActive -public class SkeletalMeshComponent implements VisualComponent { +public class SkeletalMeshComponent implements VisualComponent { @Replicate public SkeletalMesh mesh; @@ -59,4 +60,21 @@ public class SkeletalMeshComponent implements VisualComponent { @Replicate public Color color = Color.WHITE; + + @Override + public void copyFrom(SkeletalMeshComponent other) { + this.mesh = other.mesh; + this.material = other.material; + this.animation = other.animation; + this.loop = other.loop; + this.animationPool = Lists.newArrayList(other.animationPool); + this.animationRate = other.animationRate; + this.heightOffset = other.heightOffset; + this.boneEntities = Maps.newHashMap(other.boneEntities); + this.rootBone = other.rootBone; + this.animationTime = other.animationTime; + this.scale = new Vector3f(other.scale); + this.translate = new Vector3f(other.translate); + this.color = new Color(other.color); + } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletonRenderer.java b/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletonRenderer.java index 7469feded2..7720444907 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletonRenderer.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/SkeletonRenderer.java @@ -10,7 +10,7 @@ import org.joml.Vector3f; import org.joml.Vector3fc; import org.lwjgl.BufferUtils; -import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL33; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.engine.config.Config; @@ -29,26 +29,23 @@ import org.terasology.engine.rendering.assets.animation.MeshAnimation; import org.terasology.engine.rendering.assets.animation.MeshAnimationFrame; import org.terasology.engine.rendering.assets.material.Material; +import org.terasology.engine.rendering.assets.mesh.Mesh; +import org.terasology.engine.rendering.assets.mesh.StandardMeshData; +import org.terasology.engine.rendering.assets.mesh.resource.AllocationType; +import org.terasology.engine.rendering.assets.mesh.resource.DrawingMode; import org.terasology.engine.rendering.assets.skeletalmesh.Bone; import org.terasology.engine.rendering.opengl.OpenGLSkeletalMesh; import org.terasology.engine.rendering.world.WorldRenderer; import org.terasology.engine.utilities.Assets; +import org.terasology.gestalt.assets.management.AssetManager; import org.terasology.joml.geom.AABBf; +import org.terasology.nui.Color; import java.nio.FloatBuffer; import java.util.Arrays; import java.util.List; import java.util.Random; -import static org.lwjgl.opengl.GL11.GL_DEPTH_TEST; -import static org.lwjgl.opengl.GL11.glBegin; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; -import static org.lwjgl.opengl.GL11.glEnd; -import static org.lwjgl.opengl.GL11.glPopMatrix; -import static org.lwjgl.opengl.GL11.glPushMatrix; -import static org.lwjgl.opengl.GL11.glVertex3f; - @RegisterSystem(RegisterMode.CLIENT) public class SkeletonRenderer extends BaseComponentSystem implements RenderSystem, UpdateSubscriberSystem { @@ -60,11 +57,25 @@ public class SkeletonRenderer extends BaseComponentSystem implements RenderSyste @In private WorldRenderer worldRenderer; + @In + private AssetManager assetManager; + @In private Config config; + private StandardMeshData meshData = new StandardMeshData(DrawingMode.LINES, AllocationType.STREAM); + private Mesh mesh; + private Material material; + private Random random = new Random(); + @Override + public void initialise() { + super.initialise(); + mesh = Assets.generateAsset(meshData, Mesh.class); + material = assetManager.getAsset("engine:white", Material.class).get(); + } + @ReceiveEvent(components = {SkeletalMeshComponent.class, LocationComponent.class}) public void newSkeleton(OnActivatedComponent event, EntityRef entity) { SkeletalMeshComponent skeleton = entity.getComponent(SkeletalMeshComponent.class); @@ -303,82 +314,64 @@ public void renderOpaque() { @Override public void renderOverlay() { if (config.getRendering().getDebug().isRenderSkeletons()) { - glDisable(GL_DEPTH_TEST); + + meshData.reallocate(0, 0); + meshData.indices.rewind(); + meshData.position.rewind(); + meshData.color0.rewind(); + Vector3f cameraPosition = worldRenderer.getActiveCamera().getPosition(); - Material material = Assets.getMaterial("engine:white").get(); - material.setFloat("sunlight", 1.0f, true); - material.setFloat("blockLight", 1.0f, true); - material.setMatrix4("projectionMatrix", worldRenderer.getActiveCamera().getProjectionMatrix()); + Vector3f worldPos = new Vector3f(); + Vector3f worldPositionCameraSpace = new Vector3f(); + worldPos.sub(cameraPosition, worldPositionCameraSpace); + Matrix4f matrixCameraSpace = new Matrix4f().translationRotateScale(worldPositionCameraSpace, new Quaternionf(), 1.0f); + Matrix4f modelViewMatrix = new Matrix4f(worldRenderer.getActiveCamera().getViewMatrix()).mul(matrixCameraSpace); + material.setMatrix4("projectionMatrix", worldRenderer.getActiveCamera().getProjectionMatrix()); + material.setMatrix4("modelViewMatrix", modelViewMatrix, true); - FloatBuffer tempMatrixBuffer44 = BufferUtils.createFloatBuffer(16); - FloatBuffer tempMatrixBuffer33 = BufferUtils.createFloatBuffer(12); - + int index = 0; for (EntityRef entity : entityManager.getEntitiesWith(SkeletalMeshComponent.class, LocationComponent.class)) { - LocationComponent location = entity.getComponent(LocationComponent.class); - SkeletalMeshComponent meshComp = entity.getComponent(SkeletalMeshComponent.class); - if (meshComp.mesh == null) { + SkeletalMeshComponent skeletalMesh = entity.getComponent(SkeletalMeshComponent.class); + if (skeletalMesh.boneEntities == null) { continue; } - Vector3f worldPositionCameraSpace = new Vector3f(); - worldPositionCameraSpace.sub(worldPos, cameraPosition); - - //anew Quat4f(0, 0, 0, 1), worldPositionCameraSpace, 1); - Matrix4f matrixCameraSpace = new Matrix4f().translation(worldPositionCameraSpace); - - Matrix4f modelViewMatrix = worldRenderer.getActiveCamera().getViewMatrix().mul(matrixCameraSpace, new Matrix4f()); - modelViewMatrix.get(tempMatrixBuffer44); - material.setMatrix4("modelViewMatrix", tempMatrixBuffer44, true); - - modelViewMatrix.get3x3(new Matrix3f()).invert().get(tempMatrixBuffer33); - material.setMatrix3("normalMatrix", tempMatrixBuffer33, true); - - for (Bone bone : meshComp.mesh.getBones()) { - if (bone.getParentIndex() != -1) { - renderBone(meshComp.boneEntities.get(bone.getName())); + for (Bone bone : skeletalMesh.mesh.getBones()) { + Bone parentBone = bone.getParent(); + EntityRef boneEntity = skeletalMesh.boneEntities.get(bone.getName()); + if (parentBone == null) { + continue; } + + EntityRef boneParentEntity = skeletalMesh.boneEntities.get(parentBone.getName()); + + LocationComponent locCompA = boneEntity.getComponent(LocationComponent.class); + LocationComponent locCompB = boneParentEntity.getComponent(LocationComponent.class); + + Vector3f worldPosA = locCompA.getWorldPosition(new Vector3f()); + Vector3f worldPosB = locCompB.getWorldPosition(new Vector3f()); + + meshData.color0.put(Color.white); + meshData.color0.put(Color.white); + + meshData.position.put(worldPosA); + meshData.position.put(worldPosB); + + meshData.indices.putAll(new int[]{ + index, index + 1 + }); + + index += 2; } + } - glEnable(GL_DEPTH_TEST); - } - } - private void renderBoneOrientation(EntityRef boneEntity) { - LocationComponent loc = boneEntity.getComponent(LocationComponent.class); - if (loc == null) { - return; - } - glPushMatrix(); - Vector3f worldPosA = loc.getWorldPosition(new Vector3f()); - Quaternionf worldRot = loc.getWorldRotation(new Quaternionf()); - Vector3f offset = new Vector3f(0, 0, 0.1f); - worldRot.transform(offset); - offset.add(worldPosA); - - glBegin(GL11.GL_LINES); - glVertex3f(worldPosA.x, worldPosA.y, worldPosA.z); - glVertex3f(offset.x, offset.y, offset.z); - glEnd(); - - loc.getChildren().forEach(this::renderBoneOrientation); - glPopMatrix(); - } - - private void renderBone(EntityRef boneEntity) { - LocationComponent loc = boneEntity.getComponent(LocationComponent.class); - if (loc == null) { - return; - } - LocationComponent parentLoc = loc.getParent().getComponent(LocationComponent.class); - if (parentLoc != null) { - Vector3f worldPosA = loc.getWorldPosition(new Vector3f()); - Vector3f worldPosB = parentLoc.getWorldPosition(new Vector3f()); - - glBegin(GL11.GL_LINES); - glVertex3f(worldPosA.x, worldPosA.y, worldPosA.z); - glVertex3f(worldPosB.x, worldPosB.y, worldPosB.z); - glEnd(); + GL33.glDepthFunc(GL33.GL_ALWAYS); + material.enable(); + mesh.reload(meshData); + mesh.render(); + GL33.glDepthFunc(GL33.GL_LEQUAL); } } } diff --git a/engine/src/main/java/org/terasology/engine/rendering/logic/VisualComponent.java b/engine/src/main/java/org/terasology/engine/rendering/logic/VisualComponent.java index c29eff6bf5..a59a777233 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/logic/VisualComponent.java +++ b/engine/src/main/java/org/terasology/engine/rendering/logic/VisualComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.rendering.logic; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public interface VisualComponent extends Component { +public interface VisualComponent> extends Component { } diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/internal/LineRenderer.java b/engine/src/main/java/org/terasology/engine/rendering/nui/internal/LineRenderer.java index dfee8b0961..0c23f08a1e 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/internal/LineRenderer.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/internal/LineRenderer.java @@ -227,14 +227,14 @@ public static void draw(float x1, float y1, float x2, float y2, float width, Col lineMeshData.position.rewind(); lineMeshData.color0.rewind(); - lineMeshData.position.put(v1.set( x1 - rx + cx, y1 - ry + cy, 0.0f)); - lineMeshData.position.put(v1.set( x1 + rx + cx, y1 + ry + cy, 0.0f)); - lineMeshData.position.put(v1.set( x1 - tx - rx, y1 - ty - ry, 0.0f)); - lineMeshData.position.put(v1.set( x1 + tx + rx, y1 + ty + ry, 0.0f)); - lineMeshData.position.put(v1.set( x2 - rx - cx, y2 - ry - cy, 0.0f)); - lineMeshData.position.put(v1.set( x2 + rx - cx, y2 + ry - cy, 0.0f)); - lineMeshData.position.put(v1.set( x2 - tx - rx, y2 - ty - ry, 0.0f)); - lineMeshData.position.put(v1.set( x2 + tx + rx, y2 + ty + ry, 0.0f)); + lineMeshData.position.put(v1.set(x1 - rx + cx, y1 - ry + cy, 0.0f)); + lineMeshData.position.put(v1.set(x1 + rx + cx, y1 + ry + cy, 0.0f)); + lineMeshData.position.put(v1.set(x1 - tx - rx, y1 - ty - ry, 0.0f)); + lineMeshData.position.put(v1.set(x1 + tx + rx, y1 + ty + ry, 0.0f)); + lineMeshData.position.put(v1.set(x2 - rx - cx, y2 - ry - cy, 0.0f)); + lineMeshData.position.put(v1.set(x2 + rx - cx, y2 + ry - cy, 0.0f)); + lineMeshData.position.put(v1.set(x2 - tx - rx, y2 - ty - ry, 0.0f)); + lineMeshData.position.put(v1.set(x2 + tx + rx, y2 + ty + ry, 0.0f)); if (!alphaBlend) { lineMeshData.color0.put(c.set(v1.set(bRed, bGreen, bBlue))); diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/GameManifestProvider.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/GameManifestProvider.java index b8bba56a98..37f44b6b13 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/GameManifestProvider.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/GameManifestProvider.java @@ -10,13 +10,13 @@ import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.TerasologyConstants; import org.terasology.engine.core.module.ModuleManager; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.game.GameManifest; import org.terasology.engine.registry.In; import org.terasology.engine.rendering.nui.layers.mainMenu.savedGames.GameProvider; import org.terasology.engine.rendering.world.WorldSetupWrapper; import org.terasology.engine.world.internal.WorldInfo; import org.terasology.engine.world.time.WorldTime; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.Module; import org.terasology.gestalt.module.dependencyresolution.DependencyResolver; import org.terasology.gestalt.module.dependencyresolution.ResolutionResult; diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java index 96cf521b49..824afce801 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java @@ -5,26 +5,37 @@ import com.google.common.collect.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.core.module.ModuleManager; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.config.Config; import org.terasology.engine.context.Context; import org.terasology.engine.context.internal.ContextImpl; import org.terasology.engine.core.SimpleUri; import org.terasology.engine.core.bootstrap.EnvironmentSwitchHandler; -import org.terasology.engine.entitySystem.Component; +import org.terasology.engine.core.module.ModuleManager; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; +import org.terasology.engine.registry.CoreRegistry; +import org.terasology.engine.registry.In; import org.terasology.engine.rendering.assets.texture.Texture; import org.terasology.engine.rendering.assets.texture.TextureData; +import org.terasology.engine.rendering.nui.CoreScreenLayer; +import org.terasology.engine.rendering.nui.NUIManager; import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems; import org.terasology.engine.rendering.nui.layers.mainMenu.preview.FacetLayerPreview; import org.terasology.engine.rendering.nui.layers.mainMenu.preview.PreviewGenerator; +import org.terasology.engine.utilities.Assets; +import org.terasology.engine.world.generator.WorldConfigurator; +import org.terasology.engine.world.generator.WorldGenerator; +import org.terasology.engine.world.generator.internal.WorldGeneratorManager; +import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary; +import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary; +import org.terasology.engine.world.zones.Zone; +import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.gestalt.module.dependencyresolution.DependencyResolver; import org.terasology.gestalt.module.dependencyresolution.ResolutionResult; import org.terasology.gestalt.module.exceptions.UnresolvedDependencyException; import org.terasology.math.TeraMath; -import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.nui.WidgetUtil; import org.terasology.nui.databinding.Binding; import org.terasology.nui.layouts.PropertyLayout; @@ -39,17 +50,6 @@ import org.terasology.nui.widgets.UIText; import org.terasology.reflection.metadata.FieldMetadata; import org.terasology.reflection.reflect.ReflectFactory; -import org.terasology.engine.registry.CoreRegistry; -import org.terasology.engine.registry.In; -import org.terasology.engine.rendering.nui.CoreScreenLayer; -import org.terasology.engine.rendering.nui.NUIManager; -import org.terasology.engine.utilities.Assets; -import org.terasology.engine.world.generator.WorldConfigurator; -import org.terasology.engine.world.generator.WorldGenerator; -import org.terasology.engine.world.generator.internal.WorldGeneratorManager; -import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary; -import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary; -import org.terasology.engine.world.zones.Zone; import java.nio.ByteBuffer; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java index 1065d9f48a..7bb95ee29e 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/WorldSetupScreen.java @@ -2,15 +2,23 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.rendering.nui.layers.mainMenu; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.config.Config; import org.terasology.engine.context.Context; import org.terasology.engine.core.SimpleUri; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.metadata.ComponentLibrary; import org.terasology.engine.i18n.TranslationSystem; +import org.terasology.engine.registry.In; +import org.terasology.engine.rendering.nui.CoreScreenLayer; import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems; import org.terasology.engine.rendering.world.WorldSetupWrapper; +import org.terasology.engine.world.generator.UnresolvedWorldGeneratorException; +import org.terasology.engine.world.generator.WorldConfigurator; +import org.terasology.engine.world.generator.WorldGenerator; +import org.terasology.engine.world.generator.internal.WorldGeneratorManager; +import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary; +import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary; +import org.terasology.gestalt.assets.ResourceUrn; +import org.terasology.gestalt.entitysystem.component.Component; import org.terasology.gestalt.module.ModuleEnvironment; import org.terasology.gestalt.naming.Name; import org.terasology.nui.WidgetUtil; @@ -25,14 +33,6 @@ import org.terasology.nui.widgets.UIText; import org.terasology.reflection.metadata.FieldMetadata; import org.terasology.reflection.reflect.ReflectFactory; -import org.terasology.engine.registry.In; -import org.terasology.engine.rendering.nui.CoreScreenLayer; -import org.terasology.engine.world.generator.UnresolvedWorldGeneratorException; -import org.terasology.engine.world.generator.WorldConfigurator; -import org.terasology.engine.world.generator.WorldGenerator; -import org.terasology.engine.world.generator.internal.WorldGeneratorManager; -import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary; -import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary; import java.util.List; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/videoSettings/VideoSettingsScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/videoSettings/VideoSettingsScreen.java index 57464d62f5..82898f23c8 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/videoSettings/VideoSettingsScreen.java +++ b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/videoSettings/VideoSettingsScreen.java @@ -5,17 +5,20 @@ import com.google.common.collect.Lists; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.engine.config.Config; -import org.terasology.engine.core.GameEngine; import org.terasology.engine.core.Time; import org.terasology.engine.core.subsystem.DisplayDevice; import org.terasology.engine.core.subsystem.Resolution; import org.terasology.engine.i18n.TranslationSystem; +import org.terasology.engine.registry.CoreRegistry; +import org.terasology.engine.registry.In; +import org.terasology.engine.rendering.ShaderManager; +import org.terasology.engine.rendering.nui.CoreScreenLayer; import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems; +import org.terasology.engine.rendering.nui.layers.mainMenu.WaitPopup; import org.terasology.engine.rendering.world.viewDistance.ViewDistance; +import org.terasology.gestalt.assets.ResourceUrn; import org.terasology.input.Keyboard; -import org.terasology.engine.logic.players.LocalPlayer; import org.terasology.nui.WidgetUtil; import org.terasology.nui.databinding.BindHelper; import org.terasology.nui.databinding.Binding; @@ -26,11 +29,6 @@ import org.terasology.nui.widgets.UIDropdown; import org.terasology.nui.widgets.UILabel; import org.terasology.nui.widgets.UISlider; -import org.terasology.engine.registry.CoreRegistry; -import org.terasology.engine.registry.In; -import org.terasology.engine.rendering.ShaderManager; -import org.terasology.engine.rendering.nui.CoreScreenLayer; -import org.terasology.engine.rendering.nui.layers.mainMenu.WaitPopup; import javax.imageio.ImageIO; import java.util.Arrays; @@ -44,18 +42,12 @@ public class VideoSettingsScreen extends CoreScreenLayer { private static final Logger logger = LoggerFactory.getLogger(VideoSettingsScreen.class); private static final long RESOLUTION_REVERT_TIME_MS = 15000; - @In - private GameEngine engine; - @In private Config config; @In private DisplayDevice displayDevice; - @In - private LocalPlayer localPlayer; - @In private TranslationSystem translationSystem; @@ -150,6 +142,23 @@ public String getString(Integer value) { chunkLodSlider.bindValue(BindHelper.bindBeanProperty("chunkLods", config.getRendering(), Float.TYPE)); } + final UISlider billboardLimitSlider = find("billboardLimit", UISlider.class); + if (billboardLimitSlider != null) { + billboardLimitSlider.setIncrement(32); + billboardLimitSlider.setPrecision(0); + billboardLimitSlider.setMinimum(0); + billboardLimitSlider.setRange(512); + // Billboard limit == 0 means no limit + billboardLimitSlider.setLabelFunction(input -> { + if (input == 0) { + return "No limit"; + } else { + return String.valueOf(input.intValue()); + } + }); + billboardLimitSlider.bindValue(BindHelper.bindBeanProperty("billboardLimit", config.getRendering(), Float.TYPE)); + } + final UISlider frameLimitSlider = find("frameLimit", UISlider.class); if (frameLimitSlider != null) { frameLimitSlider.setIncrement(5.0f); @@ -221,7 +230,7 @@ public void set(Float value) { fboScaleSlider.setPrecision(0); fboScaleSlider.setMinimum(25); fboScaleSlider.setRange(200); - fboScaleSlider.setLabelFunction(input -> String.valueOf(input.intValue()) + "%"); + fboScaleSlider.setLabelFunction(input -> input.intValue() + "%"); fboScaleSlider.bindValue(new Binding() { @Override public Float get() { diff --git a/engine/src/main/java/org/terasology/engine/rendering/world/RenderableWorldImpl.java b/engine/src/main/java/org/terasology/engine/rendering/world/RenderableWorldImpl.java index bf5dc85d66..a3650d19dc 100644 --- a/engine/src/main/java/org/terasology/engine/rendering/world/RenderableWorldImpl.java +++ b/engine/src/main/java/org/terasology/engine/rendering/world/RenderableWorldImpl.java @@ -46,7 +46,6 @@ class RenderableWorldImpl implements RenderableWorld { private static final int MAX_ANIMATED_CHUNKS = 64; - private static final int MAX_BILLBOARD_CHUNKS = 64; private static final int MAX_LOADABLE_CHUNKS = ViewDistance.MEGA.getChunkDistance().x() * ViewDistance.MEGA.getChunkDistance().y() * ViewDistance.MEGA.getChunkDistance().z(); private static final Vector3fc CHUNK_CENTER_OFFSET = new Vector3f(Chunks.CHUNK_SIZE).div(2); @@ -218,9 +217,9 @@ public boolean updateChunksInProximity(BlockRegion newRenderableRegion) { for (Vector3ic chunkPositionToRemove : renderableRegion) { if (!newRenderableRegion.contains(chunkPositionToRemove)) { Iterator nearbyChunks = chunksInProximityOfCamera.iterator(); - for (Iterator it = nearbyChunks; it.hasNext();) { - chunk = it.next(); - if (chunk.getPosition(new org.joml.Vector3i()).equals(chunkPositionToRemove)) { + while (nearbyChunks.hasNext()) { + chunk = nearbyChunks.next(); + if (chunk.getPosition().equals(chunkPositionToRemove)) { chunk.disposeMesh(); nearbyChunks.remove(); break; @@ -327,6 +326,7 @@ public int queueVisibleChunks(boolean isFirstRenderingStageForCurrentFrame) { ChunkMesh mesh; boolean isDynamicShadows = renderingConfig.isDynamicShadows(); + int billboardLimit = (int) renderingConfig.getBillboardLimit(); List allChunks = new ArrayList<>(chunksInProximityOfCamera); allChunks.addAll(chunkMeshRenderer.getRenderableChunks()); @@ -362,7 +362,8 @@ && isChunkVisibleFromMainLight(chunk)) { statIgnoredPhases++; } - if (triangleCount(mesh, ChunkMesh.RenderPhase.ALPHA_REJECT) > 0 && chunkCounter < MAX_BILLBOARD_CHUNKS) { + if (triangleCount(mesh, ChunkMesh.RenderPhase.ALPHA_REJECT) > 0 + && (billboardLimit == 0 || chunkCounter < billboardLimit)) { renderQueues.chunksAlphaReject.add(chunk); } else { statIgnoredPhases++; @@ -370,11 +371,7 @@ && isChunkVisibleFromMainLight(chunk)) { statVisibleChunks++; - if (statVisibleChunks < MAX_ANIMATED_CHUNKS) { - chunk.setAnimated(true); - } else { - chunk.setAnimated(false); - } + chunk.setAnimated(statVisibleChunks < MAX_ANIMATED_CHUNKS); } if (isChunkVisibleReflection(chunk)) { @@ -516,13 +513,7 @@ public int compare(RenderableChunk chunk1, RenderableChunk chunk2) { double distance1 = squaredDistanceToCamera(chunk1, cameraPosition); double distance2 = squaredDistanceToCamera(chunk2, cameraPosition); - if (distance1 == distance2) { - return 0; - } else if (distance2 > distance1) { - return 1; - } else { - return -1; - } + return Double.compare(distance2, distance1); } } diff --git a/engine/src/main/java/org/terasology/engine/telemetry/GamePlayStatsComponent.java b/engine/src/main/java/org/terasology/engine/telemetry/GamePlayStatsComponent.java index 77a23c4037..4aff4b7adc 100644 --- a/engine/src/main/java/org/terasology/engine/telemetry/GamePlayStatsComponent.java +++ b/engine/src/main/java/org/terasology/engine/telemetry/GamePlayStatsComponent.java @@ -2,8 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.telemetry; -import org.terasology.engine.entitySystem.Component; +import com.google.common.collect.Maps; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.HashMap; import java.util.Map; @@ -11,7 +12,7 @@ /** * A component stocks game play stats such as blocks destroyed, blocks placed, etc. */ -public class GamePlayStatsComponent implements Component { +public class GamePlayStatsComponent implements Component { @Replicate public Map blockDestroyedMap = new HashMap<>(); @@ -27,4 +28,13 @@ public class GamePlayStatsComponent implements Component { @Replicate public Map creatureKilled = new HashMap<>(); + + @Override + public void copyFrom(GamePlayStatsComponent other) { + this.blockDestroyedMap = Maps.newHashMap(other.blockDestroyedMap); + this.blockPlacedMap = Maps.newHashMap(other.blockPlacedMap); + this.distanceTraveled = other.distanceTraveled; + this.playTimeMinute = other.playTimeMinute; + this.creatureKilled = Maps.newHashMap(other.creatureKilled); + } } diff --git a/engine/src/main/java/org/terasology/engine/world/BlockEntityRegistry.java b/engine/src/main/java/org/terasology/engine/world/BlockEntityRegistry.java index 3f06f3c5f6..675c598e52 100644 --- a/engine/src/main/java/org/terasology/engine/world/BlockEntityRegistry.java +++ b/engine/src/main/java/org/terasology/engine/world/BlockEntityRegistry.java @@ -4,9 +4,9 @@ import org.joml.Vector3fc; import org.joml.Vector3ic; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.world.block.Block; +import org.terasology.gestalt.entitysystem.component.Component; /** * Manages creation and lookup of entities linked to blocks diff --git a/engine/src/main/java/org/terasology/engine/world/RelevanceRegionComponent.java b/engine/src/main/java/org/terasology/engine/world/RelevanceRegionComponent.java index 175eadc7b1..fadee960e2 100644 --- a/engine/src/main/java/org/terasology/engine/world/RelevanceRegionComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/RelevanceRegionComponent.java @@ -3,9 +3,14 @@ package org.terasology.engine.world; import org.joml.Vector3i; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; -public class RelevanceRegionComponent implements Component { +public class RelevanceRegionComponent implements Component { public Vector3i distance = new Vector3i(1, 1, 1); + + @Override + public void copyFrom(RelevanceRegionComponent other) { + this.distance = new Vector3i(other.distance); + } } diff --git a/engine/src/main/java/org/terasology/engine/world/WorldComponent.java b/engine/src/main/java/org/terasology/engine/world/WorldComponent.java index 065fa49042..3f8ab74a28 100644 --- a/engine/src/main/java/org/terasology/engine/world/WorldComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/WorldComponent.java @@ -3,11 +3,11 @@ package org.terasology.engine.world; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * World component - indicates the world entity. Used for sending world-wide events and storing world information * */ -public final class WorldComponent implements Component { +public final class WorldComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/world/block/BlockComponent.java b/engine/src/main/java/org/terasology/engine/world/block/BlockComponent.java index b84f350b79..51adeeebf8 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/BlockComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/BlockComponent.java @@ -4,13 +4,13 @@ import org.joml.Vector3i; import org.joml.Vector3ic; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; +import org.terasology.gestalt.entitysystem.component.Component; /** * Used for entities representing a block in the world */ -public final class BlockComponent implements Component { +public final class BlockComponent implements Component { @Replicate protected Vector3i position = new Vector3i(); @Replicate @@ -54,4 +54,10 @@ public Vector3i getPosition(Vector3i dest) { dest.set(position); return dest; } + + @Override + public void copyFrom(BlockComponent other) { + this.position = new Vector3i(other.position); + this.block = other.block; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/entity/damage/BlockDamageModifierComponent.java b/engine/src/main/java/org/terasology/engine/world/block/entity/damage/BlockDamageModifierComponent.java index 36390c0379..352710fd24 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/entity/damage/BlockDamageModifierComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/entity/damage/BlockDamageModifierComponent.java @@ -3,11 +3,11 @@ package org.terasology.engine.world.block.entity.damage; import com.google.common.collect.Maps; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; -public class BlockDamageModifierComponent implements Component { +public class BlockDamageModifierComponent implements Component { public Map materialDamageMultiplier = Maps.newHashMap(); public float blockAnnihilationChance; @@ -15,4 +15,12 @@ public class BlockDamageModifierComponent implements Component { public boolean directPickup; public float impulsePower; + @Override + public void copyFrom(BlockDamageModifierComponent other) { + this.materialDamageMultiplier = Maps.newHashMap(other.materialDamageMultiplier); + this.blockAnnihilationChance = other.blockAnnihilationChance; + this.skipPerBlockEffects = other.skipPerBlockEffects; + this.directPickup = other.directPickup; + this.impulsePower = other.impulsePower; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/internal/BlockPrefabManager.java b/engine/src/main/java/org/terasology/engine/world/block/internal/BlockPrefabManager.java index 346e5377f5..3343968a7e 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/internal/BlockPrefabManager.java +++ b/engine/src/main/java/org/terasology/engine/world/block/internal/BlockPrefabManager.java @@ -2,13 +2,13 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.internal; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.metadata.ComponentMetadata; import org.terasology.engine.entitySystem.prefab.Prefab; import org.terasology.engine.world.block.Block; import org.terasology.engine.world.block.BlockManager; import org.terasology.engine.world.block.family.BlockFamily; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Optional; diff --git a/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemComponent.java b/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemComponent.java index 2a4a251159..6a9cd7861c 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemComponent.java @@ -2,16 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.items; -import org.terasology.engine.entitySystem.Component; -import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.network.FieldReplicateType; import org.terasology.engine.network.Replicate; +import org.terasology.engine.world.block.family.BlockFamily; +import org.terasology.gestalt.entitysystem.component.Component; /** * Combined with ItemComponent, represents a held block * */ -public final class BlockItemComponent implements Component { +public final class BlockItemComponent implements Component { @Replicate(FieldReplicateType.SERVER_TO_OWNER) public BlockFamily blockFamily; @@ -21,4 +21,9 @@ public BlockItemComponent() { public BlockItemComponent(BlockFamily blockFamily) { this.blockFamily = blockFamily; } + + @Override + public void copyFrom(BlockItemComponent other) { + this.blockFamily = other.blockFamily; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemFactory.java b/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemFactory.java index 4ac784e108..fa081d6ae4 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemFactory.java +++ b/engine/src/main/java/org/terasology/engine/world/block/items/BlockItemFactory.java @@ -4,7 +4,6 @@ import com.google.common.base.Preconditions; import com.google.common.primitives.SignedBytes; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.ComponentContainer; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityManager; @@ -12,8 +11,9 @@ import org.terasology.engine.logic.common.DisplayNameComponent; import org.terasology.engine.logic.common.RetainComponentsComponent; import org.terasology.engine.logic.inventory.ItemComponent; -import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.rendering.logic.LightComponent; +import org.terasology.engine.world.block.family.BlockFamily; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.Optional; diff --git a/engine/src/main/java/org/terasology/engine/world/block/regions/ActAsBlockComponent.java b/engine/src/main/java/org/terasology/engine/world/block/regions/ActAsBlockComponent.java index 10981fc4f0..e8835f2e87 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/regions/ActAsBlockComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/regions/ActAsBlockComponent.java @@ -3,14 +3,20 @@ package org.terasology.engine.world.block.regions; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.world.block.family.BlockFamily; +import org.terasology.gestalt.entitysystem.component.Component; /** * An entity with this component will act as that block - producing block style damage effects, take damage as that block would. * */ -public final class ActAsBlockComponent implements Component { +public final class ActAsBlockComponent implements Component { public BlockFamily block; public boolean dropBlocksInRegion; + + @Override + public void copyFrom(ActAsBlockComponent other) { + this.block = other.block; + this.dropBlocksInRegion = other.dropBlocksInRegion; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/regions/BlockRegionComponent.java b/engine/src/main/java/org/terasology/engine/world/block/regions/BlockRegionComponent.java index 73eb0e7172..6f87c76918 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/regions/BlockRegionComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/regions/BlockRegionComponent.java @@ -3,12 +3,12 @@ package org.terasology.engine.world.block.regions; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; import org.terasology.engine.world.block.BlockRegion; +import org.terasology.gestalt.entitysystem.component.Component; -public class BlockRegionComponent implements Component { +public class BlockRegionComponent implements Component { /** * May be null. */ @@ -21,4 +21,9 @@ public BlockRegionComponent() { public BlockRegionComponent(BlockRegion region) { this.region = new BlockRegion(region); } + + @Override + public void copyFrom(BlockRegionComponent other) { + this.region = new BlockRegion(region); + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/structure/AttachSupportRequiredComponent.java b/engine/src/main/java/org/terasology/engine/world/block/structure/AttachSupportRequiredComponent.java index 4bf9e21a30..b3ac5e0c49 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/structure/AttachSupportRequiredComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/structure/AttachSupportRequiredComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.structure; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.EmptyComponent; /** * Component for block entities that are attached to another block and depend on this block allowing to have been @@ -12,5 +12,5 @@ * (attachment) will be destroyed. The check for which side this block entity is attached to is done via BlockMeshPart. * */ -public class AttachSupportRequiredComponent implements Component { +public class AttachSupportRequiredComponent extends EmptyComponent { } diff --git a/engine/src/main/java/org/terasology/engine/world/block/structure/SideBlockSupportRequiredComponent.java b/engine/src/main/java/org/terasology/engine/world/block/structure/SideBlockSupportRequiredComponent.java index 8183f30d1f..f622afb210 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/structure/SideBlockSupportRequiredComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/structure/SideBlockSupportRequiredComponent.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.structure; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; /** * Component for block entities that wish to describe their structural dependency on other blocks. One can describe @@ -13,9 +13,17 @@ * bottomAllowed=true, sideAllowed=true, table (furniture) would be bottomAllowed=true. * */ -public class SideBlockSupportRequiredComponent implements Component { +public class SideBlockSupportRequiredComponent implements Component { public boolean topAllowed; public boolean sideAllowed; public boolean bottomAllowed; public long dropDelay; + + @Override + public void copyFrom(SideBlockSupportRequiredComponent other) { + this.topAllowed = other.topAllowed; + this.sideAllowed = other.sideAllowed; + this.bottomAllowed = other.bottomAllowed; + this.dropDelay = other.dropDelay; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeComponent.java b/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeComponent.java index 984f5ccfad..d44744be12 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeComponent.java @@ -2,11 +2,16 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.typeEntity; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.network.Replicate; import org.terasology.engine.world.block.Block; +import org.terasology.gestalt.entitysystem.component.Component; -public class BlockTypeComponent implements Component { +public class BlockTypeComponent implements Component { @Replicate public Block block; + + @Override + public void copyFrom(BlockTypeComponent other) { + this.block = other.block; + } } diff --git a/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeEntityGenerator.java b/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeEntityGenerator.java index 2fd5c0ccd3..7dff447d5f 100644 --- a/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeEntityGenerator.java +++ b/engine/src/main/java/org/terasology/engine/world/block/typeEntity/BlockTypeEntityGenerator.java @@ -2,7 +2,6 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.block.typeEntity; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; @@ -13,6 +12,7 @@ import org.terasology.engine.world.block.BlockManager; import org.terasology.engine.world.block.family.BlockFamily; import org.terasology.engine.world.block.internal.BlockRegistrationListener; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Optional; diff --git a/engine/src/main/java/org/terasology/engine/world/chunks/localChunkProvider/LocalChunkProvider.java b/engine/src/main/java/org/terasology/engine/world/chunks/localChunkProvider/LocalChunkProvider.java index 7b31d06434..1a0fe512d5 100644 --- a/engine/src/main/java/org/terasology/engine/world/chunks/localChunkProvider/LocalChunkProvider.java +++ b/engine/src/main/java/org/terasology/engine/world/chunks/localChunkProvider/LocalChunkProvider.java @@ -14,7 +14,6 @@ import org.joml.Vector3ic; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.entity.EntityManager; import org.terasology.engine.entitySystem.entity.EntityRef; import org.terasology.engine.entitySystem.entity.EntityStore; @@ -50,6 +49,7 @@ import org.terasology.engine.world.internal.ChunkViewCoreImpl; import org.terasology.engine.world.propagation.light.InternalLightProcessor; import org.terasology.engine.world.propagation.light.LightMerger; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collection; import java.util.Iterator; diff --git a/engine/src/main/java/org/terasology/engine/world/generation/ConfigurableFacetProvider.java b/engine/src/main/java/org/terasology/engine/world/generation/ConfigurableFacetProvider.java index 52f3abb63f..00b81c6da0 100644 --- a/engine/src/main/java/org/terasology/engine/world/generation/ConfigurableFacetProvider.java +++ b/engine/src/main/java/org/terasology/engine/world/generation/ConfigurableFacetProvider.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.generation; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; public interface ConfigurableFacetProvider extends FacetProvider { String getConfigurationName(); diff --git a/engine/src/main/java/org/terasology/engine/world/generation/FacetedWorldConfigurator.java b/engine/src/main/java/org/terasology/engine/world/generation/FacetedWorldConfigurator.java index 4acfabeada..1cc2d7b9a5 100644 --- a/engine/src/main/java/org/terasology/engine/world/generation/FacetedWorldConfigurator.java +++ b/engine/src/main/java/org/terasology/engine/world/generation/FacetedWorldConfigurator.java @@ -5,8 +5,8 @@ import com.google.common.collect.Maps; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.world.generator.WorldConfigurator; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.List; diff --git a/engine/src/main/java/org/terasology/engine/world/generation/WorldBuilder.java b/engine/src/main/java/org/terasology/engine/world/generation/WorldBuilder.java index f717c84e6c..90a5ac0fe8 100644 --- a/engine/src/main/java/org/terasology/engine/world/generation/WorldBuilder.java +++ b/engine/src/main/java/org/terasology/engine/world/generation/WorldBuilder.java @@ -237,7 +237,8 @@ private void addProviderChain(Class facet, boolean scalabl } /** - * Adds {@code provider} and all its dependencies (calculated by calling {@link #addProviderChain} to {@code orderedProviders} in the proper order. + * Adds {@code provider} and all its dependencies (calculated by calling {@link #addProviderChain} + * to {@code orderedProviders} in the proper order. * Doesn't consider dependencies through {@code providedFacet}, because that's already required by something else. */ private void addRequirements(Class providedFacet, FacetProvider provider, boolean scalable, diff --git a/engine/src/main/java/org/terasology/engine/world/generator/WorldConfigurator.java b/engine/src/main/java/org/terasology/engine/world/generator/WorldConfigurator.java index 0c7ba35b3d..2c07e6ce30 100644 --- a/engine/src/main/java/org/terasology/engine/world/generator/WorldConfigurator.java +++ b/engine/src/main/java/org/terasology/engine/world/generator/WorldConfigurator.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.generator; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/world/generator/WorldConfiguratorAdapter.java b/engine/src/main/java/org/terasology/engine/world/generator/WorldConfiguratorAdapter.java index be27cb3165..240a56a987 100644 --- a/engine/src/main/java/org/terasology/engine/world/generator/WorldConfiguratorAdapter.java +++ b/engine/src/main/java/org/terasology/engine/world/generator/WorldConfiguratorAdapter.java @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 package org.terasology.engine.world.generator; -import org.terasology.engine.entitySystem.Component; +import org.terasology.gestalt.entitysystem.component.Component; import java.util.Collections; import java.util.Map; diff --git a/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java b/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java index 6efb89a578..ac215ae4d8 100644 --- a/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java +++ b/engine/src/main/java/org/terasology/engine/world/internal/EntityAwareWorldProvider.java @@ -18,7 +18,6 @@ import org.terasology.engine.context.Context; import org.terasology.engine.core.ComponentSystemManager; import org.terasology.engine.core.GameThread; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.entitySystem.ComponentContainer; import org.terasology.engine.entitySystem.entity.EntityBuilder; import org.terasology.engine.entitySystem.entity.EntityManager; @@ -37,13 +36,14 @@ import org.terasology.engine.logic.location.LocationComponent; import org.terasology.engine.monitoring.PerformanceMonitor; import org.terasology.engine.network.NetworkComponent; -import org.terasology.reflection.metadata.FieldMetadata; import org.terasology.engine.world.BlockEntityRegistry; import org.terasology.engine.world.OnChangedBlock; import org.terasology.engine.world.block.Block; import org.terasology.engine.world.block.BlockComponent; import org.terasology.engine.world.block.BlockRegion; import org.terasology.engine.world.block.regions.BlockRegionComponent; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.reflection.metadata.FieldMetadata; import java.util.Collection; import java.util.Collections; diff --git a/engine/src/main/java/org/terasology/engine/world/selection/BlockSelectionComponent.java b/engine/src/main/java/org/terasology/engine/world/selection/BlockSelectionComponent.java index 125539df13..d403503047 100644 --- a/engine/src/main/java/org/terasology/engine/world/selection/BlockSelectionComponent.java +++ b/engine/src/main/java/org/terasology/engine/world/selection/BlockSelectionComponent.java @@ -3,11 +3,11 @@ package org.terasology.engine.world.selection; import org.joml.Vector3i; -import org.terasology.engine.entitySystem.Component; import org.terasology.engine.logic.selection.MovableSelectionStartEvent; -import org.terasology.gestalt.module.sandbox.API; import org.terasology.engine.rendering.assets.texture.Texture; import org.terasology.engine.world.block.BlockRegion; +import org.terasology.gestalt.entitysystem.component.Component; +import org.terasology.gestalt.module.sandbox.API; /** *

@@ -20,7 +20,7 @@ *

*/ @API -public class BlockSelectionComponent implements Component { +public class BlockSelectionComponent implements Component { /** * Starting point for the block selection. Used to re-create the currentSelection region when the ending point is changed. */ @@ -48,4 +48,13 @@ public class BlockSelectionComponent implements Component { * before sending the {@link MovableSelectionStartEvent} using the appropriate entity */ public boolean isMovable = false; + + @Override + public void copyFrom(BlockSelectionComponent other) { + this.startPosition = new Vector3i(other.startPosition); + this.currentSelection = new BlockRegion(other.currentSelection); + this.shouldRender = other.shouldRender; + this.texture = other.texture; + this.isMovable = other.isMovable; + } } diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang index e920c01751..831c950671 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu.lang @@ -20,6 +20,7 @@ "behavior-editor-new": "behavior-editor-new", "behavior-editor-paste": "behavior-editor-paste", "behavior-editor-remove": "behavior-editor-remove", + "billboard-limit": "billboard-limit", "binding-attack": "binding-attack", "binding-backwards": "binding-backwards", "binding-behavior-editor": "binding-behavior-editor", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang index 46e6c5e14c..502fa22229 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_en.lang @@ -20,6 +20,7 @@ "behavior-editor-new": "new", "behavior-editor-paste": "paste", "behavior-editor-remove": "remove", + "billboard-limit": "Transparent chunk limit", "binding-attack": "Attack", "binding-autoMove-mode": "Toggle Auto Move", "binding-backwards": "Backwards", diff --git a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_es.lang b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_es.lang index c5837f048b..ae15113308 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_es.lang +++ b/engine/src/main/resources/org/terasology/engine/assets/i18n/menu_es.lang @@ -4,6 +4,7 @@ "audio-settings": "Sonido", "audio-settings-title": "Configuración de Audio", "back": "Atras", + "billboard-limit": "Límite de porciones transparentes", "binding-attack": "Atacar", "binding-backwards": "Hacia Atrás", "binding-behavior-editor": "Alternar Editor de Comportamiento", diff --git a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/videoMenuScreen.ui b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/videoMenuScreen.ui index 614504b727..c3669fed96 100644 --- a/engine/src/main/resources/org/terasology/engine/assets/ui/menu/videoMenuScreen.ui +++ b/engine/src/main/resources/org/terasology/engine/assets/ui/menu/videoMenuScreen.ui @@ -230,6 +230,14 @@ "type": "UISlider", "id": "chunkLods" }, + { + "type": "UILabel", + "text": "${engine:menu#billboard-limit}: " + }, + { + "type": "UISlider", + "id": "billboardLimit" + }, { "type": "UILabel", "text": "${engine:menu#framerate-limit}: " diff --git a/facades/PC/src/main/java/org/terasology/engine/DataSizeConverter.java b/facades/PC/src/main/java/org/terasology/engine/DataSizeConverter.java index b9de7e535a..b1dcf507c2 100644 --- a/facades/PC/src/main/java/org/terasology/engine/DataSizeConverter.java +++ b/facades/PC/src/main/java/org/terasology/engine/DataSizeConverter.java @@ -24,13 +24,6 @@ * This implementation also supports decimal values such as 3.5G. */ public class DataSizeConverter implements CommandLine.ITypeConverter { - protected final static Pattern pattern = Pattern.compile( - "(?\\d+([.,]\\d*)?)" + // digits, maybe also a decimal part - "\\s*" + - "(?\\p{Alpha})?b?", // a suffix character, optionally followed by B - Pattern.CASE_INSENSITIVE - ); - @SuppressWarnings("unused") // used by Unit.valueOf enum Unit { B(1), @@ -50,6 +43,13 @@ BigDecimal multiply(BigDecimal n) { } } + protected static final Pattern pattern = Pattern.compile( + "(?\\d+([.,]\\d*)?)" + // digits, maybe also a decimal part + "\\s*" + + "(?\\p{Alpha})?b?", // a suffix character, optionally followed by B + Pattern.CASE_INSENSITIVE + ); + @Override public Long convert(String value) { if (value == null) { diff --git a/facades/PC/src/main/java/org/terasology/engine/Terasology.java b/facades/PC/src/main/java/org/terasology/engine/Terasology.java index e3010b5d9b..36a1f76424 100644 --- a/facades/PC/src/main/java/org/terasology/engine/Terasology.java +++ b/facades/PC/src/main/java/org/terasology/engine/Terasology.java @@ -94,13 +94,13 @@ public final class Terasology implements Callable { paramLabel = "", converter = DataSizeConverter.class ) - Long maxDataSize; + private Long maxDataSize; @Option(names = "--oom-score", description = "Adjust out-of-memory score [Linux only]", paramLabel = "" ) - Integer outOfMemoryScore; + private Integer outOfMemoryScore; @Option(names = "--crash-report", defaultValue = "true", negatable = true, description = "Enable crash reporting") private boolean crashReportEnabled; @@ -232,7 +232,7 @@ private static void setupLogging() { } private void handleLaunchArguments() throws IOException { - if (outOfMemoryScore!= null) { + if (outOfMemoryScore != null) { adjustOutOfMemoryScore(outOfMemoryScore); } if (maxDataSize != null) { @@ -347,12 +347,13 @@ private static int getLastNumber(String str) { * On Windows, you may be able to set a limit using one of these external tools: *