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