Started programming the calibration state.

This commit is contained in:
2014-04-28 10:14:01 -04:30
parent e93d227b62
commit 139bb62067
7 changed files with 168 additions and 155 deletions

View File

@@ -16,7 +16,6 @@
package ve.ucv.ciens.ccg.nxtar; package ve.ucv.ciens.ccg.nxtar;
import ve.ucv.ciens.ccg.nxtar.interfaces.CVProcessor; import ve.ucv.ciens.ccg.nxtar.interfaces.CVProcessor;
import ve.ucv.ciens.ccg.nxtar.interfaces.MulticastEnabler;
import ve.ucv.ciens.ccg.nxtar.interfaces.NetworkConnectionListener; import ve.ucv.ciens.ccg.nxtar.interfaces.NetworkConnectionListener;
import ve.ucv.ciens.ccg.nxtar.interfaces.OSFunctionalityProvider; import ve.ucv.ciens.ccg.nxtar.interfaces.OSFunctionalityProvider;
import ve.ucv.ciens.ccg.nxtar.network.RobotControlThread; import ve.ucv.ciens.ccg.nxtar.network.RobotControlThread;
@@ -95,11 +94,10 @@ public class NxtARCore extends Game implements NetworkConnectionListener{
// Assorted fields. // Assorted fields.
public SpriteBatch batch; public SpriteBatch batch;
public CVProcessor cvProc; public CVProcessor cvProc;
private OSFunctionalityProvider toaster; private OSFunctionalityProvider osFunction;
// Networking related fields. // Networking related fields.
private int connections; private int connections;
private MulticastEnabler mcastEnabler;
private ServiceDiscoveryThread serviceDiscoveryThread; private ServiceDiscoveryThread serviceDiscoveryThread;
private VideoStreamingThread videoThread; private VideoStreamingThread videoThread;
private RobotControlThread robotThread; private RobotControlThread robotThread;
@@ -124,17 +122,10 @@ public class NxtARCore extends Game implements NetworkConnectionListener{
super(); super();
connections = 0; connections = 0;
try{ try{
this.toaster = (OSFunctionalityProvider)concreteApp; this.osFunction = (OSFunctionalityProvider)concreteApp;
}catch(ClassCastException cc){ }catch(ClassCastException cc){
Gdx.app.debug(TAG, CLASS_NAME + ".Main() :: concreteApp does not implement the Toaster interface. Toasting disabled."); Gdx.app.debug(TAG, CLASS_NAME + ".Main() :: concreteApp does not implement the Toaster interface. Toasting disabled.");
this.toaster = null; this.osFunction = null;
}
try{
this.mcastEnabler = (MulticastEnabler)concreteApp;
}catch(ClassCastException cc){
Gdx.app.error(TAG, CLASS_NAME + ".Main() :: concreteApp does not implement MulticastEnabler. Quitting.");
Gdx.app.exit();
} }
try{ try{
@@ -179,7 +170,7 @@ public class NxtARCore extends Game implements NetworkConnectionListener{
} }
// Start networking. // Start networking.
mcastEnabler.enableMulticast(); osFunction.enableMulticast();
Gdx.app.debug(TAG, CLASS_NAME + ".create() :: Creating network threads"); Gdx.app.debug(TAG, CLASS_NAME + ".create() :: Creating network threads");
serviceDiscoveryThread = ServiceDiscoveryThread.getInstance(); serviceDiscoveryThread = ServiceDiscoveryThread.getInstance();
@@ -326,16 +317,16 @@ public class NxtARCore extends Game implements NetworkConnectionListener{
if(connections >= 3){ if(connections >= 3){
Gdx.app.debug(TAG, CLASS_NAME + ".networkStreamConnected() :: Stopping service broadcast."); Gdx.app.debug(TAG, CLASS_NAME + ".networkStreamConnected() :: Stopping service broadcast.");
serviceDiscoveryThread.finish(); serviceDiscoveryThread.finish();
mcastEnabler.disableMulticast(); osFunction.disableMulticast();
toaster.showShortToast("Client connected"); osFunction.showShortToast("Client connected");
((MainMenuStateBase)states[game_states_t.MAIN_MENU.getValue()]).onClientConnected(); ((MainMenuStateBase)states[game_states_t.MAIN_MENU.getValue()]).onClientConnected();
} }
} }
public void toast(String msg, boolean longToast){ public void toast(String msg, boolean longToast){
if(toaster != null){ if(osFunction != null){
if(longToast) toaster.showLongToast(msg); if(longToast) osFunction.showLongToast(msg);
else toaster.showShortToast(msg); else osFunction.showShortToast(msg);
} }
} }
} }

View File

@@ -23,4 +23,6 @@ public interface CVProcessor {
} }
public CVData findMarkersInFrame(byte[] frame, int w, int h); public CVData findMarkersInFrame(byte[] frame, int w, int h);
public void calibrateCamera();
} }

View File

@@ -31,7 +31,7 @@ public abstract class BaseState implements Screen, ControllerListener, InputProc
/* STATE METHODS */ /* STATE METHODS */
public abstract void onStateSet(); public abstract void onStateSet();
public abstract void onStateUnset(); public abstract void onStateUnset();
/* SCREEN METHODS*/ /* SCREEN METHODS*/
@Override @Override
public abstract void render(float delta); public abstract void render(float delta);
@@ -50,39 +50,83 @@ public abstract class BaseState implements Screen, ControllerListener, InputProc
/* INPUT PROCESSOR METHODS. */ /* INPUT PROCESSOR METHODS. */
@Override @Override
public abstract boolean keyDown(int keycode); public boolean keyDown(int keycode){
return false;
};
@Override @Override
public abstract boolean keyUp(int keycode); public boolean keyUp(int keycode){
return false;
};
@Override @Override
public abstract boolean keyTyped(char character); public boolean keyTyped(char character){
return false;
};
@Override @Override
public abstract boolean touchDown(int screenX, int screenY, int pointer, int button); public boolean touchDown(int screenX, int screenY, int pointer, int button){
return false;
};
@Override @Override
public abstract boolean touchUp(int screenX, int screenY, int pointer, int button); public boolean touchUp(int screenX, int screenY, int pointer, int button){
return false;
};
@Override @Override
public abstract boolean touchDragged(int screenX, int screenY, int pointer); public boolean touchDragged(int screenX, int screenY, int pointer){
return false;
};
@Override @Override
public abstract boolean mouseMoved(int screenX, int screenY); public boolean mouseMoved(int screenX, int screenY){
return false;
};
@Override @Override
public abstract boolean scrolled(int amount); public boolean scrolled(int amount){
return false;
};
/* CONTROLLER LISTENER METHODS. */ /* CONTROLLER LISTENER METHODS. */
@Override @Override
public abstract void connected(Controller controller); public void connected(Controller controller){ };
@Override @Override
public abstract void disconnected(Controller controller); public void disconnected(Controller controller){ };
@Override @Override
public abstract boolean buttonDown(Controller controller, int buttonCode); public boolean buttonDown(Controller controller, int buttonCode){
return false;
};
@Override @Override
public abstract boolean buttonUp(Controller controller, int buttonCode); public boolean buttonUp(Controller controller, int buttonCode){
return false;
};
@Override @Override
public abstract boolean axisMoved(Controller controller, int axisCode, float value); public boolean axisMoved(Controller controller, int axisCode, float value){
return false;
};
@Override @Override
public abstract boolean povMoved(Controller controller, int povCode, PovDirection value); public boolean povMoved(Controller controller, int povCode, PovDirection value){
return false;
};
@Override @Override
public abstract boolean xSliderMoved(Controller controller, int sliderCode, boolean value); public boolean xSliderMoved(Controller controller, int sliderCode, boolean value){
return false;
};
@Override @Override
public abstract boolean ySliderMoved(Controller controller, int sliderCode, boolean value); public boolean ySliderMoved(Controller controller, int sliderCode, boolean value){
return false;
};
@Override @Override
public abstract boolean accelerometerMoved(Controller controller, int accelerometerCode, Vector3 value); public boolean accelerometerMoved(Controller controller, int accelerometerCode, Vector3 value){
return false;
};
} }

View File

@@ -0,0 +1,94 @@
/*
* Copyright (C) 2014 Miguel Angel Astor Romero
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ve.ucv.ciens.ccg.nxtar.states;
import ve.ucv.ciens.ccg.nxtar.utils.ProjectConstants;
import com.badlogic.gdx.controllers.Controller;
public class CameraCalibrationState extends BaseState{
private float[][] calibrationSamples;
public CameraCalibrationState(){
calibrationSamples = new float[ProjectConstants.CALIBRATION_SAMPLES][];
for(int i = 0; i < calibrationSamples.length; i++){
calibrationSamples[i] = new float[ProjectConstants.CALIBRATION_PATTERN_POINTS * 2];
}
}
@Override
public void onStateSet(){
for(int i = 0; i < calibrationSamples.length; i++){
for(int j = 0; j < calibrationSamples[i].length; j++){
calibrationSamples[i][j] = 0.0f;
}
}
}
@Override
public void onStateUnset(){ }
@Override
public void render(float delta){ }
@Override
public void resize(int width, int height){ }
@Override
public void show(){ }
@Override
public void hide(){ }
@Override
public void pause(){ }
@Override
public void resume(){ }
@Override
public void dispose(){ }
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button){
return false;
}
@Override
public boolean touchUp(int screenX, int screenY, int pointer, int button){
return false;
}
@Override
public boolean touchDragged(int screenX, int screenY, int pointer){
return false;
}
@Override
public boolean buttonDown(Controller controller, int buttonCode){
return false;
}
@Override
public boolean buttonUp(Controller controller, int buttonCode){
return false;
}
@Override
public boolean axisMoved(Controller controller, int axisCode, float value){
return false;
}
}

View File

@@ -30,7 +30,6 @@ import ve.ucv.ciens.ccg.nxtar.utils.Size;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.controllers.Controller; import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.controllers.PovDirection;
import com.badlogic.gdx.controllers.mappings.Ouya; import com.badlogic.gdx.controllers.mappings.Ouya;
import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.OrthographicCamera;
@@ -815,54 +814,4 @@ public class InGameState extends BaseState{
public boolean axisMoved(Controller controller, int axisCode, float value){ public boolean axisMoved(Controller controller, int axisCode, float value){
return false; return false;
} }
@Override
public void connected(Controller controller){ }
@Override
public void disconnected(Controller controller){ }
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;
; UNUSED LISTENER METHODS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
@Override
public boolean mouseMoved(int screenX, int screenY){
return false;
}
@Override
public boolean keyUp(int keycode){
return false;
}
@Override
public boolean keyTyped(char character){
return false;
}
@Override
public boolean povMoved(Controller controller, int povCode, PovDirection value){
return false;
}
@Override
public boolean xSliderMoved(Controller controller, int sliderCode, boolean value){
return false;
}
@Override
public boolean ySliderMoved(Controller controller, int sliderCode, boolean value){
return false;
}
@Override
public boolean accelerometerMoved(Controller controller, int accelerometerCode, Vector3 value){
return false;
}
@Override
public boolean scrolled(int amount){
return false;
}
} }

View File

@@ -20,8 +20,6 @@ import ve.ucv.ciens.ccg.nxtar.utils.ProjectConstants;
import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input; import com.badlogic.gdx.Input;
import com.badlogic.gdx.controllers.Controller;
import com.badlogic.gdx.controllers.PovDirection;
import com.badlogic.gdx.controllers.mappings.Ouya; import com.badlogic.gdx.controllers.mappings.Ouya;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.OrthographicCamera;
@@ -42,7 +40,6 @@ import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle; import com.badlogic.gdx.scenes.scene2d.ui.TextButton.TextButtonStyle;
import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable; import com.badlogic.gdx.scenes.scene2d.utils.NinePatchDrawable;
public abstract class MainMenuStateBase extends BaseState{ public abstract class MainMenuStateBase extends BaseState{
protected static final String TAG = "MAIN_MENU"; protected static final String TAG = "MAIN_MENU";
private static final String CLASS_NAME = MainMenuStateBase.class.getSimpleName(); private static final String CLASS_NAME = MainMenuStateBase.class.getSimpleName();
@@ -283,69 +280,4 @@ public abstract class MainMenuStateBase extends BaseState{
} }
return false; return false;
} }
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INPUT LISTENER METHOD STUBS ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/
@Override
public boolean keyUp(int keycode){
return false;
}
@Override
public boolean keyTyped(char character){
return false;
}
@Override
public boolean mouseMoved(int screenX, int screenY){
return false;
}
@Override
public boolean scrolled(int amount){
return false;
}
@Override
public void connected(Controller controller){ }
@Override
public void disconnected(Controller controller){ }
@Override
public boolean buttonDown(Controller controller, int buttonCode){
return false;
}
@Override
public boolean buttonUp(Controller controller, int buttonCode){
return false;
}
@Override
public boolean axisMoved(Controller controller, int axisCode, float value){
return false;
}
@Override
public boolean povMoved(Controller controller, int povCode, PovDirection value){
return false;
}
@Override
public boolean xSliderMoved(Controller controller, int sliderCode, boolean value){
return false;
}
@Override
public boolean ySliderMoved(Controller controller, int sliderCode, boolean value){
return false;
}
@Override
public boolean accelerometerMoved(Controller controller, int accelerometerCode, Vector3 value){
return false;
}
} }

View File

@@ -38,6 +38,7 @@ public abstract class ProjectConstants{
public static final String FONT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; public static final String FONT_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
public static final int CALIBRATION_PATTERN_POINTS = 54; public static final int CALIBRATION_PATTERN_POINTS = 54;
public static final int CALIBRATION_SAMPLES = 10;
static{ static{
OVERSCAN = Ouya.runningOnOuya ? 0.9f : 1.0f; OVERSCAN = Ouya.runningOnOuya ? 0.9f : 1.0f;