package kukaWii.wiiHandle.consumer; import kukaWii.movement.MoveAction; import kukaWii.movement.MovementService; import kukaWii.simulation.Simulator; import kukaWii.wiiHandle.packet.AbstractPacket; import kukaWii.wiiHandle.packet.AccelerometerPacket; public class SimulationConsumer extends AbstractPacketConsumer { private MovementService movementService; private long predTimeStamp = 0; private double vx = 0; private double vy = 0; private double vz = 0; private double predAX = 0; private double predAY = 0; private double predAZ = 0; private static final int FACTOR = 100000; public SimulationConsumer() { super(); movementService = MovementService.getService(); new Simulator(); } @Override protected void consume(AbstractPacket packet) { if (packet instanceof AccelerometerPacket) { AccelerometerPacket accelPacket = (AccelerometerPacket) packet; // Das erste Paket muss leider verworfen werden, sonst gehts nicht if (predTimeStamp == 0) { predTimeStamp = accelPacket.getTimestamp(); //Vorherige beschleunigung nehmen predAX = accelPacket.getX(); predAY = accelPacket.getY(); predAZ = accelPacket.getZ(); } else { long timeDifference = accelPacket.getTimestamp() - predTimeStamp; long timeSquared = timeDifference * timeDifference; double actualAX = (predAX + accelPacket.getX())/2; double actualAY = (predAY + accelPacket.getY())/2; double actualAZ = (predAZ + accelPacket.getZ())/2; predAX = accelPacket.getX(); predAY = accelPacket.getY(); predAZ = accelPacket.getZ(); vx += timeDifference * actualAX; vy += timeDifference * actualAY; vz += timeDifference * actualAZ; double totalSpeed = Math.sqrt(Math.pow( (accelPacket.getX() * timeDifference), 2) + Math.pow((accelPacket.getY() * timeDifference), 2) + Math.pow((accelPacket.getZ() * timeDifference), 2))/FACTOR; movementService.addMoveAction(new MoveAction(accelPacket.getX() * timeSquared/FACTOR, accelPacket.getY() * timeSquared/FACTOR, accelPacket.getZ() * timeSquared/FACTOR, totalSpeed)); predTimeStamp = accelPacket.getTimestamp(); } } } }