package org.deviceconnect.android.deviceplugin.theta.profile;
import org.deviceconnect.android.deviceplugin.theta.core.SphericalViewParam;
import org.deviceconnect.android.deviceplugin.theta.core.SphericalViewRenderer;
import org.deviceconnect.android.deviceplugin.theta.core.sensor.HeadTracker;
import org.deviceconnect.android.deviceplugin.theta.core.sensor.HeadTrackingListener;
import org.deviceconnect.android.deviceplugin.theta.utils.Quaternion;
abstract class Viewer implements HeadTrackingListener {
private String mId;
protected Projector mProjector;
protected HeadTracker mHeadTracker;
protected SphericalViewParam mCurrentParam = new SphericalViewParam();
public void setId(final String id) {
mId = id;
}
public String getId() {
return mId;
}
public void setProjector(final Projector projector) {
mProjector = projector;
}
public void setHeadTracker(final HeadTracker tracker) {
mHeadTracker = tracker;
}
public void start() {
mProjector.start();
}
public void stop() {
mProjector.stop();
mHeadTracker.unregisterTrackingListener(this);
}
public void setParameter(final SphericalViewParam param) {
if (!mCurrentParam.isVRMode() && param.isVRMode()) {
mHeadTracker.registerTrackingListener(this);
} else if (mCurrentParam.isVRMode() && !param.isVRMode()) {
mHeadTracker.unregisterTrackingListener(this);
}
mProjector.setParameter(param);
mCurrentParam = param;
}
public byte[] getImageCache() {
return mProjector.getImageCache();
}
@Override
public void onHeadRotated(final Quaternion rotation) {
if (mProjector == null) {
return;
}
SphericalViewRenderer renderer = mProjector.getRenderer();
if (renderer == null) {
return;
}
SphericalViewRenderer.Camera currentCamera = renderer.getCamera();
SphericalViewRenderer.CameraBuilder newCamera = new SphericalViewRenderer.CameraBuilder(currentCamera);
newCamera.rotate(rotation);
renderer.setCamera(newCamera.create());
}
}