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