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)));
}
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);
}
}
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();
}
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());
}
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);
}
}
}
Aggregations