@Override
    public Set<SnapShotObject> handleEvent(InputEventDescriptor eventDescriptor, SnapShot snapShot, float time) {
        Collection<SSOId> targetIds = eventDescriptor.getInputEvent().getTargetIds();
        if(targetIds == null || targetIds.size() != 1) {
            return null;
        }
        
        SSOId targetId = targetIds.iterator().next();
        
        if(targetId.objectId != eventDescriptor.getOriginId()) {
            return null;
        }
        
        SnapShotObject target = snapShot.getSnapShotObjects().get(targetId);
        
        if(target == null) {
            return Collections.EMPTY_SET;
        }
        
        MoveEvent moveEvent = (MoveEvent)eventDescriptor.getInputEvent();
        Set<SnapShotObject> modifiedObjects = new HashSet<>(1);
        
        switch(moveEvent.getDirection()) {
            case FRONT:
                target.getPosition().z -= time * 3;
                break;
            case BACK:
                target.getPosition().z += time * 3;
                break;
            case LEFT:
                target.getPosition().x -= time * 3;
                break;
            case RIGHT:
                target.getPosition().x += time * 3;
                break;
            default:
                return null;
        }
        modifiedObjects.add(target);
        
        return modifiedObjects;
    }