Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
More joystick stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
bieh committed Jul 27, 2010
1 parent d269743 commit 1e24da2
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 11 deletions.
6 changes: 3 additions & 3 deletions android/testproject/jni/app-android.cpp
Expand Up @@ -48,7 +48,7 @@ extern "C" void Android_EnableFeature(int featureid, bool enabled);
bool bRenderingEnabled = false;

//Feature IDs
static const int FEATURE_SOUND = 1;
static const int FEATURE_AUDIO = 1;
static const int FEATURE_ACCEL = 2;

//Accelerometer data storage
Expand Down Expand Up @@ -76,7 +76,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved){
mActivityInstance = cls;
midCreateGLContext = mEnv->GetStaticMethodID(cls,"createGLContext","()V");
midFlipBuffers = mEnv->GetStaticMethodID(cls,"flipBuffers","()V");
midEnableFeature = mEnv->GetStaticMethodID(cls,"enableFeature","(I, I)V");
midEnableFeature = mEnv->GetStaticMethodID(cls,"enableFeature","(II)V");

if(!midCreateGLContext || !midFlipBuffers || !midEnableFeature){
__android_log_print(ANDROID_LOG_INFO, "SDL", "SDL: Bad mids\n");
Expand Down Expand Up @@ -196,7 +196,7 @@ extern "C" void Android_Render(){

extern "C" void Android_EnableFeature(int featureid, bool enabled){

mEnv->CallStaticVoidMethod(mActivityInstance, midFlipBuffers,
mEnv->CallStaticVoidMethod(mActivityInstance, midEnableFeature,
featureid, (int)enabled);
}

2 changes: 1 addition & 1 deletion android/testproject/jni/lesson05.c
Expand Up @@ -511,7 +511,7 @@ int SDL_main( int argc, char **argv )
resizeWindow( SCREEN_WIDTH, SCREEN_HEIGHT );


testAudio();
//testAudio();


/* wait for events */
Expand Down
75 changes: 68 additions & 7 deletions android/testproject/src/org/libsdl/android/SDLActivity.java
Expand Up @@ -13,6 +13,8 @@
import android.text.method.*;
import android.text.*;
import android.media.*;
import android.hardware.*;
import android.content.*;

import java.lang.*;

Expand All @@ -25,11 +27,16 @@ public class SDLActivity extends Activity {
//Main components
private static SDLActivity mSingleton;
private static SDLSurface mSurface;


//Audio
private static AudioTrack mAudioTrack;
private static boolean bAudioIsEnabled;

//Sensors
private static boolean bAccelIsEnabled;

//feature IDs. Must match up on the C side as well.
private static int FEATURE_SOUND = 1;
private static int FEATURE_AUDIO = 1;
private static int FEATURE_ACCEL = 2;

//Load the .so
Expand All @@ -52,6 +59,7 @@ protected void onCreate(Bundle savedInstanceState) {

}

//Audio
public static boolean initAudio(){

//blah. Hardcoded things are bad. FIXME when we have more sound stuff
Expand All @@ -61,9 +69,24 @@ public static boolean initAudio(){
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_8BIT,
2048,
AudioTrack.MODE_STREAM);
AudioTrack.MODE_STREAM);
bAudioIsEnabled = true;
return true;
}

//Accel
public static boolean initAccel(){
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true);
bAccelIsEnabled = true;
return true;
}

public static boolean closeAccel(){
mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false);
bAccelIsEnabled = false;
return true;
}


//Events
protected void onPause() {
Expand All @@ -87,7 +110,7 @@ protected void onResume() {
public static native void onNativeTouch(int action, float x,
float y, float p);
public static native void onNativeResize(int x, int y, int format);

public static native void onNativeAccel(float x, float y, float z);



Expand Down Expand Up @@ -117,14 +140,22 @@ public static void enableFeature(int featureid, int enabled){

//Yuck. This is all horribly inelegent. If it gets to more than a few
//'features' I'll rip this out and make something nicer, I promise :)
if(featureid == FEATURE_SOUND){
if(featureid == FEATURE_AUDIO){
if(enabled == 1){
initAudio();
}else{
//We don't have one of these yet...
//closeAudio();
}
}

else if(featureid == FEATURE_ACCEL){
if(enabled == 1){
initAccel();
}else{
closeAccel();
}
}
}


Expand Down Expand Up @@ -157,7 +188,7 @@ public void run(){
Because of this, that's where we set up the SDL thread
*/
class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
View.OnKeyListener, View.OnTouchListener {
View.OnKeyListener, View.OnTouchListener, SensorEventListener {

//This is what SDL runs in. It invokes SDL_main(), eventually
private Thread mSDLThread;
Expand All @@ -167,6 +198,9 @@ class SDLSurface extends SurfaceView implements SurfaceHolder.Callback,
private EGLSurface mEGLSurface;
private EGLDisplay mEGLDisplay;

//Sensors
private static SensorManager mSensorManager;

//Startup
public SDLSurface(Context context) {
super(context);
Expand All @@ -176,7 +210,9 @@ public SDLSurface(Context context) {
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
setOnTouchListener(this);
setOnTouchListener(this);

mSensorManager = (SensorManager)context.getSystemService("sensor");
}

//Called when we have a valid drawing surface
Expand Down Expand Up @@ -321,6 +357,31 @@ public boolean onTouch(View v, MotionEvent event){
return true;
}

//Sensor events
public void enableSensor(int sensortype, boolean enabled){
//TODO: This uses getDefaultSensor - what if we have >1 accels?
if(enabled){
mSensorManager.registerListener(this,
mSensorManager.getDefaultSensor(sensortype),
SensorManager.SENSOR_DELAY_GAME, null);
}else{
mSensorManager.unregisterListener(this,
mSensorManager.getDefaultSensor(sensortype));
}
}

public void onAccuracyChanged(Sensor sensor, int accuracy){
//TODO
}

public void onSensorChanged(SensorEvent event){
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
SDLActivity.onNativeAccel( event.values[0],
event.values[1],
event.values[2] );
}
}


}

Expand Down

0 comments on commit 1e24da2

Please sign in to comment.