Merge remote-tracking branch 'origin/develop' into refactor/remove-usage-ThreadManagerSubsystem

This commit is contained in:
Kevin Turner 2021-08-27 10:30:09 -07:00
commit e8b880872e
239 changed files with 1401 additions and 671 deletions

30
Jenkinsfile vendored
View file

@ -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')
}
}
}

View file

@ -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
}

View file

@ -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) {

View file

@ -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<EntityRefComponent> {
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;
}
}

View file

@ -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<ForceBlockActiveComponent> {
}

View file

@ -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<GetterSetterComponent> {
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;
}
}

View file

@ -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<IntegerComponent> {
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;
}
}

View file

@ -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<ListOfEnumsComponent> {
public List<Side> elements = new ArrayList<>();
@Override
public void copyFrom(ListOfEnumsComponent other) {
this.elements = Lists.newArrayList(other.elements);
}
}

View file

@ -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<ListOfObjectComponent> {
public String shortName;
public List<SubElement> 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;
}
}
}

View file

@ -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<MappedContainerComponent> {
public Set<Cont> 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;

View file

@ -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<MappedTypeComponent> {
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;

View file

@ -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<OrderedMapTestComponent> {
public Map<String, Long> orderedMap;
@Override
public void copyFrom(OrderedMapTestComponent other) {
this.orderedMap = Maps.newHashMap(other.orderedMap);
}
}

View file

@ -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<OwnerComponent> {
@Owns
public EntityRef child = EntityRef.NULL;
@Override
public void copyFrom(OwnerComponent other) {
this.child = other.child;
}
}

View file

@ -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<RetainedOnBlockChangeComponent> {
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;
}
}

View file

@ -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<StringComponent>{
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;
}
}

View file

@ -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<UnsupportedTypeComponent> {
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 {
}

View file

@ -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
})

View file

@ -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.<Component>emptyList());
EntityRef entity = entityManager.createEntityWithId(2, Collections.emptyList());
assertTrue(entity.isActive());
}

View file

@ -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<OwnedCollectionComponent> {
@Owns
public List<EntityRef> items = Lists.newArrayList();
@Override
public void copyFrom(OwnedCollectionComponent other) {
this.items = Lists.newArrayList(other.items);
}
}

View file

@ -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<ArbritaryDelayActionComponent> {
public int value = 1;
@Override
public void copyFrom(ArbritaryDelayActionComponent other) {
this.value = other.value;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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<NonpersistedComponent> {
}
}

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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'

View file

@ -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;

View file

@ -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;

View file

@ -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<GetterSetterComponent> {
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;
}
}

View file

@ -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<String> getModuleConfigKeys(SimpleUri uri) {
* @param clazz the class to convert the data to
* @return a config component for the given uri and class or <code>null</code>
*/
public <T extends Component> T getModuleConfig(SimpleUri uri, String key, Class<T> clazz) {
public <T extends Component<T>> T getModuleConfig(SimpleUri uri, String key, Class<T> clazz) {
Map<String, JsonElement> map = config.getModuleConfigs().get(uri);
if (map == null) {
return null;

View file

@ -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;
}

View file

@ -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<? extends Component> 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);

View file

@ -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<? extends Component> 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<? extends TypeHandler> handler : environment.getSubtypesOf(TypeHandler.class)) {

View file

@ -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;

View file

@ -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;

View file

@ -48,8 +48,13 @@ public final class ExternalApiWhitelist {
.add(org.terasology.reflection.TypeInfo.class)
.build();
private static final Set<String> GESTALT_ECS_PACKAGES = new ImmutableSet.Builder<String>()
.add("org.terasology.gestalt.entitysystem.component")
.build();
public static final Set<String> PACKAGES = new ImmutableSet.Builder<String>()
.addAll(NUI_PACKAGES)
.addAll(GESTALT_ECS_PACKAGES)
.add("org.terasology.math")
.add("org.terasology.math.geom")
.add("org.terasology.joml.geom")

View file

@ -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;

View file

@ -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) <b>data</b> that
* <ul>
* <li> can be attached to/carried by an entity, and</li>
* <li> can be inspected and/or edited by one or more {@link org.terasology.engine.entitySystem.systems.ComponentSystem}s.</li>
* </ul>
*
*/
public interface Component {
}

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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 {

View file

@ -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;

View file

@ -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 {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<EntityInfoComponent> {
// TODO: Switch this to use Optional<Prefab>
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;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<SectorRegionComponent> {
/**
* The set of positions of chunks for this entity to watch.
*/
public Set<Vector3i> chunks = new HashSet<>();
@Override
public void copyFrom(SectorRegionComponent other) {
this.chunks = other.chunks.stream()
.map(Vector3i::new)
.collect(Collectors.toSet());
}
}

View file

@ -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<SectorSimulationComponent> {
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;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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<PlaySoundActionComponent> {
public List<StaticSound> 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;
}
}

View file

@ -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<SpawnPrefabActionComponent> {
public String prefab;
public ActionTarget spawnLocationRelativeTo = ActionTarget.Target;
@Override
public void copyFrom(SpawnPrefabActionComponent other) {
this.prefab = other.prefab;
this.spawnLocationRelativeTo = other.spawnLocationRelativeTo;
}
}

View file

@ -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<AfkComponent> {
@Replicate
public boolean afk;
@Override
public void copyFrom(AfkComponent other) {
this.afk = other.afk;
}
}

View file

@ -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<HierarchicalAIComponent> {
//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;
}
}

View file

@ -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<SimpleAIComponent> {
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;
}
}

View file

@ -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<AutoCreateComponent> {
public boolean createClientSide;
@Override
public void copyFrom(AutoCreateComponent other) {
this.createClientSide = other.createClientSide;
}
}

View file

@ -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<BehaviorComponent> {
public BehaviorTree tree;
public transient Interpreter interpreter;
@Override
public void copyFrom(BehaviorComponent other) {
this.tree = other.tree;
this.interpreter = other.interpreter;
}
}

View file

@ -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<CollectiveBehaviorComponent> {
public BehaviorTree tree;
public transient CollectiveInterpreter collectiveInterpreter;
@Override
public void copyFrom(CollectiveBehaviorComponent other) {
this.tree = other.tree;
this.collectiveInterpreter = other.collectiveInterpreter;
}
}

View file

@ -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<GroupMindComponent> {
/**
* 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<EntityRef> groupMembers = new HashSet<>();
@Override
public void copyFrom(GroupMindComponent other) {
this.groupLabel = other.groupLabel;
this.behavior = other.behavior;
this.groupMembers = Sets.newHashSet(other.groupMembers);
}
}

View file

@ -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<GroupTagComponent> {
/**
* 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;
}
}

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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<BehaviorNodeComponent> {
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;
}
}

View file

@ -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 <b>alive character</b> entities. <br/>
@ -15,5 +15,5 @@
* or respawn after a while.
*/
@Replicate
public class AliveCharacterComponent implements Component {
public class AliveCharacterComponent extends EmptyComponent<AliveCharacterComponent> {
}

View file

@ -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<CharacterComponent> {
/**
* 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;
}
}

View file

@ -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<CharacterHeldItemComponent> {
@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;
}
}

View file

@ -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. <br/>
* 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. <br/> 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<CharacterMovementComponent> {
// 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<CollisionGroup> collidesWith = Lists.<CollisionGroup>newArrayList(StandardCollisionGroup.WORLD, StandardCollisionGroup.SENSOR, StandardCollisionGroup.CHARACTER);
public List<CollisionGroup> collidesWith = Lists.<CollisionGroup>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);
}
}

View file

@ -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<CharacterSoundComponent> {
public List<StaticSound> footstepSounds = Lists.newArrayList();
public List<StaticSound> 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;
}
}

View file

@ -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;

View file

@ -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<GazeMountPointComponent> {
/**
* Holds an entity that will have its location linked to the character entity.
* <p>
@ -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);
}
}

View file

@ -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

View file

@ -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<StandComponent> {
/**
* 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<MeshAnimation> animationPool = Lists.newArrayList();
@Override
public void copyFrom(StandComponent other) {
this.animationPool = Lists.newArrayList(other.animationPool);
}
}

View file

@ -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<VisualCharacterComponent> {
/**
* 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;
}
}

View file

@ -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<WalkComponent> {
/**
* 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<MeshAnimation> animationPool = Lists.newArrayList();
@Override
public void copyFrom(WalkComponent other) {
this.animationPool = Lists.newArrayList(other.animationPool);
}
}

View file

@ -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<InteractionScreenComponent> {
public String screen;
@Override
public void copyFrom(InteractionScreenComponent other) {
this.screen = other.screen;
}
}

Some files were not shown because too many files have changed in this diff Show more