diff --git a/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java b/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java index c4cf581ed..ecd4f64a6 100644 --- a/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java +++ b/engine/src/android/com/jme3/system/android/AndroidConfigChooser.java @@ -75,8 +75,25 @@ public class AndroidConfigChooser implements EGLConfigChooser if (type == ConfigType.BEST) { - ComponentSizeChooser compChooser = new ComponentSizeChooser(8, 8, 8, 8, 16, 0); + ComponentSizeChooser compChooser = new ComponentSizeChooser(8, 8, 8, 8, 32, 0); choosenConfig = compChooser.chooseConfig(egl, display); + + if (choosenConfig == null) + { + compChooser = new ComponentSizeChooser(8, 8, 8, 0, 32, 0); + choosenConfig = compChooser.chooseConfig(egl, display); + if (choosenConfig == null) + { + compChooser = new ComponentSizeChooser(8, 8, 8, 8, 16, 0); + choosenConfig = compChooser.chooseConfig(egl, display); + if (choosenConfig == null) + { + compChooser = new ComponentSizeChooser(8, 8, 8, 0, 16, 0); + choosenConfig = compChooser.chooseConfig(egl, display); + } + } + } + logger.info("JME3 using best EGL configuration available here: "); } else @@ -103,10 +120,11 @@ public class AndroidConfigChooser implements EGLConfigChooser } } + private int getPixelFormat(EGLConfig conf, EGLDisplay display, EGL10 egl) { int[] value = new int[1]; - int result = PixelFormat.RGB_565; + int result = PixelFormat.RGB_565; egl.eglGetConfigAttrib(display, conf, EGL10.EGL_RED_SIZE, value); if (value[0] == 8) @@ -129,7 +147,8 @@ public class AndroidConfigChooser implements EGLConfigChooser logger.info("Using PixelFormat " + result); } - return result; + //return result; TODO Test pixelformat + return PixelFormat.TRANSPARENT; } private int getOpenGLVersion(EGLConfig conf, EGLDisplay display, EGL10 egl) @@ -181,30 +200,6 @@ public class AndroidConfigChooser implements EGLConfigChooser egl.eglGetConfigAttrib(display, conf, EGL10.EGL_SURFACE_TYPE, value); logger.info(String.format("EGL_SURFACE_TYPE = %d", value[0] ) ); } - - - - - // Getter - Setter - - public EGLConfig getBestConfig() - { - return bestConfig; - } - - public void setBestConfig(EGLConfig bestConfig) - { - this.bestConfig = bestConfig; - } - public EGLConfig getFastestConfig() - { - return fastestConfig; - } - - public void setFastestConfig(EGLConfig fastestConfig) - { - this.fastestConfig = fastestConfig; - } public int getClientOpenGLESVersion() { @@ -225,8 +220,11 @@ public class AndroidConfigChooser implements EGLConfigChooser private abstract class BaseConfigChooser implements EGLConfigChooser { + private boolean bClientOpenGLESVersionSet; + public BaseConfigChooser(int[] configSpec) { + bClientOpenGLESVersionSet = false; mConfigSpec = filterConfigSpec(configSpec); } @@ -240,9 +238,11 @@ public class AndroidConfigChooser implements EGLConfigChooser int numConfigs = num_config[0]; - if (numConfigs <= 0) { - throw new IllegalArgumentException( - "No configs match configSpec"); + if (numConfigs <= 0) + { + //throw new IllegalArgumentException("No configs match configSpec"); + + return null; } EGLConfig[] configs = new EGLConfig[numConfigs]; @@ -251,9 +251,9 @@ public class AndroidConfigChooser implements EGLConfigChooser throw new IllegalArgumentException("eglChooseConfig#2 failed"); } EGLConfig config = chooseConfig(egl, display, configs); - if (config == null) { - throw new IllegalArgumentException("No config chosen"); - } + //if (config == null) { + // throw new IllegalArgumentException("No config chosen"); + //} return config; } @@ -264,7 +264,7 @@ public class AndroidConfigChooser implements EGLConfigChooser private int[] filterConfigSpec(int[] configSpec) { - if (clientOpenGLESVersion != 2) { + if (bClientOpenGLESVersionSet == true) { return configSpec; } /* We know none of the subclasses define EGL_RENDERABLE_TYPE. @@ -276,6 +276,9 @@ public class AndroidConfigChooser implements EGLConfigChooser newConfigSpec[len-1] = EGL10.EGL_RENDERABLE_TYPE; newConfigSpec[len] = 4; /* EGL_OPENGL_ES2_BIT */ newConfigSpec[len+1] = EGL10.EGL_NONE; + + bClientOpenGLESVersionSet = true; + return newConfigSpec; } } diff --git a/engine/src/android/jme3test/android/AboutActivity.java b/engine/src/android/jme3test/android/AboutActivity.java deleted file mode 100644 index 5af463fe0..000000000 --- a/engine/src/android/jme3test/android/AboutActivity.java +++ /dev/null @@ -1,65 +0,0 @@ -package jme3test.android; - -import java.util.ArrayList; -import java.util.List; - -import android.app.Activity; -import android.os.Bundle; - -import android.content.Intent; - -import android.view.View; -import android.view.MenuInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; - -import android.widget.TextView; -import android.widget.Button; -import android.widget.EditText; -import android.widget.CheckBox; -import android.widget.TableLayout; -import android.widget.LinearLayout; -import android.widget.TableRow; - -import android.hardware.SensorManager; -//import android.hardware.SensorListener; - -import jme3test.android.AndroidActivity; - -import java.net.URI; - -public class AboutActivity extends Activity { - - private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(AboutActivity.class.getName()); - - @Override - public void onCreate(Bundle savedInstanceState) { - logger.info("onCreate(" + savedInstanceState + ")"); - - super.onCreate(savedInstanceState); - - //setContentView(R.layout.about); - } - - @Override - public void onDestroy() { - logger.info("onDestroy()"); - super.onDestroy(); - } - - @Override - protected void onResume() { - super.onResume(); - } - - @Override - protected void onStart() { - super.onStart(); - } - - @Override - protected void onStop() { - super.onStop(); - } -} diff --git a/engine/src/android/jme3test/android/AndroidActivity.java b/engine/src/android/jme3test/android/AndroidActivity.java deleted file mode 100644 index b3cecd533..000000000 --- a/engine/src/android/jme3test/android/AndroidActivity.java +++ /dev/null @@ -1,149 +0,0 @@ - -/* - * - * Android Activity for OpenGL ES2 based tests - * requires Android 2.2+ - * - * created: Mon Nov 8 00:08:07 EST 2010 - */ -package jme3test.android; - -import android.app.Activity; -import android.content.res.Resources; -import android.opengl.GLSurfaceView; -import android.os.Bundle; -import android.view.Window; -import android.view.WindowManager; - -import com.jme3.system.AppSettings; -import com.jme3.system.JmeSystem; -import com.jme3.system.android.OGLESContext; - -import com.jme3.app.Application; -import com.jme3.app.SimpleApplication; - -public class AndroidActivity extends Activity { - - private final static java.util.logging.Logger logger = java.util.logging.Logger.getLogger(AndroidActivity.class.getName()); - private OGLESContext ctx; - private GLSurfaceView view; - private boolean useVA = false; - private boolean verboseLogging = false; - - @Override - public void onCreate(Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - JmeSystem.setResources(getResources()); - - requestWindowFeature(Window.FEATURE_NO_TITLE); - getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, - WindowManager.LayoutParams.FLAG_FULLSCREEN); - - AppSettings settings = new AppSettings(true); - - String testClassName = getIntent().getStringExtra(AndroidActivity.class.getName() + ".TEST_CLASS_NAME"); - - logger.info("test class name: [" + testClassName + "]"); - - String appClass = (testClassName != null ? testClassName : "jme3test.android.SimpleTexturedTest"); - - useVA = getIntent().getBooleanExtra(AndroidActivity.class.getName() + ".USE_VA", false); - - logger.info("USE_VA -> [" + useVA + "]"); - - settings.putBoolean("USE_VA", useVA); - - verboseLogging = getIntent().getBooleanExtra(AndroidActivity.class.getName() + ".VERBOSE_LOGGING", false); - - settings.putBoolean("VERBOSE_LOGGING", verboseLogging); - - Application app = null; - - try { - Class clazz = (Class) Class.forName( - appClass); - - app = clazz.newInstance(); - /* - app = (Application) java.lang.reflect.Proxy.newProxyInstance( - this.getClass().getClassLoader(), - new Class[] {Class.forName(appClass)}, - - new java.lang.reflect.InvocationHandler() { - public Object invoke(Object proxy, java.lang.reflect.Method method, Object[] args) throws Throwable { - if ( - method.getName().equals("loadFPSText") || - method.getName().equals("loadStatsView") - ) { - logger.info("ignoring method: [" + method + "]"); - return null; - } - - return method.invoke(proxy, args); - } - } - ); - */ - - - if (app instanceof SimpleApplication) { - ((SimpleApplication) app).setShowSettings(false); - } - - logger.info("setting settings ..."); - app.setSettings(settings); - logger.info("setting settings ... done."); - - logger.info("starting app ..."); - app.start(); - logger.info("starting app ... done."); - - if (app instanceof SimpleApplication) { - ((SimpleApplication) app).getGuiNode().detachAllChildren(); - } - - logger.info("creating context ..."); - ctx = (OGLESContext) app.getContext(); - logger.info("creating context ... done."); - - ctx.setSettings(settings); - - logger.info("creating view ..."); - view = ctx.createView(this); - logger.info("creating view ... done."); - - logger.info("setting content view ..."); - setContentView(view); - logger.info("setting content done ..."); - - } catch (Throwable exception) { - logger.warning("exception: " + exception); - exception.printStackTrace(System.err); - } - } - - @Override - protected void onResume() { - logger.info("onResume ..."); - super.onResume(); - logger.info("view.onResume ..."); - - view.onResume(); - - logger.info("view.onResume ... done."); - logger.info("onResume ... done."); - } - - @Override - protected void onPause() { - super.onPause(); - view.onPause(); - } -// @Override -// protected void onDestroy(){ -// super.onDestroy(); -// Debug.stopMethodTracing(); -// } -} diff --git a/engine/src/android/jme3test/android/AndroidManifest.xml b/engine/src/android/jme3test/android/AndroidManifest.xml new file mode 100644 index 000000000..a1f8f3fbf --- /dev/null +++ b/engine/src/android/jme3test/android/AndroidManifest.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/engine/src/android/jme3test/android/DemoAndroidHarness.java b/engine/src/android/jme3test/android/DemoAndroidHarness.java new file mode 100644 index 000000000..10b33d388 --- /dev/null +++ b/engine/src/android/jme3test/android/DemoAndroidHarness.java @@ -0,0 +1,55 @@ +package jme3test.android; + +import android.content.pm.ActivityInfo; +import android.os.Bundle; + +import com.jme3.app.AndroidHarness; +import com.jme3.system.android.AndroidConfigChooser.ConfigType; + +public class DemoAndroidHarness extends AndroidHarness +{ + @Override + public void onCreate(Bundle savedInstanceState) + { + // Set the application class to run + // First Extract the bundle from intent + Bundle bundle = getIntent().getExtras(); + + //Next extract the values using the key as + appClass = bundle.getString("APPCLASSNAME"); + + + String eglConfig = bundle.getString("EGLCONFIG"); + if (eglConfig.equals("Best")) + { + eglConfigType = ConfigType.BEST; + } + else if (eglConfig.equals("Legacy")) + { + eglConfigType = ConfigType.LEGACY; + } + else + { + eglConfigType = ConfigType.FASTEST; + } + + + if (bundle.getBoolean("VERBOSE")) + { + eglConfigVerboseLogging = true; + } + else + { + eglConfigVerboseLogging = false; + } + + + exitDialogTitle = "Close Demo?"; + exitDialogMessage = "Press Yes"; + + screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; + + super.onCreate(savedInstanceState); + } + +} diff --git a/engine/src/android/jme3test/android/DemoLaunchAdapter.java b/engine/src/android/jme3test/android/DemoLaunchAdapter.java new file mode 100644 index 000000000..3c74c8da6 --- /dev/null +++ b/engine/src/android/jme3test/android/DemoLaunchAdapter.java @@ -0,0 +1,73 @@ +package jme3test.android; + +import java.util.List; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.View.OnClickListener; +import android.widget.BaseAdapter; +import android.widget.TextView; + +/** + * The view adapter which gets a list of LaunchEntries and displaqs them + * @author larynx + * + */ +public class DemoLaunchAdapter extends BaseAdapter implements OnClickListener +{ + + private Context context; + + private List listDemos; + + public DemoLaunchAdapter(Context context, List listDemos) { + this.context = context; + this.listDemos = listDemos; + } + + public int getCount() { + return listDemos.size(); + } + + public Object getItem(int position) { + return listDemos.get(position); + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup viewGroup) { + DemoLaunchEntry entry = listDemos.get(position); + if (convertView == null) { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + convertView = inflater.inflate(R.layout.demo_row, null); + } + TextView tvDemoName = (TextView) convertView.findViewById(R.id.tvDemoName); + tvDemoName.setText(entry.getName()); + + TextView tvDescription = (TextView) convertView.findViewById(R.id.tvDescription); + tvDescription.setText(entry.getDescription()); + + return convertView; + } + + @Override + public void onClick(View view) { + DemoLaunchEntry entry = (DemoLaunchEntry) view.getTag(); + + + + + } + + private void showDialog(DemoLaunchEntry entry) { + // Create and show your dialog + // Depending on the Dialogs button clicks delete it or do nothing + } + +} + diff --git a/engine/src/android/jme3test/android/DemoLaunchEntry.java b/engine/src/android/jme3test/android/DemoLaunchEntry.java new file mode 100644 index 000000000..e23d5ebe7 --- /dev/null +++ b/engine/src/android/jme3test/android/DemoLaunchEntry.java @@ -0,0 +1,38 @@ +package jme3test.android; + +/** + * Name (=appClass) and Description of one demo launch inside the main apk + * @author larynx + * + */ +public class DemoLaunchEntry +{ + private String name; + private String description; + + /** + * @param name + * @param description + */ + public DemoLaunchEntry(String name, String description) { + super(); + this.name = name; + this.description = description; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + + +} diff --git a/engine/src/android/jme3test/android/DemoMainActivity.java b/engine/src/android/jme3test/android/DemoMainActivity.java new file mode 100644 index 000000000..b7433a744 --- /dev/null +++ b/engine/src/android/jme3test/android/DemoMainActivity.java @@ -0,0 +1,136 @@ +package jme3test.android; +import java.util.ArrayList; +import java.util.List; + +import android.app.Activity; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.view.View; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; +import android.widget.ArrayAdapter; +import android.widget.ListView; +import android.widget.Spinner; +import android.widget.Toast; +import android.widget.AdapterView.OnItemClickListener; + +public class DemoMainActivity extends Activity { + + /** Called when the activity is first created. */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.main); + + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + + final Intent myIntent = new Intent(DemoMainActivity.this, DemoAndroidHarness.class); + + //Next create the bundle and initialize it + final Bundle bundle = new Bundle(); + + + final Spinner spinnerConfig = (Spinner) findViewById(R.id.spinnerConfig); + ArrayAdapter adapterDropDownConfig = ArrayAdapter.createFromResource( + this, R.array.eglconfig_array, android.R.layout.simple_spinner_item); + adapterDropDownConfig.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerConfig.setAdapter(adapterDropDownConfig); + + + spinnerConfig.setOnItemSelectedListener(new OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, + View view, int pos, long id) { + Toast.makeText(parent.getContext(), "Set EGLConfig " + + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); + //Add the parameters to bundle as + bundle.putString("EGLCONFIG", parent.getItemAtPosition(pos).toString()); + } + + public void onNothingSelected(AdapterView parent) { + // Do nothing. + } + }); + + + final Spinner spinnerLogging = (Spinner) findViewById(R.id.spinnerLogging); + ArrayAdapter adapterDropDownLogging = ArrayAdapter.createFromResource( + this, R.array.logging_array, android.R.layout.simple_spinner_item); + adapterDropDownLogging.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + spinnerLogging.setAdapter(adapterDropDownLogging); + + + spinnerLogging.setOnItemSelectedListener(new OnItemSelectedListener() { + + @Override + public void onItemSelected(AdapterView parent, + View view, int pos, long id) { + Toast.makeText(parent.getContext(), "Set Logging " + + parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); + + //Add the parameters to bundle as + bundle.putBoolean("VERBOSE", parent.getItemAtPosition(pos).toString().equals("Verbose")); + } + + public void onNothingSelected(AdapterView parent) { + // Do nothing. + } + }); + + + ListView list = (ListView) findViewById(R.id.ListView01); + list.setClickable(true); + + final List listDemos = new ArrayList(); + + listDemos.add(new DemoLaunchEntry("jme3test.android.SimpleTexturedTest", "An field of textured boxes rotating")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestSkyLoadingLagoon", "Sky box demonstration with jpg")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestSkyLoadingPrimitives", "Sky box demonstration with png")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestBumpModel", "Shows a bump mapped well with a moving light")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestNormalMapping", "Shows a normal mapped sphere")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestUnshadedModel", "Shows an unshaded model of the sphere")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestMovingParticle", "Demonstrates particle effects")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestAmbient", "Positional sound - You sit in a dark cave under a waterfall")); + + //listDemos.add(new DemoLaunchEntry("jme3test.effect.TestParticleEmitter", "")); + //listDemos.add(new DemoLaunchEntry("jme3test.effect.TestPointSprite", "")); + //listDemos.add(new DemoLaunchEntry("jme3test.light.TestLightRadius", "")); + listDemos.add(new DemoLaunchEntry("jme3test.android.TestMotionPath", "Shows cinematics - see a teapot on its journey - model loading needs a long time - just let it load, looks like freezed")); + //listDemos.add(new DemoLaunchEntry("com.jme3.androiddemo.TestSimpleWater", "Post processors - not working correctly due to missing framebuffer support, looks interresting :)")); + //listDemos.add(new DemoLaunchEntry("jme3test.model.TestHoverTank", "")); + //listDemos.add(new DemoLaunchEntry("jme3test.niftygui.TestNiftyGui", "")); + //listDemos.add(new DemoLaunchEntry("com.jme3.androiddemo.TestNiftyGui", "")); + + + DemoLaunchAdapter adapterList = new DemoLaunchAdapter(this, listDemos); + + list.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView arg0, View view, int position, long index) { + System.out.println("onItemClick"); + showToast(listDemos.get(position).getName()); + + + //Add the parameters to bundle as + bundle.putString("APPCLASSNAME", listDemos.get(position).getName()); + + //Add this bundle to the intent + myIntent.putExtras(bundle); + + //Start the JME3 app harness activity + DemoMainActivity.this.startActivity(myIntent); + + } + }); + + list.setAdapter(adapterList); + } + + private void showToast(String message) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show(); + } +} + diff --git a/engine/src/android/jme3test/android/R.java b/engine/src/android/jme3test/android/R.java new file mode 100644 index 000000000..ffb1f3702 --- /dev/null +++ b/engine/src/android/jme3test/android/R.java @@ -0,0 +1,46 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package jme3test.android; + +public final class R { + public static final class array { + public static final int eglconfig_array=0x7f060000; + public static final int logging_array=0x7f060001; + } + public static final class attr { + } + public static final class drawable { + public static final int icon=0x7f020000; + } + public static final class id { + public static final int LinearLayout01=0x7f070000; + public static final int LinearLayout02=0x7f070002; + public static final int ListView01=0x7f070009; + public static final int TextView01=0x7f070003; + public static final int spinnerConfig=0x7f070006; + public static final int spinnerLogging=0x7f070008; + public static final int tvConfig=0x7f070005; + public static final int tvDemoName=0x7f070001; + public static final int tvDescription=0x7f070004; + public static final int tvLogging=0x7f070007; + } + public static final class layout { + public static final int demo_row=0x7f030000; + public static final int main=0x7f030001; + } + public static final class raw { + public static final int oddbounce=0x7f040000; + } + public static final class string { + public static final int app_name=0x7f050000; + public static final int eglconfig_prompt=0x7f050001; + public static final int eglconfig_text=0x7f050002; + public static final int logging_prompt=0x7f050003; + public static final int logging_text=0x7f050004; + } +} diff --git a/engine/src/android/jme3test/android/SimpleTexturedTest.java b/engine/src/android/jme3test/android/SimpleTexturedTest.java index fb0c70bbe..82c6596e2 100644 --- a/engine/src/android/jme3test/android/SimpleTexturedTest.java +++ b/engine/src/android/jme3test/android/SimpleTexturedTest.java @@ -4,8 +4,10 @@ * * created: Mon Nov 8 00:08:22 EST 2010 */ + package jme3test.android; + import java.util.List; import java.util.ArrayList; @@ -33,95 +35,130 @@ import com.jme3.util.TangentBinormalGenerator; import jme3tools.converters.model.ModelConverter; -public class SimpleTexturedTest extends SimpleApplication { +import java.awt.font.*; - private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(SimpleTexturedTest.class.getName()); - private Node spheresContainer = new Node("spheres-container"); - private boolean lightingEnabled = true; - private boolean texturedEnabled = true; - private boolean spheres = true; - - @Override - public void simpleInitApp() { - - /* - * GUI rendering is broken on Android right now and prevents the main view from rendering. - * Detaching all children lets the main view to be rendered. - */ - - guiNode.detachAllChildren(); - - Mesh shape = null; - - if (spheres) { - shape = new Sphere(16, 16, .5f); - } else { - shape = new Box(Vector3f.ZERO, 0.3f, 0.3f, 0.3f); - } - - // ModelConverter.optimize(geom); - - Texture texture = assetManager.loadTexture(new TextureKey("icons/textured.png")); - - Material material = null; - - if (texturedEnabled) { - if (lightingEnabled) { - material = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); - material.setBoolean("VertexLighting", true); - material.setFloat("Shininess", 127); - material.setBoolean("LowQuality", true); - material.setTexture("DiffuseMap", texture); - } else { - material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - material.setTexture("ColorMap", texture); - } - } else { - material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); - material.setColor("Color", ColorRGBA.Red); - } - - TangentBinormalGenerator.generate(shape); - - for (int y = -1; y < 2; y++) { - for (int x = -1; x < 2; x++) { - // int x = 0; - // int y = 0; - Geometry geomClone = new Geometry("geometry-" + y + "-" + x, shape); - geomClone.setMaterial(material); - geomClone.setLocalTranslation(x, y, 0); +public class SimpleTexturedTest extends SimpleApplication { + + private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(SimpleTexturedTest.class.getName()); + + + private Node spheresContainer = new Node("spheres-container"); + + + private boolean lightingEnabled = true; + private boolean texturedEnabled = true; + private boolean spheres = true; + + @Override + public void simpleInitApp() { + + //flyCam.setRotationSpeed(0.01f); + + + Mesh shapeSphere = null; + Mesh shapeBox = null; + + + shapeSphere = new Sphere(16, 16, .5f); + shapeBox = new Box(Vector3f.ZERO, 0.3f, 0.3f, 0.3f); + + + // ModelConverter.optimize(geom); + + Texture texture = assetManager.loadTexture(new TextureKey("Interface/Logo/Monkey.jpg")); + Texture textureMonkey = assetManager.loadTexture(new TextureKey("Interface/Logo/Monkey.jpg")); + + Material material = null; + Material materialMonkey = null; + + if (texturedEnabled) { + if (lightingEnabled) { + material = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); + material.setBoolean("VertexLighting", true); + material.setFloat("Shininess", 127); + material.setBoolean("LowQuality", true); + material.setTexture("DiffuseMap", texture); + + materialMonkey = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md"); + materialMonkey.setBoolean("VertexLighting", true); + materialMonkey.setFloat("Shininess", 127); + materialMonkey.setBoolean("LowQuality", true); + materialMonkey.setTexture("DiffuseMap", textureMonkey); + + } else { + material = new Material(assetManager, "Common/MatDefs/Misc/SimpleTextured.j3md"); + material.setTexture("ColorMap", texture); + + materialMonkey = new Material(assetManager, "Common/MatDefs/Misc/SimpleTextured.j3md"); + materialMonkey.setTexture("ColorMap", textureMonkey); + } + } else { + material = new Material(assetManager, "Common/MatDefs/Misc/SolidColor.j3md"); + material.setColor("Color", ColorRGBA.Red); + materialMonkey = new Material(assetManager, "Common/MatDefs/Misc/SolidColor.j3md"); + materialMonkey.setColor("Color", ColorRGBA.Red); + } + + TangentBinormalGenerator.generate(shapeSphere); + TangentBinormalGenerator.generate(shapeBox); + + int iFlipper = 0; + for (int y = -1; y < 2; y++) { + for (int x = -1; x < 2; x++){ + Geometry geomClone = null; + + //iFlipper++; + if (iFlipper % 2 == 0) + { + geomClone = new Geometry("geometry-" + y + "-" + x, shapeBox); + } + else + { + geomClone = new Geometry("geometry-" + y + "-" + x, shapeSphere); + } + if (iFlipper % 3 == 0) + { + geomClone.setMaterial(materialMonkey); + } + else + { + geomClone.setMaterial(material); + } + geomClone.setLocalTranslation(x, y, 0); + // Transform t = geom.getLocalTransform().clone(); // Transform t2 = geomClone.getLocalTransform().clone(); // t.combineWithParent(t2); // geomClone.setLocalTransform(t); - spheresContainer.attachChild(geomClone); - } - } + spheresContainer.attachChild(geomClone); + } + } + + spheresContainer.setLocalTranslation(new Vector3f(0, 0, -4f)); + spheresContainer.setLocalScale(2.0f); - spheresContainer.setLocalTranslation(new Vector3f(0, 0, -4f)); - spheresContainer.setLocalScale(2.0f); + rootNode.attachChild(spheresContainer); - rootNode.attachChild(spheresContainer); + PointLight pointLight = new PointLight(); - PointLight pointLight = new PointLight(); + pointLight.setColor(new ColorRGBA(0.7f, 0.7f, 1.0f, 1.0f)); - pointLight.setColor(new ColorRGBA(0.7f, 0.7f, 1.0f, 1.0f)); + pointLight.setPosition(new Vector3f(0f, 0f, 0f)); + pointLight.setRadius(8); - pointLight.setPosition(new Vector3f(0f, 0f, 0f)); - pointLight.setRadius(8); + rootNode.addLight(pointLight); + } - rootNode.addLight(pointLight); - } + @Override + public void simpleUpdate(float tpf) { - @Override - public void simpleUpdate(float tpf) { + if (secondCounter == 0) + logger.info("Frames per second: " + timer.getFrameRate()); - if (secondCounter == 0) { - logger.info("Frames per second: " + timer.getFrameRate()); - } + spheresContainer.rotate(0.2f * tpf, 0.4f * tpf, 0.8f * tpf); + } - spheresContainer.rotate(0.2f * tpf, 0.4f * tpf, 0.8f * tpf); - } } + diff --git a/engine/src/android/jme3test/android/Test.java b/engine/src/android/jme3test/android/Test.java deleted file mode 100644 index 95ca78c87..000000000 --- a/engine/src/android/jme3test/android/Test.java +++ /dev/null @@ -1,40 +0,0 @@ -package jme3test.android; - -import com.jme3.app.SimpleApplication; -import com.jme3.asset.TextureKey; -import com.jme3.material.Material; -import com.jme3.math.Transform; -import com.jme3.scene.Geometry; -import com.jme3.scene.shape.Sphere; -import com.jme3.texture.Texture; -import jme3tools.converters.model.ModelConverter; - -public class Test extends SimpleApplication { - - @Override - public void simpleInitApp() { - Sphere s = new Sphere(8, 8, .5f); - Geometry geom = new Geometry("sphere", s); - // ModelConverter.optimize(geom); - - Material mat = new Material(assetManager, "plain_texture.j3md"); - Texture tex = assetManager.loadTexture(new TextureKey("monkey.j3i")); - mat.setTexture("ColorMap", tex); -// geom.setMaterial(mat); - - for (int y = -1; y < 2; y++) { - for (int x = -1; x < 2; x++) { - Geometry geomClone = new Geometry("geom", s); - geomClone.setMaterial(mat); - geomClone.setLocalTranslation(x, y, 0); - - Transform t = geom.getLocalTransform().clone(); - Transform t2 = geomClone.getLocalTransform().clone(); - t.combineWithParent(t2); - geomClone.setLocalTransform(t); - - rootNode.attachChild(geomClone); - } - } - } -} diff --git a/engine/src/android/jme3test/android/TestAmbient.java b/engine/src/android/jme3test/android/TestAmbient.java new file mode 100644 index 000000000..0b8f0ea98 --- /dev/null +++ b/engine/src/android/jme3test/android/TestAmbient.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package jme3test.android; + +import android.app.Activity; +import android.media.AudioManager; +import android.media.SoundPool; + +import com.jme3.app.SimpleApplication; +import com.jme3.asset.DesktopAssetManager; +import com.jme3.audio.AudioNode; +import com.jme3.audio.Listener; +//import com.jme3.audio.PointAudioSource; +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; +import com.jme3.system.AppSettings; +import com.jme3.system.JmeSystem; + +public class TestAmbient extends SimpleApplication { + + private AudioNode footsteps, beep; + private AudioNode nature, waves; + + SoundPool soundPool; + +// private PointAudioSource waves; + private float time = 0; + private float nextTime = 1; + + public static void main(String[] args){ + TestAmbient test = new TestAmbient(); + test.start(); + } + + + @Override + public void simpleInitApp() + { + /* + footsteps = new AudioNode(audioRenderer, assetManager, "Sound/Effects/Foot steps.ogg", true); + + footsteps.setPositional(true); + footsteps.setLocalTranslation(new Vector3f(4, -1, 30)); + footsteps.setMaxDistance(5); + footsteps.setRefDistance(1); + footsteps.setLooping(true); + + beep = new AudioNode(audioRenderer, assetManager, "Sound/Effects/Beep.ogg", true); + beep.setVolume(3); + beep.setLooping(true); + + audioRenderer.playSourceInstance(footsteps); + audioRenderer.playSource(beep); + */ + + waves = new AudioNode(audioRenderer, assetManager, "Sound/Environment/Ocean Waves.ogg", true); + waves.setPositional(true); + + nature = new AudioNode(audioRenderer, assetManager, "Sound/Environment/Nature.ogg", true); + + waves.setLocalTranslation(new Vector3f(4, -1, 30)); + waves.setMaxDistance(5); + waves.setRefDistance(1); + + nature.setVolume(3); + audioRenderer.playSourceInstance(waves); + audioRenderer.playSource(nature); + } + + @Override + public void simpleUpdate(float tpf) + { + + } + +} diff --git a/engine/src/android/jme3test/android/TestBumpModel.java b/engine/src/android/jme3test/android/TestBumpModel.java new file mode 100644 index 000000000..ec9506517 --- /dev/null +++ b/engine/src/android/jme3test/android/TestBumpModel.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.asset.AssetKey; +import com.jme3.light.AmbientLight; +import com.jme3.light.DirectionalLight; +import com.jme3.light.PointLight; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.Spatial; +import com.jme3.scene.plugins.ogre.OgreMeshKey; +import com.jme3.scene.shape.Sphere; +import com.jme3.util.TangentBinormalGenerator; + +public class TestBumpModel extends SimpleApplication { + + float angle; + PointLight pl; + Spatial lightMdl; + + public static void main(String[] args){ + TestBumpModel app = new TestBumpModel(); + app.start(); + } + + @Override + public void simpleInitApp() { + Spatial signpost = (Spatial) assetManager.loadAsset(new OgreMeshKey("Models/Sign Post/Sign Post.mesh.xml")); + signpost.setMaterial( (Material) assetManager.loadMaterial("Models/Sign Post/Sign Post.j3m")); + TangentBinormalGenerator.generate(signpost); + rootNode.attachChild(signpost); + + lightMdl = new Geometry("Light", new Sphere(10, 10, 0.1f)); + lightMdl.setMaterial( (Material) assetManager.loadMaterial("Common/Materials/RedColor.j3m")); + rootNode.attachChild(lightMdl); + + // flourescent main light + pl = new PointLight(); + pl.setColor(new ColorRGBA(0.88f, 0.92f, 0.95f, 1.0f)); + rootNode.addLight(pl); + + AmbientLight al = new AmbientLight(); + al.setColor(new ColorRGBA(0.44f, 0.40f, 0.20f, 1.0f)); + rootNode.addLight(al); + + DirectionalLight dl = new DirectionalLight(); + dl.setDirection(new Vector3f(1,-1,-1).normalizeLocal()); + dl.setColor(new ColorRGBA(0.92f, 0.85f, 0.8f, 1.0f)); + rootNode.addLight(dl); + } + + @Override + public void simpleUpdate(float tpf){ + angle += tpf * 0.25f; + angle %= FastMath.TWO_PI; + + pl.setPosition(new Vector3f(FastMath.cos(angle) * 6f, 3f, FastMath.sin(angle) * 6f)); + lightMdl.setLocalTranslation(pl.getPosition()); + } + +} diff --git a/engine/src/android/jme3test/android/TestMovingParticle.java b/engine/src/android/jme3test/android/TestMovingParticle.java new file mode 100644 index 000000000..c34c3994e --- /dev/null +++ b/engine/src/android/jme3test/android/TestMovingParticle.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.effect.ParticleEmitter; +import com.jme3.effect.ParticleMesh.Type; +import com.jme3.effect.shapes.EmitterSphereShape; +import com.jme3.input.KeyInput; +import com.jme3.input.controls.ActionListener; +import com.jme3.input.controls.InputListener; +import com.jme3.input.controls.KeyTrigger; +import com.jme3.light.AmbientLight; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; + +/** + * Particle that moves in a circle. + * + * @author Kirill Vainer + */ +public class TestMovingParticle extends SimpleApplication { + + private ParticleEmitter emit; + private float angle = 0; + + public static void main(String[] args) { + TestMovingParticle app = new TestMovingParticle(); + app.start(); + } + + @Override + public void simpleInitApp() { + emit = new ParticleEmitter("Emitter", Type.Triangle, 300); + emit.setGravity(0, 0, 0); + emit.setVelocityVariation(1); + emit.setLowLife(1); + emit.setHighLife(1); + emit.setInitialVelocity(new Vector3f(0, .5f, 0)); + emit.setImagesX(15); + Material mat = new Material(assetManager, "Common/MatDefs/Misc/Particle.j3md"); + mat.setTexture("Texture", assetManager.loadTexture("Effects/Smoke/Smoke.png")); + emit.setMaterial(mat); + + rootNode.attachChild(emit); + + AmbientLight al = new AmbientLight(); + al.setColor(new ColorRGBA(0.84f, 0.80f, 0.80f, 1.0f)); + rootNode.addLight(al); + + + + inputManager.addListener(new ActionListener() { + + public void onAction(String name, boolean isPressed, float tpf) { + if ("setNum".equals(name) && isPressed) { + emit.setNumParticles(1000); + } + } + }, "setNum"); + + inputManager.addMapping("setNum", new KeyTrigger(KeyInput.KEY_SPACE)); + } + + @Override + public void simpleUpdate(float tpf) { + angle += tpf; + angle %= FastMath.TWO_PI; + float x = FastMath.cos(angle) * 2; + float y = FastMath.sin(angle) * 2; + emit.setLocalTranslation(x, 0, y); + } +} diff --git a/engine/src/android/jme3test/android/TestNormalMapping.java b/engine/src/android/jme3test/android/TestNormalMapping.java new file mode 100644 index 000000000..2dde1a486 --- /dev/null +++ b/engine/src/android/jme3test/android/TestNormalMapping.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.light.AmbientLight; +import com.jme3.light.DirectionalLight; +import com.jme3.light.PointLight; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.Spatial; +import com.jme3.scene.shape.Sphere; +import com.jme3.util.TangentBinormalGenerator; + +public class TestNormalMapping extends SimpleApplication { + + float angle; + PointLight pl; + Spatial lightMdl; + + public static void main(String[] args){ + TestNormalMapping app = new TestNormalMapping(); + app.start(); + } + + @Override + public void simpleInitApp() { + Sphere sphMesh = new Sphere(32, 32, 1); + sphMesh.setTextureMode(Sphere.TextureMode.Projected); + sphMesh.updateGeometry(32, 32, 1, false, false); + TangentBinormalGenerator.generate(sphMesh); + + Geometry sphere = new Geometry("Rock Ball", sphMesh); + Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); + sphere.setMaterial(mat); + rootNode.attachChild(sphere); + + lightMdl = new Geometry("Light", new Sphere(10, 10, 0.1f)); + lightMdl.setMaterial(assetManager.loadMaterial("Common/Materials/RedColor.j3m")); + rootNode.attachChild(lightMdl); + + pl = new PointLight(); + pl.setColor(ColorRGBA.White); + pl.setPosition(new Vector3f(0f, 0f, 4f)); + rootNode.addLight(pl); + + AmbientLight al = new AmbientLight(); + al.setColor(new ColorRGBA(0.44f, 0.40f, 0.20f, 1.0f)); + rootNode.addLight(al); + + DirectionalLight dl = new DirectionalLight(); + dl.setDirection(new Vector3f(1,-1,-1).normalizeLocal()); + dl.setColor(new ColorRGBA(0.92f, 0.85f, 0.8f, 1.0f)); + rootNode.addLight(dl); + } + + @Override + public void simpleUpdate(float tpf){ + angle += tpf * 0.25f; + angle %= FastMath.TWO_PI; + + pl.setPosition(new Vector3f(FastMath.cos(angle) * 4f, 0.5f, FastMath.sin(angle) * 4f)); + lightMdl.setLocalTranslation(pl.getPosition()); + } + +} diff --git a/engine/src/android/jme3test/android/TestSceneLoading.java b/engine/src/android/jme3test/android/TestSceneLoading.java deleted file mode 100644 index 73d8fb26c..000000000 --- a/engine/src/android/jme3test/android/TestSceneLoading.java +++ /dev/null @@ -1,35 +0,0 @@ -package jme3test.android; - -import com.jme3.app.SimpleApplication; -import com.jme3.math.Quaternion; -import com.jme3.math.Vector3f; -import com.jme3.scene.Node; -import com.jme3.scene.Spatial; -import com.jme3.scene.Spatial.CullHint; - -public class TestSceneLoading extends SimpleApplication { - - private void setState(Spatial s) { - s.setCullHint(CullHint.Never); - if (s instanceof Node) { - Node n = (Node) s; - for (int i = 0; i < n.getQuantity(); i++) { - Spatial s2 = n.getChild(i); - setState(s2); - } - } - } - - public void simpleInitApp() { - /* XXX: does not compile */ - - /* Spatial scene = inputManager.loadModel("FINAL_LEVEL2.j3o"); - // setState(scene); - rootNode.attachChild(scene); - - cam.setLocation(new Vector3f(-18.059685f, 34.64228f, 4.5048084f)); - cam.setRotation(new Quaternion(0.22396432f, 0.5235024f, -0.1448922f, 0.8091919f)); - cam.update(); - */ - } -} diff --git a/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java b/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java new file mode 100644 index 000000000..506d0fa02 --- /dev/null +++ b/engine/src/android/jme3test/android/TestSkyLoadingLagoon.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.scene.Spatial; +import com.jme3.texture.Texture; +import com.jme3.util.SkyFactory; +import com.jme3.util.android.AndroidSkyFactory; + +public class TestSkyLoadingLagoon extends SimpleApplication { + + public static void main(String[] args){ + TestSkyLoadingLagoon app = new TestSkyLoadingLagoon(); + app.start(); + } + + public void simpleInitApp() { + + Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); + Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); + Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); + Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); + Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); + Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); + + + /* + Texture west = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_x.png"); + Texture east = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_x.png"); + Texture north = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_z.png"); + Texture south = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_z.png"); + Texture up = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_y.png"); + Texture down = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_y.png"); + */ + + Spatial sky = AndroidSkyFactory.createSky(assetManager, west, east, north, south, up, down); + rootNode.attachChild(sky); + } + +} diff --git a/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java b/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java new file mode 100644 index 000000000..78add3c1d --- /dev/null +++ b/engine/src/android/jme3test/android/TestSkyLoadingPrimitives.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.scene.Spatial; +import com.jme3.texture.Texture; +import com.jme3.util.SkyFactory; +import com.jme3.util.android.AndroidSkyFactory; + +public class TestSkyLoadingPrimitives extends SimpleApplication { + + public static void main(String[] args){ + TestSkyLoadingPrimitives app = new TestSkyLoadingPrimitives(); + app.start(); + } + + public void simpleInitApp() { + /* + Texture west = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_west.jpg"); + Texture east = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_east.jpg"); + Texture north = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_north.jpg"); + Texture south = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_south.jpg"); + Texture up = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_up.jpg"); + Texture down = assetManager.loadTexture("Textures/Sky/Lagoon/lagoon_down.jpg"); + */ + + Texture west = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_x.png"); + Texture east = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_x.png"); + Texture north = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_z.png"); + Texture south = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_z.png"); + Texture up = assetManager.loadTexture("Textures/Sky/Primitives/primitives_positive_y.png"); + Texture down = assetManager.loadTexture("Textures/Sky/Primitives/primitives_negative_y.png"); + + Spatial sky = AndroidSkyFactory.createSky(assetManager, west, east, north, south, up, down); + rootNode.attachChild(sky); + } + +} diff --git a/engine/src/android/jme3test/android/TestUnshadedModel.java b/engine/src/android/jme3test/android/TestUnshadedModel.java new file mode 100644 index 000000000..4e4ff8c09 --- /dev/null +++ b/engine/src/android/jme3test/android/TestUnshadedModel.java @@ -0,0 +1,44 @@ +package jme3test.android; + +import com.jme3.app.SimpleApplication; +import com.jme3.light.AmbientLight; +import com.jme3.light.PointLight; +import com.jme3.material.Material; +import com.jme3.math.ColorRGBA; +import com.jme3.math.Vector3f; +import com.jme3.scene.Geometry; +import com.jme3.scene.shape.Sphere; +import com.jme3.util.TangentBinormalGenerator; + +public class TestUnshadedModel extends SimpleApplication { + + public static void main(String[] args){ + TestUnshadedModel app = new TestUnshadedModel(); + app.start(); + } + + @Override + public void simpleInitApp() { + Sphere sphMesh = new Sphere(32, 32, 1); + sphMesh.setTextureMode(Sphere.TextureMode.Projected); + sphMesh.updateGeometry(32, 32, 1, false, false); + TangentBinormalGenerator.generate(sphMesh); + + Geometry sphere = new Geometry("Rock Ball", sphMesh); + Material mat = assetManager.loadMaterial("Textures/Terrain/Pond/Pond.j3m"); + mat.setColor("Ambient", ColorRGBA.DarkGray); + mat.setColor("Diffuse", ColorRGBA.White); + mat.setBoolean("UseMaterialColors", true); + sphere.setMaterial(mat); + rootNode.attachChild(sphere); + + PointLight pl = new PointLight(); + pl.setColor(ColorRGBA.White); + pl.setPosition(new Vector3f(4f, 0f, 0f)); + rootNode.addLight(pl); + + AmbientLight al = new AmbientLight(); + al.setColor(ColorRGBA.White); + rootNode.addLight(al); + } +} diff --git a/engine/src/android/jme3test/android/TestsActivity.java b/engine/src/android/jme3test/android/TestsActivity.java deleted file mode 100644 index d94b074e8..000000000 --- a/engine/src/android/jme3test/android/TestsActivity.java +++ /dev/null @@ -1,171 +0,0 @@ -package jme3test.android; - -import java.util.ArrayList; -import java.util.List; - -import android.app.Activity; -import android.os.Bundle; - -import android.content.Intent; - -import android.view.View; -import android.view.MenuInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.MotionEvent; - -import android.widget.TextView; -import android.widget.Button; -import android.widget.EditText; -import android.widget.CheckBox; -import android.widget.TableLayout; -import android.widget.LinearLayout; -import android.widget.TableRow; - -import android.hardware.SensorManager; -//import android.hardware.SensorListener; - -import jme3test.android.AndroidActivity; - -import java.net.URI; - -public class TestsActivity extends Activity { - - private static final java.util.logging.Logger logger = java.util.logging.Logger.getLogger(TestsActivity.class.getName()); - - public static class Test { - - private String name = null; - private String className = null; - - public Test(String name, String className) { - this.name = name; - this.className = className; - } - - public String getName() { - return name; - } - - public String getClassName() { - return className; - } - } - private final static Test[] tests = { - new Test("SimpleTextured", "jme3test.android.SimpleTexturedTest"), - new Test("light.TestLightRadius", "jme3test.light.TestLightRadius"), - new Test("bullet.TestSimplePhysics", "jme3test.bullet.TestSimplePhysics"), - new Test("helloworld.HelloJME3", "jme3test.helloworld.HelloJME3"), - new Test("helloworld.HelloLoop", "jme3test.helloworld.HelloLoop"), - new Test("helloworld.HelloNode", "jme3test.helloworld.HelloNode"), - new Test("helloworld.HelloEffects", "jme3test.helloworld.HelloEffects"), - new Test("helloworld.HelloTerrain", "jme3test.helloworld.HelloTerrain") - }; - private boolean useVA; - - @Override - public void onCreate(Bundle savedInstanceState) { - logger.info("onCreate(" + savedInstanceState + ")"); - - super.onCreate(savedInstanceState); - - //setContentView(R.layout.tests); - - try { - - useVA = true; - - //LinearLayout buttonsContainer = (LinearLayout) findViewById(R.id.buttonsContainer); - - - for (Test test : tests) { - final Button button = new Button(this); - final String finalName = test.getName(); - final String finalClassName = test.getClassName(); - - button.setText(test.getName()); -// button.setTextSize(10.0f); -// button.setTextColor(Color.rgb(100, 200, 200)); - //buttonsContainer.addView(button); - - button.setOnClickListener( - new View.OnClickListener() { - - @Override - public void onClick(View view) { - Intent intent = new Intent(view.getContext(), AndroidActivity.class); - intent.putExtra(AndroidActivity.class.getName() + ".TEST_CLASS_NAME", finalClassName); - intent.putExtra(AndroidActivity.class.getName() + ".USE_VA", useVA); - startActivityForResult(intent, 0); - } - }); - } - } catch (Exception exception) { - logger.warning("exception: " + exception); - exception.printStackTrace(System.err); - } - } - - @Override - public void onDestroy() { - logger.info("onDestroy()"); - super.onDestroy(); - } - - @Override - protected void onResume() { - super.onResume(); - } - - @Override - protected void onStart() { - super.onStart(); - } - - @Override - protected void onStop() { - super.onStop(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - //inflater.inflate(R.menu.options, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - /* - switch (item.getItemId()) { - case R.id.about_button: - about(); - return true; - case R.id.quit_button: - quit(); - return true; - default: - return super.onOptionsItemSelected(item); - } - */ - return false; - } - - private void quit() { - finish(); - } - - private void about() { - // Intent intent = new Intent(getView().getContext(), AboutActivity.class); - try { - Intent intent = new Intent(); - intent.setClassName( - "jme3test.android", - "jme3test.android.AboutActivity"); - startActivity(intent); - } catch (Exception exception) { - logger.warning("exception: " + exception); - exception.printStackTrace(System.err); - } - } -}