package iamrescue.communication.messages.codec.property; import iamrescue.communication.messages.codec.BitStreamDecoder; import iamrescue.communication.messages.codec.BitStreamEncoder; import rescuecore2.worldmodel.Entity; import rescuecore2.worldmodel.Property; import rescuecore2.worldmodel.properties.IntProperty; public class PrecisionIntPropertyCodec extends APropertyCodec { private int precision; private String propertyKey; public PrecisionIntPropertyCodec(String propertyKey, int precision) { this.propertyKey = propertyKey; this.precision = precision; } @Override public Property decode(Entity object, BitStreamDecoder decoder) { int number = decoder.readNumber(); //System.out.print("Received " + number); number -= Byte.MIN_VALUE; number *= precision; // System.out.println(", converted back to " + number + " for " // + propertyKey); return new IntProperty(getPropertyKey(), number); } @Override public void encode(Entity object, Property property, BitStreamEncoder encoder) { IntProperty intProperty = (IntProperty) property; int value = intProperty.getValue(); int converted; if (precision == 1) { converted = value; } else { converted = (int) ((value / (double) precision) + 0.999999); } converted += Byte.MIN_VALUE; // System.out.println("Converted " + value + " to " + converted // + ". Byte: " + (byte) converted + " for " + propertyKey); encoder.appendNumber(converted); } @Override public String getPropertyKey() { return propertyKey; } }