Search in sources :

Example 26 with Prefab

use of org.terasology.engine.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.

the class CharacterSystem method onScaleCharacter.

@ReceiveEvent
public void onScaleCharacter(OnScaleEvent event, EntityRef entity, CharacterComponent character, CharacterMovementComponent movement) {
    // TODO: We should catch and consume this event somewhere in case there is no space for the character to grow
    Prefab parent = entity.getParentPrefab();
    // adjust movement parameters based on the default values defined by prefab
    CharacterMovementComponent defaultMovement = Optional.ofNullable(parent.getComponent(CharacterMovementComponent.class)).orElse(new CharacterMovementComponent());
    final float factor = event.getFactor();
    movement.height = factor * movement.height;
    movement.jumpSpeed = getJumpSpeed(factor, defaultMovement.jumpSpeed);
    movement.stepHeight = factor * movement.stepHeight;
    movement.distanceBetweenFootsteps = factor * movement.distanceBetweenFootsteps;
    movement.runFactor = getRunFactor(factor, defaultMovement.runFactor);
    entity.saveComponent(movement);
    // adjust character parameters
    CharacterComponent defaultCharacter = Optional.ofNullable(parent.getComponent(CharacterComponent.class)).orElse(new CharacterComponent());
    character.interactionRange = getInteractionRange(factor, defaultCharacter.interactionRange);
    entity.saveComponent(character);
    // refresh the entity collider - by retrieving the character collider after removing it we force recreation
    physicsEngine.removeCharacterCollider(entity);
    physicsEngine.getCharacterCollider(entity);
    // Scaling a character up will grow them into the ground. We would need to adjust the vertical position to be
    // safely above ground.
    Optional.ofNullable(entity.getComponent(LocationComponent.class)).map(k -> k.getWorldPosition(new Vector3f())).map(location -> location.add(0, (event.getNewValue() - event.getOldValue()) / 2f, 0)).ifPresent(location -> entity.send(new CharacterTeleportEvent(location)));
}
Also used : ActivateEvent(org.terasology.engine.logic.common.ActivateEvent) In(org.terasology.engine.registry.In) RegisterMode(org.terasology.engine.entitySystem.systems.RegisterMode) DestroyEvent(org.terasology.engine.logic.health.DestroyEvent) LoggerFactory(org.slf4j.LoggerFactory) BeforeDestroyEvent(org.terasology.engine.logic.health.BeforeDestroyEvent) PhysicsEngine(org.terasology.engine.physics.engine.PhysicsEngine) UpdateSubscriberSystem(org.terasology.engine.entitySystem.systems.UpdateSubscriberSystem) Physics(org.terasology.engine.physics.Physics) ActAsBlockComponent(org.terasology.engine.world.block.regions.ActAsBlockComponent) InteractionUtil(org.terasology.engine.logic.characters.interactions.InteractionUtil) EngineDamageTypes(org.terasology.engine.logic.health.EngineDamageTypes) DisplayNameComponent(org.terasology.engine.logic.common.DisplayNameComponent) Time(org.terasology.engine.core.Time) OnScaleEvent(org.terasology.engine.logic.characters.events.OnScaleEvent) Vector3f(org.joml.Vector3f) RangeComponent(org.terasology.engine.logic.common.RangeComponent) AttackEvent(org.terasology.engine.logic.characters.events.AttackEvent) OnItemUseEvent(org.terasology.engine.logic.characters.events.OnItemUseEvent) ActivationRequest(org.terasology.engine.logic.characters.events.ActivationRequest) Logger(org.slf4j.Logger) DeathEvent(org.terasology.engine.logic.characters.events.DeathEvent) HitResult(org.terasology.engine.physics.HitResult) LocationComponent(org.terasology.engine.logic.location.LocationComponent) ClientComponent(org.terasology.engine.network.ClientComponent) AttackRequest(org.terasology.engine.logic.characters.events.AttackRequest) EntityManager(org.terasology.engine.entitySystem.entity.EntityManager) StandardCollisionGroup(org.terasology.engine.physics.StandardCollisionGroup) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) Sets(com.google.common.collect.Sets) RecordAndReplayCurrentStatus(org.terasology.engine.recording.RecordAndReplayCurrentStatus) BaseComponentSystem(org.terasology.engine.entitySystem.systems.BaseComponentSystem) PlayerDeathEvent(org.terasology.engine.logic.characters.events.PlayerDeathEvent) ItemComponent(org.terasology.engine.logic.inventory.ItemComponent) ActivationRequestDenied(org.terasology.engine.logic.characters.events.ActivationRequestDenied) RecordAndReplayStatus(org.terasology.engine.recording.RecordAndReplayStatus) AttackButton(org.terasology.engine.input.binds.interaction.AttackButton) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef) EventPriority(org.terasology.engine.entitySystem.event.EventPriority) RegisterSystem(org.terasology.engine.entitySystem.systems.RegisterSystem) BlockComponent(org.terasology.engine.world.block.BlockComponent) PlayerCharacterComponent(org.terasology.engine.logic.players.PlayerCharacterComponent) ReceiveEvent(org.terasology.engine.entitySystem.event.ReceiveEvent) Optional(java.util.Optional) DirectionAndOriginPosRecorderList(org.terasology.engine.recording.DirectionAndOriginPosRecorderList) CollisionGroup(org.terasology.engine.physics.CollisionGroup) NetworkSystem(org.terasology.engine.network.NetworkSystem) Vector3f(org.joml.Vector3f) PlayerCharacterComponent(org.terasology.engine.logic.players.PlayerCharacterComponent) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) ReceiveEvent(org.terasology.engine.entitySystem.event.ReceiveEvent)

Example 27 with Prefab

use of org.terasology.engine.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.

the class BehaviorNodeFactory method refreshPrefabs.

private void refreshPrefabs() {
    Collection<Prefab> prefabs = prefabManager.listPrefabs(BehaviorNodeComponent.class);
    if (prefabs.size() == 0) {
        // called from main menu
        List<String> nodes = Arrays.asList("counter", "timer", "loop", "lookup", "dynselector", "fail", "parallel", "playMusic", "playSound", "running", "selector", "setAnimation", "sequence", "succeed");
        prefabs = Lists.newArrayList();
        for (String node : nodes) {
            prefabs.add(Assets.get(new ResourceUrn("engine:" + node), Prefab.class).orElse(null));
        }
    }
    for (Prefab prefab : prefabs) {
        EntityBuilder entityBuilder = entityManager.newBuilder(prefab);
        entityBuilder.setPersistent(false);
        EntityRef entityRef = entityBuilder.build();
        BehaviorNodeComponent component = entityRef.getComponent(BehaviorNodeComponent.class);
        addToCategory(component);
        nodeComponents.add(component);
    }
}
Also used : EntityBuilder(org.terasology.engine.entitySystem.entity.EntityBuilder) ResourceUrn(org.terasology.gestalt.assets.ResourceUrn) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef)

Example 28 with Prefab

use of org.terasology.engine.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.

the class VisualCharacterSystem method onCreateDefaultVisualCharacter.

@ReceiveEvent(priority = EventPriority.PRIORITY_TRIVIAL)
public void onCreateDefaultVisualCharacter(CreateVisualCharacterEvent event, EntityRef characterEntity) {
    Prefab prefab = assetManager.getAsset("engine:defaultVisualCharacter", Prefab.class).get();
    EntityBuilder entityBuilder = event.getVisualCharacterBuilder();
    entityBuilder.addPrefab(prefab);
    event.consume();
}
Also used : EntityBuilder(org.terasology.engine.entitySystem.entity.EntityBuilder) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) ReceiveEvent(org.terasology.engine.entitySystem.event.ReceiveEvent)

Example 29 with Prefab

use of org.terasology.engine.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.

the class PojoPrefabManagerTest method testRetrievePrefab.

@Test
public void testRetrievePrefab() {
    PrefabData data = new PrefabData();
    data.addComponent(new StringComponent("Test"));
    Assets.generateAsset(new ResourceUrn(PREFAB_NAME), data, Prefab.class);
    Prefab ref = prefabManager.getPrefab(PREFAB_NAME);
    assertNotNull(ref);
    assertEquals(PREFAB_NAME, ref.getName());
}
Also used : PrefabData(org.terasology.engine.entitySystem.prefab.PrefabData) StringComponent(org.terasology.unittest.stubs.StringComponent) ResourceUrn(org.terasology.gestalt.assets.ResourceUrn) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) PojoPrefab(org.terasology.engine.entitySystem.prefab.internal.PojoPrefab) Test(org.junit.jupiter.api.Test)

Example 30 with Prefab

use of org.terasology.engine.entitySystem.prefab.Prefab in project Terasology by MovingBlocks.

the class AutoCreateSystem method postBegin.

@Override
public void postBegin() {
    Set<Prefab> existingGlobals = Sets.newHashSet();
    NetworkMode mode = networkSystem.getMode();
    for (EntityRef entity : entityManager.getEntitiesWith(AutoCreateComponent.class)) {
        existingGlobals.add(entity.getParentPrefab());
    }
    for (Prefab prefab : prefabManager.listPrefabs(AutoCreateComponent.class)) {
        AutoCreateComponent comp = prefab.getComponent(AutoCreateComponent.class);
        if (!existingGlobals.contains(prefab) && (comp.createClientSide || mode.isAuthority())) {
            entityManager.create(prefab);
        }
    }
}
Also used : NetworkMode(org.terasology.engine.network.NetworkMode) Prefab(org.terasology.engine.entitySystem.prefab.Prefab) EntityRef(org.terasology.engine.entitySystem.entity.EntityRef)

Aggregations

Prefab (org.terasology.engine.entitySystem.prefab.Prefab)38 PojoPrefab (org.terasology.engine.entitySystem.prefab.internal.PojoPrefab)13 Test (org.junit.jupiter.api.Test)10 EntityRef (org.terasology.engine.entitySystem.entity.EntityRef)10 Component (org.terasology.gestalt.entitysystem.component.Component)9 ResourceUrn (org.terasology.gestalt.assets.ResourceUrn)8 PrefabData (org.terasology.engine.entitySystem.prefab.PrefabData)6 StringComponent (org.terasology.unittest.stubs.StringComponent)6 BeforeEach (org.junit.jupiter.api.BeforeEach)4 EntityBuilder (org.terasology.engine.entitySystem.entity.EntityBuilder)4 ClientComponent (org.terasology.engine.network.ClientComponent)4 NetworkComponent (org.terasology.engine.network.NetworkComponent)4 NetworkSystem (org.terasology.engine.network.NetworkSystem)4 ModuleManager (org.terasology.engine.core.module.ModuleManager)3 EngineEntityManager (org.terasology.engine.entitySystem.entity.internal.EngineEntityManager)3 LocationComponent (org.terasology.engine.logic.location.LocationComponent)3 ArrayList (java.util.ArrayList)2 Optional (java.util.Optional)2 BeforeDeactivateComponent (org.terasology.engine.entitySystem.entity.lifecycleEvents.BeforeDeactivateComponent)2 OnActivatedComponent (org.terasology.engine.entitySystem.entity.lifecycleEvents.OnActivatedComponent)2