Search in sources :

Example 31 with Quat4f

use of org.terasology.math.geom.Quat4f in project Terasology by MovingBlocks.

the class PhysicsSystem method sendSyncMessages.

private void sendSyncMessages() {
    Iterator<EntityRef> iter = physics.physicsEntitiesIterator();
    while (iter.hasNext()) {
        EntityRef entity = iter.next();
        if (entity.hasComponent(NetworkComponent.class)) {
            // TODO after implementing rigidbody interface
            RigidBody body = physics.getRigidBody(entity);
            if (body.isActive()) {
                entity.send(new LocationResynchEvent(body.getLocation(new Vector3f()), body.getOrientation(new Quat4f())));
                entity.send(new PhysicsResynchEvent(body.getLinearVelocity(new Vector3f()), body.getAngularVelocity(new Vector3f())));
            }
        }
    }
}
Also used : Vector3f(org.terasology.math.geom.Vector3f) PhysicsResynchEvent(org.terasology.physics.events.PhysicsResynchEvent) LocationResynchEvent(org.terasology.logic.location.LocationResynchEvent) EntityRef(org.terasology.entitySystem.entity.EntityRef) Quat4f(org.terasology.math.geom.Quat4f)

Example 32 with Quat4f

use of org.terasology.math.geom.Quat4f in project Terasology by MovingBlocks.

the class CharacterMovementSystemUtility method setToInterpolateState.

public void setToInterpolateState(EntityRef entity, CharacterStateEvent a, CharacterStateEvent b, long time) {
    float t = (float) (time - a.getTime()) / (b.getTime() - a.getTime());
    Vector3f newPos = BaseVector3f.lerp(a.getPosition(), b.getPosition(), t);
    Quat4f newRot = BaseQuat4f.interpolate(a.getRotation(), b.getRotation(), t);
    LocationComponent location = entity.getComponent(LocationComponent.class);
    location.setWorldPosition(newPos);
    location.setWorldRotation(newRot);
    entity.saveComponent(location);
    CharacterMovementComponent movementComponent = entity.getComponent(CharacterMovementComponent.class);
    movementComponent.mode = a.getMode();
    movementComponent.setVelocity(a.getVelocity());
    movementComponent.grounded = a.isGrounded();
    if (b.getFootstepDelta() < a.getFootstepDelta()) {
        movementComponent.footstepDelta = t * (1 + b.getFootstepDelta() - a.getFootstepDelta()) + a.getFootstepDelta();
        if (movementComponent.footstepDelta > 1) {
            movementComponent.footstepDelta -= 1;
        }
    } else {
        movementComponent.footstepDelta = t * (b.getFootstepDelta() - a.getFootstepDelta()) + a.getFootstepDelta();
    }
    entity.saveComponent(movementComponent);
    setPhysicsLocation(entity, newPos);
}
Also used : Vector3f(org.terasology.math.geom.Vector3f) BaseVector3f(org.terasology.math.geom.BaseVector3f) LocationComponent(org.terasology.logic.location.LocationComponent) Quat4f(org.terasology.math.geom.Quat4f) BaseQuat4f(org.terasology.math.geom.BaseQuat4f)

Example 33 with Quat4f

use of org.terasology.math.geom.Quat4f in project Terasology by MovingBlocks.

the class KinematicCharacterMover method updateRotation.

@SuppressWarnings(value = "SuspiciousNameCombination")
private void updateRotation(CharacterMovementComponent movementComp, CharacterStateEvent result, CharacterMoveInputEvent input) {
    if (movementComp.faceMovementDirection && result.getVelocity().lengthSquared() > 0.01f) {
        float yaw = (float) Math.atan2(result.getVelocity().x, result.getVelocity().z);
        result.getRotation().set(new Vector3f(0, 1, 0), yaw);
    } else {
        result.getRotation().set(new Quat4f(TeraMath.DEG_TO_RAD * input.getYaw(), 0, 0));
    }
}
Also used : Vector3f(org.terasology.math.geom.Vector3f) Quat4f(org.terasology.math.geom.Quat4f)

Example 34 with Quat4f

use of org.terasology.math.geom.Quat4f in project Terasology by MovingBlocks.

the class VisualCharacterSystem method createAndAttachVisualEntity.

private EntityRef createAndAttachVisualEntity(EntityBuilder entityBuilder, EntityRef characterEntity) {
    entityBuilder.setPersistent(false);
    entityBuilder.setOwner(characterEntity);
    entityBuilder.addOrSaveComponent(new LocationComponent());
    EntityRef visualCharacterEntity = entityBuilder.build();
    Location.attachChild(characterEntity, visualCharacterEntity, new Vector3f(), new Quat4f(0, 0, 0, 1));
    return visualCharacterEntity;
}
Also used : Vector3f(org.terasology.math.geom.Vector3f) LocationComponent(org.terasology.logic.location.LocationComponent) EntityRef(org.terasology.entitySystem.entity.EntityRef) Quat4f(org.terasology.math.geom.Quat4f)

Example 35 with Quat4f

use of org.terasology.math.geom.Quat4f in project Terasology by MovingBlocks.

the class CoreCommands method spawnPrefab.

/**
 * Spawns an instance of a prefab in the world
 * @param sender Sender of command
 * @param prefabName String containing prefab name
 * @return String containing final message
 */
@Command(shortDescription = "Spawns an instance of a prefab in the world", runOnServer = true, requiredPermission = PermissionManager.CHEAT_PERMISSION)
public String spawnPrefab(@Sender EntityRef sender, @CommandParam("prefabId") String prefabName) {
    ClientComponent clientComponent = sender.getComponent(ClientComponent.class);
    LocationComponent characterLocation = clientComponent.character.getComponent(LocationComponent.class);
    Vector3f spawnPos = characterLocation.getWorldPosition();
    Vector3f offset = new Vector3f(characterLocation.getWorldDirection());
    offset.scale(2);
    spawnPos.add(offset);
    Vector3f dir = new Vector3f(characterLocation.getWorldDirection());
    dir.y = 0;
    if (dir.lengthSquared() > 0.001f) {
        dir.normalize();
    } else {
        dir.set(Direction.FORWARD.getVector3f());
    }
    Quat4f rotation = Quat4f.shortestArcQuat(Direction.FORWARD.getVector3f(), dir);
    Optional<Prefab> prefab = Assets.getPrefab(prefabName);
    if (prefab.isPresent() && prefab.get().getComponent(LocationComponent.class) != null) {
        entityManager.create(prefab.get(), spawnPos, rotation);
        return "Done";
    } else if (!prefab.isPresent()) {
        return "Unknown prefab";
    } else {
        return "Prefab cannot be spawned (no location component)";
    }
}
Also used : Vector3f(org.terasology.math.geom.Vector3f) ClientComponent(org.terasology.network.ClientComponent) LocationComponent(org.terasology.logic.location.LocationComponent) Prefab(org.terasology.entitySystem.prefab.Prefab) Quat4f(org.terasology.math.geom.Quat4f) Command(org.terasology.logic.console.commandSystem.annotations.Command) ConsoleCommand(org.terasology.logic.console.commandSystem.ConsoleCommand)

Aggregations

Quat4f (org.terasology.math.geom.Quat4f)50 Vector3f (org.terasology.math.geom.Vector3f)33 LocationComponent (org.terasology.logic.location.LocationComponent)16 EntityRef (org.terasology.entitySystem.entity.EntityRef)14 Matrix4f (org.terasology.math.geom.Matrix4f)9 ClientComponent (org.terasology.network.ClientComponent)7 BaseQuat4f (org.terasology.math.geom.BaseQuat4f)6 FloatBuffer (java.nio.FloatBuffer)4 Test (org.junit.Test)4 BaseVector3f (org.terasology.math.geom.BaseVector3f)4 ArrayList (java.util.ArrayList)3 EntityBuilder (org.terasology.entitySystem.entity.EntityBuilder)3 ReceiveEvent (org.terasology.entitySystem.event.ReceiveEvent)3 CharacterComponent (org.terasology.logic.characters.CharacterComponent)3 Lists (com.google.common.collect.Lists)2 TIntList (gnu.trove.list.TIntList)2 TIntArrayList (gnu.trove.list.array.TIntArrayList)2 IOException (java.io.IOException)2 InputStream (java.io.InputStream)2 Arrays (java.util.Arrays)2