package org.terasology.entityFactory;
import javax.vecmath.Vector3f;
import org.terasology.asset.AssetType;
import org.terasology.asset.AssetUri;
import org.terasology.audio.Sound;
import org.terasology.components.AABBCollisionComponent;
import org.terasology.components.CharacterMovementComponent;
import org.terasology.components.CharacterSoundComponent;
import org.terasology.components.HealthComponent;
import org.terasology.components.InventoryComponent;
import org.terasology.components.LocalPlayerComponent;
import org.terasology.components.PlayerComponent;
import org.terasology.components.world.LocationComponent;
import org.terasology.entitySystem.EntityManager;
import org.terasology.entitySystem.EntityRef;
import org.terasology.entitySystem.PrefabManager;
import org.terasology.events.inventory.ReceiveItemEvent;
import org.terasology.game.CoreRegistry;
import org.terasology.logic.manager.AssetManager;
/**
* @author Immortius <immortius@gmail.com>
*/
public class PlayerFactory {
private EntityManager entityManager;
private BlockItemFactory blockFactory;
public PlayerFactory(EntityManager entityManager) {
this.entityManager = entityManager;
blockFactory = new BlockItemFactory(entityManager, CoreRegistry.get(PrefabManager.class));
}
public EntityRef newInstance(Vector3f spawnPosition) {
EntityRef player = entityManager.create();
player.addComponent(new LocationComponent(spawnPosition));
PlayerComponent playerComponent = new PlayerComponent();
playerComponent.spawnPosition.set(spawnPosition);
player.addComponent(playerComponent);
HealthComponent healthComponent = new HealthComponent(255, 5, 2f);
healthComponent.excessSpeedDamageMultiplier = 20f;
healthComponent.fallingDamageSpeedThreshold = 15f;
player.addComponent(healthComponent);
AABBCollisionComponent collision = player.addComponent(new AABBCollisionComponent());
collision.setExtents(new Vector3f(.3f, 0.8f, .3f));
CharacterMovementComponent movementComp = player.addComponent(new CharacterMovementComponent());
movementComp.groundFriction = 16f;
movementComp.maxGroundSpeed = 3f;
movementComp.distanceBetweenFootsteps = 1.5f;
CharacterSoundComponent sounds = player.addComponent(new CharacterSoundComponent());
sounds.footstepSounds.add(AssetManager.load(new AssetUri(AssetType.SOUND, "engine:FootGrass1"), Sound.class));
sounds.footstepSounds.add(AssetManager.load(new AssetUri(AssetType.SOUND, "engine:FootGrass2"), Sound.class));
sounds.footstepSounds.add(AssetManager.load(new AssetUri(AssetType.SOUND, "engine:FootGrass3"), Sound.class));
sounds.footstepSounds.add(AssetManager.load(new AssetUri(AssetType.SOUND, "engine:FootGrass4"), Sound.class));
sounds.footstepSounds.add(AssetManager.load(new AssetUri(AssetType.SOUND, "engine:FootGrass5"), Sound.class));
player.addComponent(new LocalPlayerComponent());
player.addComponent(new InventoryComponent(36));
player.send(new ReceiveItemEvent(entityManager.create("core:axe")));
player.send(new ReceiveItemEvent(entityManager.create("core:pickaxe")));
player.send(new ReceiveItemEvent(entityManager.create("core:explodeTool")));
player.send(new ReceiveItemEvent(entityManager.create("core:railgunTool")));
player.send(new ReceiveItemEvent(entityManager.create("core:miniaturizer")));
return player;
}
}