package at.bakery.kippen.server.objects; import java.util.HashMap; import org.encog.util.arrayutil.NormalizationAction; import org.encog.util.arrayutil.NormalizedField; import at.bakery.kippen.common.AbstractData; import at.bakery.kippen.common.data.MoveData; import at.bakery.kippen.server.EventTypes; public class BallObject extends AbstractKippenObject { private double MOVE_DATA_THRESHHOLD = 0.1; private double MAX_LENGTH_VECTOR = 3.0; private boolean moveDataWasBelowThreshhold = false; public BallObject(String id, int timeout) { super(id,timeout); } @Override public void processData(AbstractData data) { super.processData(data); if (data instanceof MoveData) { processMoveData((MoveData) data); } } private void processMoveData(MoveData data) { double lengthVector = Math.abs(Math.sqrt(data.getX() * data.getX() + data.getY() * data.getY() + data.getZ() * data.getZ())); HashMap<String, String> paramMap = new HashMap<String, String>(); if (lengthVector > MOVE_DATA_THRESHHOLD) { NormalizedField normalizer = new NormalizedField(NormalizationAction.Normalize, null, MAX_LENGTH_VECTOR, 0.0, 1.0, 0.0); double normalizedValue = normalizer.normalize(lengthVector); paramMap.put("value", String.valueOf(normalizedValue)); executeCommands(paramMap, EventTypes.MOVE); moveDataWasBelowThreshhold = false; } else { // if we are below threshold set the value to 0 if (moveDataWasBelowThreshhold == false) { paramMap.put("value", String.valueOf(0.0f)); executeCommands(paramMap, EventTypes.MOVE); moveDataWasBelowThreshhold = true; } } } }