mirror of
				https://github.com/Dejvino/roadtrip
				synced 2025-10-30 23:35:22 +00:00 
			
		
		
		
	Initial import of the first prototype.
This commit is contained in:
		
							parent
							
								
									b58ed3a454
								
							
						
					
					
						commit
						48ac62d3b0
					
				
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,7 +1,12 @@ | ||||
| # backups | ||||
| *.*~ | ||||
| 
 | ||||
| # binary / temporary | ||||
| *.class | ||||
| 
 | ||||
| # Mobile Tools for Java (J2ME) | ||||
| .mtj.tmp/ | ||||
| build/ | ||||
| dist/ | ||||
| nbproject/private/ | ||||
| 
 | ||||
| # Package Files # | ||||
| *.jar | ||||
|  | ||||
							
								
								
									
										
											BIN
										
									
								
								OpenAL64.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								OpenAL64.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								README.md
									
									
									
									
									
								
							| @ -1,2 +1,12 @@ | ||||
| # roadtrip | ||||
| Driving game | ||||
| # RoadTrip | ||||
| A game about a journey involving vehicles and obstacles. | ||||
| 
 | ||||
| ## Status | ||||
| ### DONE | ||||
| * Physics-based vehicle | ||||
| * Hilly ground | ||||
| 
 | ||||
| ### TODO | ||||
| * Orbit camera | ||||
| * Rigid objects (fences, houses) | ||||
| * People | ||||
|  | ||||
| @ -0,0 +1,20 @@ | ||||
| Material MyMaterial : Common/MatDefs/Terrain/TerrainLighting.j3md { | ||||
|     MaterialParameters { | ||||
|         DiffuseMap_0_scale : 16.0625 | ||||
|         WardIso : true | ||||
|         DiffuseMap : Flip Repeat /Textures/dirt.jpg | ||||
|         AlphaMap : /Textures/terrain-alpha/TestMap-terrain-TestMap-alphablend0.png | ||||
|         Shininess : 0.01 | ||||
|     } | ||||
|     AdditionalRenderState { | ||||
|       FaceCull Back | ||||
|       Wireframe Off | ||||
|       DepthWrite On | ||||
|       PolyOffset 0.0 0.0 | ||||
|       AlphaTestFalloff 0.0 | ||||
|       Blend Off | ||||
|       PointSprite Off | ||||
|       ColorWrite On | ||||
|       DepthTest On | ||||
|     } | ||||
| } | ||||
							
								
								
									
										
											BIN
										
									
								
								assets/Scenes/TestMap.j3o
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/Scenes/TestMap.j3o
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3
									
								
								assets/Scenes/TestMap.j3odata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								assets/Scenes/TestMap.j3odata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| # | ||||
| #Thu Dec 29 22:27:37 CET 2016 | ||||
| ORIGINAL_PATH=TestMap.j3o | ||||
							
								
								
									
										
											BIN
										
									
								
								assets/Textures/dirt.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/Textures/dirt.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 50 KiB | 
							
								
								
									
										2178
									
								
								assets/Textures/skybox.jpg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2178
									
								
								assets/Textures/skybox.jpg
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										74
									
								
								build.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								build.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,74 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!-- You may freely edit this file. See commented blocks below for --> | ||||
| <!-- some examples of how to customize the build. --> | ||||
| <!-- (If you delete it and reopen the project it will be recreated.) --> | ||||
| <!-- By default, only the Clean and Build commands use this build script. --> | ||||
| <!-- Commands such as Run, Debug, and Test only use this build script if --> | ||||
| <!-- the Compile on Save feature is turned off for the project. --> | ||||
| <!-- You can turn off the Compile on Save (or Deploy on Save) setting --> | ||||
| <!-- in the project's Project Properties dialog box.--> | ||||
| <project name="RoadTrip" default="default" basedir="."> | ||||
|     <description>Builds, tests, and runs the project RoadTrip.</description> | ||||
|     <import file="nbproject/build-impl.xml"/> | ||||
|     <!-- | ||||
| 
 | ||||
|     There exist several targets which are by default empty and which can be  | ||||
|     used for execution of your tasks. These targets are usually executed  | ||||
|     before and after some main targets. They are:  | ||||
| 
 | ||||
|       -pre-init:                 called before initialization of project properties | ||||
|       -post-init:                called after initialization of project properties | ||||
|       -pre-compile:              called before javac compilation | ||||
|       -post-compile:             called after javac compilation | ||||
|       -pre-compile-single:       called before javac compilation of single file | ||||
|       -post-compile-single:      called after javac compilation of single file | ||||
|       -pre-compile-test:         called before javac compilation of JUnit tests | ||||
|       -post-compile-test:        called after javac compilation of JUnit tests | ||||
|       -pre-compile-test-single:  called before javac compilation of single JUnit test | ||||
|       -post-compile-test-single: called after javac compilation of single JUunit test | ||||
|       -pre-jar:                  called before JAR building | ||||
|       -post-jar:                 called after JAR building | ||||
|       -post-clean:               called after cleaning build products | ||||
| 
 | ||||
|     (Targets beginning with '-' are not intended to be called on their own.) | ||||
| 
 | ||||
|     Example of inserting an obfuscator after compilation could look like this: | ||||
| 
 | ||||
|         <target name="-post-compile"> | ||||
|             <obfuscate> | ||||
|                 <fileset dir="${build.classes.dir}"/> | ||||
|             </obfuscate> | ||||
|         </target> | ||||
| 
 | ||||
|     For list of available properties check the imported  | ||||
|     nbproject/build-impl.xml file.  | ||||
| 
 | ||||
| 
 | ||||
|     Another way to customize the build is by overriding existing main targets. | ||||
|     The targets of interest are:  | ||||
| 
 | ||||
|       -init-macrodef-javac:     defines macro for javac compilation | ||||
|       -init-macrodef-junit:     defines macro for junit execution | ||||
|       -init-macrodef-debug:     defines macro for class debugging | ||||
|       -init-macrodef-java:      defines macro for class execution | ||||
|       -do-jar-with-manifest:    JAR building (if you are using a manifest) | ||||
|       -do-jar-without-manifest: JAR building (if you are not using a manifest) | ||||
|       run:                      execution of project  | ||||
|       -javadoc-build:           Javadoc generation | ||||
|       test-report:              JUnit report generation | ||||
| 
 | ||||
|     An example of overriding the target for project execution could look like this: | ||||
| 
 | ||||
|         <target name="run" depends="RoadTrip-impl.jar"> | ||||
|             <exec dir="bin" executable="launcher.exe"> | ||||
|                 <arg file="${dist.jar}"/> | ||||
|             </exec> | ||||
|         </target> | ||||
| 
 | ||||
|     Notice that the overridden target depends on the jar target and not only on  | ||||
|     the compile target as the regular run target does. Again, for a list of available  | ||||
|     properties which you can use, check the target you are overriding in the | ||||
|     nbproject/build-impl.xml file.  | ||||
| 
 | ||||
|     --> | ||||
| </project> | ||||
							
								
								
									
										
											BIN
										
									
								
								bulletjme64.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								bulletjme64.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								lwjgl64.dll
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								lwjgl64.dll
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										3
									
								
								manifest.mf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								manifest.mf
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| Manifest-Version: 1.0 | ||||
| X-COMMENT: Main-Class will be added automatically by build | ||||
| 
 | ||||
							
								
								
									
										15
									
								
								nbproject/assets-impl.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								nbproject/assets-impl.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!--assets-impl.xml v1.0--> | ||||
| <project name="assets-impl" basedir=".."> | ||||
|     <target name="-init-assets"> | ||||
|         <jar jarfile="${build.dir}/${assets.jar.name}" excludes="${assets.excludes}" basedir="${assets.folder.name}" compress="${assets.compress}"/> | ||||
|         <property location="${assets.folder.name}" name="assets.dir.resolved"/> | ||||
|         <property location="${build.dir}/${assets.jar.name}" name="assets.jar.resolved"/> | ||||
|         <property location="${build.classes.dir}" name="build.classes.dir.resolved"/> | ||||
|         <pathconvert property="run.classpath.without.build.classes.dir"> | ||||
|         <path path="${run.classpath}"/> | ||||
|         <map from="${build.classes.dir.resolved}" to=""/> | ||||
|         <map from="${assets.dir.resolved}" to="${assets.jar.resolved}"/> | ||||
|         </pathconvert> | ||||
|     </target> | ||||
| </project> | ||||
							
								
								
									
										1412
									
								
								nbproject/build-impl.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1412
									
								
								nbproject/build-impl.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										8
									
								
								nbproject/genfiles.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								nbproject/genfiles.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,8 @@ | ||||
| build.xml.data.CRC32=ffdc6a51 | ||||
| build.xml.script.CRC32=972047c8 | ||||
| build.xml.stylesheet.CRC32=28e38971@1.56.1.46 | ||||
| # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. | ||||
| # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. | ||||
| nbproject/build-impl.xml.data.CRC32=ffdc6a51 | ||||
| nbproject/build-impl.xml.script.CRC32=60ad5220 | ||||
| nbproject/build-impl.xml.stylesheet.CRC32=c6d2a60f@1.56.1.46 | ||||
							
								
								
									
										89
									
								
								nbproject/project.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								nbproject/project.properties
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,89 @@ | ||||
| annotation.processing.enabled=true | ||||
| annotation.processing.enabled.in.editor=false | ||||
| annotation.processing.processors.list= | ||||
| annotation.processing.run.all.processors=true | ||||
| annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output | ||||
| application.title=RoadTrip | ||||
| application.vendor=dejvino | ||||
| assets.compress=true | ||||
| assets.excludes=**/*.j3odata,**/*.mesh,**/*.skeleton,**/*.mesh.xml,**/*.skeleton.xml,**/*.scene,**/*.material,**/*.obj,**/*.mtl,**/*.3ds,**/*.dae,**/*.blend,**/*.blend*[0-9] | ||||
| assets.folder.name=assets | ||||
| assets.jar.name=assets.jar | ||||
| build.classes.dir=${build.dir}/classes | ||||
| build.classes.excludes=**/*.java,**/*.form | ||||
| # This directory is removed when the project is cleaned: | ||||
| build.dir=build | ||||
| build.generated.dir=${build.dir}/generated | ||||
| build.generated.sources.dir=${build.dir}/generated-sources | ||||
| # Only compile against the classpath explicitly listed here: | ||||
| build.sysclasspath=ignore | ||||
| build.test.classes.dir=${build.dir}/test/classes | ||||
| build.test.results.dir=${build.dir}/test/results | ||||
| # Uncomment to specify the preferred debugger connection transport: | ||||
| #debug.transport=dt_socket | ||||
| debug.classpath=\ | ||||
|     ${run.classpath} | ||||
| debug.test.classpath=\ | ||||
|     ${run.test.classpath} | ||||
| # This directory is removed when the project is cleaned: | ||||
| dist.dir=dist | ||||
| dist.jar=${dist.dir}/RoadTrip.jar | ||||
| dist.javadoc.dir=${dist.dir}/javadoc | ||||
| endorsed.classpath= | ||||
| excludes= | ||||
| file.reference.RoadTrip-assets=assets | ||||
| includes=** | ||||
| jar.compress=false | ||||
| javac.classpath=\ | ||||
|     ${libs.jme3.classpath}:\ | ||||
|     ${libs.jme3-libraries-physics.classpath}:\ | ||||
|     ${libs.jme3-libraries-physics-native.classpath}:\ | ||||
|     ${libs.jme3-test-data.classpath} | ||||
| # Space-separated list of extra javac options | ||||
| javac.compilerargs= | ||||
| javac.deprecation=false | ||||
| javac.processorpath=\ | ||||
|     ${javac.classpath} | ||||
| javac.source=1.7 | ||||
| javac.target=1.7 | ||||
| javac.test.classpath=\ | ||||
|     ${javac.classpath}:\ | ||||
|     ${build.classes.dir} | ||||
| javac.test.processorpath=\ | ||||
|     ${javac.test.classpath} | ||||
| javadoc.additionalparam= | ||||
| javadoc.author=false | ||||
| javadoc.encoding=${source.encoding} | ||||
| javadoc.noindex=false | ||||
| javadoc.nonavbar=false | ||||
| javadoc.notree=false | ||||
| javadoc.private=false | ||||
| javadoc.splitindex=true | ||||
| javadoc.use=true | ||||
| javadoc.version=false | ||||
| javadoc.windowtitle= | ||||
| main.class=roadtrip.RoadTrip | ||||
| manifest.file=manifest.mf | ||||
| meta.inf.dir=${src.dir}/META-INF | ||||
| mkdist.disabled=false | ||||
| obfuscate.options=-keep public class * extends com.jme3.app.Application{public *;}\n-keep public class * extends com.jme3.system.JmeSystemDelegate{public *;}\n-keep public class * implements com.jme3.renderer.Renderer{public *;}\n-keep public class * implements com.jme3.asset.AssetLoader{public *;}\n-keep public class * implements com.jme3.asset.AssetLocator{public *;}\n-keep public class * implements de.lessvoid.nifty.screen.ScreenController{public *;}\n-dontwarn\n-dontnote\n | ||||
| platform.active=default_platform | ||||
| run.classpath=\ | ||||
|     ${javac.classpath}:\ | ||||
|     ${build.classes.dir}:\ | ||||
|     ${libs.jme3.classpath}:\ | ||||
|     ${libs.jme3-libraries.classpath}:\ | ||||
|     ${libs.jme3-test-data.classpath}:\ | ||||
|     ${libs.jme3-libraries-physics.classpath}:\ | ||||
|     ${libs.jme3-libraries-physics-native.classpath}:\ | ||||
|     ${file.reference.RoadTrip-assets} | ||||
| # Space-separated list of JVM arguments used when running the project. | ||||
| # You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. | ||||
| # To set system properties for unit tests define test-sys-prop.name=value: | ||||
| run.jvmargs= | ||||
| run.test.classpath=\ | ||||
|     ${javac.test.classpath}:\ | ||||
|     ${build.test.classes.dir} | ||||
| source.encoding=UTF-8 | ||||
| src.dir=src | ||||
| test.src.dir=test | ||||
							
								
								
									
										20
									
								
								nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <project xmlns="http://www.netbeans.org/ns/project/1"> | ||||
|     <type>org.netbeans.modules.java.j2seproject</type> | ||||
|     <configuration> | ||||
| 	<buildExtensions xmlns="http://www.netbeans.org/ns/ant-build-extender/1"> | ||||
|             <extension file="assets-impl.xml" id="assets"> | ||||
|                 <dependency dependsOn="-init-assets" target="-do-init"/> | ||||
|             </extension> | ||||
|         </buildExtensions> | ||||
|         <data xmlns="http://www.netbeans.org/ns/j2se-project/3"> | ||||
|             <name>RoadTrip</name> | ||||
|             <source-roots> | ||||
|                 <root id="src.dir"/> | ||||
|             </source-roots> | ||||
|             <test-roots> | ||||
|                 <root id="test.src.dir"/> | ||||
|             </test-roots> | ||||
|         </data> | ||||
|     </configuration> | ||||
| </project> | ||||
							
								
								
									
										242
									
								
								src/roadtrip/PhysicsTestHelper.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								src/roadtrip/PhysicsTestHelper.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,242 @@ | ||||
| /* | ||||
|  * Copyright (c) 2009-2012 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 roadtrip; | ||||
| 
 | ||||
| import com.jme3.app.Application; | ||||
| import com.jme3.asset.AssetManager; | ||||
| import com.jme3.asset.TextureKey; | ||||
| import com.jme3.bullet.PhysicsSpace; | ||||
| import com.jme3.bullet.collision.shapes.CollisionShape; | ||||
| import com.jme3.bullet.collision.shapes.MeshCollisionShape; | ||||
| import com.jme3.bullet.control.RigidBodyControl; | ||||
| import com.jme3.input.MouseInput; | ||||
| import com.jme3.input.controls.ActionListener; | ||||
| import com.jme3.input.controls.MouseButtonTrigger; | ||||
| import com.jme3.light.AmbientLight; | ||||
| import com.jme3.material.Material; | ||||
| import com.jme3.math.ColorRGBA; | ||||
| import com.jme3.renderer.queue.RenderQueue.ShadowMode; | ||||
| import com.jme3.scene.Geometry; | ||||
| import com.jme3.scene.Node; | ||||
| import com.jme3.scene.shape.Box; | ||||
| import com.jme3.scene.shape.Sphere; | ||||
| import com.jme3.scene.shape.Sphere.TextureMode; | ||||
| import com.jme3.texture.Texture; | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @author normenhansen | ||||
|  */ | ||||
| public class PhysicsTestHelper { | ||||
| 
 | ||||
|     /** | ||||
|      * creates a simple physics test world with a floor, an obstacle and some test boxes | ||||
|      * @param rootNode | ||||
|      * @param assetManager | ||||
|      * @param space | ||||
|      */ | ||||
|     public static void createPhysicsTestWorld(Node rootNode, AssetManager assetManager, PhysicsSpace space) { | ||||
|         AmbientLight light = new AmbientLight(); | ||||
|         light.setColor(ColorRGBA.LightGray); | ||||
|         rootNode.addLight(light); | ||||
| 
 | ||||
|         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg")); | ||||
| 
 | ||||
|         Box floorBox = new Box(140, 0.25f, 140); | ||||
|         Geometry floorGeometry = new Geometry("Floor", floorBox); | ||||
|         floorGeometry.setMaterial(material); | ||||
|         floorGeometry.setLocalTranslation(0, -5, 0); | ||||
| //        Plane plane = new Plane(); | ||||
| //        plane.setOriginNormal(new Vector3f(0, 0.25f, 0), Vector3f.UNIT_Y); | ||||
| //        floorGeometry.addControl(new RigidBodyControl(new PlaneCollisionShape(plane), 0)); | ||||
|         floorGeometry.addControl(new RigidBodyControl(0)); | ||||
|         rootNode.attachChild(floorGeometry); | ||||
|         space.add(floorGeometry); | ||||
| 
 | ||||
|         //movable boxes | ||||
|         for (int i = 0; i < 12; i++) { | ||||
|             Box box = new Box(0.25f, 0.25f, 0.25f); | ||||
|             Geometry boxGeometry = new Geometry("Box", box); | ||||
|             boxGeometry.setMaterial(material); | ||||
|             boxGeometry.setLocalTranslation(i, 5, -3); | ||||
|             //RigidBodyControl automatically uses box collision shapes when attached to single geometry with box mesh | ||||
|             boxGeometry.addControl(new RigidBodyControl(2)); | ||||
|             rootNode.attachChild(boxGeometry); | ||||
|             space.add(boxGeometry); | ||||
|         } | ||||
| 
 | ||||
|         //immovable sphere with mesh collision shape | ||||
|         Sphere sphere = new Sphere(8, 8, 1); | ||||
|         Geometry sphereGeometry = new Geometry("Sphere", sphere); | ||||
|         sphereGeometry.setMaterial(material); | ||||
|         sphereGeometry.setLocalTranslation(4, -4, 2); | ||||
|         sphereGeometry.addControl(new RigidBodyControl(new MeshCollisionShape(sphere), 0)); | ||||
|         rootNode.attachChild(sphereGeometry); | ||||
|         space.add(sphereGeometry); | ||||
| 
 | ||||
|     } | ||||
|      | ||||
|     public static void createPhysicsTestWorldSoccer(Node rootNode, AssetManager assetManager, PhysicsSpace space) { | ||||
|         AmbientLight light = new AmbientLight(); | ||||
|         light.setColor(ColorRGBA.LightGray); | ||||
|         rootNode.addLight(light); | ||||
| 
 | ||||
|         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg")); | ||||
| 
 | ||||
|         Box floorBox = new Box(20, 0.25f, 20); | ||||
|         Geometry floorGeometry = new Geometry("Floor", floorBox); | ||||
|         floorGeometry.setMaterial(material); | ||||
|         floorGeometry.setLocalTranslation(0, -0.25f, 0); | ||||
| //        Plane plane = new Plane(); | ||||
| //        plane.setOriginNormal(new Vector3f(0, 0.25f, 0), Vector3f.UNIT_Y); | ||||
| //        floorGeometry.addControl(new RigidBodyControl(new PlaneCollisionShape(plane), 0)); | ||||
|         floorGeometry.addControl(new RigidBodyControl(0)); | ||||
|         rootNode.attachChild(floorGeometry); | ||||
|         space.add(floorGeometry); | ||||
| 
 | ||||
|         //movable spheres | ||||
|         for (int i = 0; i < 5; i++) { | ||||
|             Sphere sphere = new Sphere(16, 16, .5f); | ||||
|             Geometry ballGeometry = new Geometry("Soccer ball", sphere); | ||||
|             ballGeometry.setMaterial(material); | ||||
|             ballGeometry.setLocalTranslation(i, 2, -3); | ||||
|             //RigidBodyControl automatically uses Sphere collision shapes when attached to single geometry with sphere mesh | ||||
|             ballGeometry.addControl(new RigidBodyControl(.001f)); | ||||
|             ballGeometry.getControl(RigidBodyControl.class).setRestitution(1); | ||||
|             rootNode.attachChild(ballGeometry); | ||||
|             space.add(ballGeometry); | ||||
|         } | ||||
|         { | ||||
|         //immovable Box with mesh collision shape | ||||
|         Box box = new Box(1, 1, 1); | ||||
|         Geometry boxGeometry = new Geometry("Box", box); | ||||
|         boxGeometry.setMaterial(material); | ||||
|         boxGeometry.setLocalTranslation(4, 1, 2); | ||||
|         boxGeometry.addControl(new RigidBodyControl(new MeshCollisionShape(box), 0)); | ||||
|         rootNode.attachChild(boxGeometry); | ||||
|         space.add(boxGeometry); | ||||
|         } | ||||
|         { | ||||
|         //immovable Box with mesh collision shape | ||||
|         Box box = new Box(1, 1, 1); | ||||
|         Geometry boxGeometry = new Geometry("Box", box); | ||||
|         boxGeometry.setMaterial(material); | ||||
|         boxGeometry.setLocalTranslation(4, 3, 4); | ||||
|         boxGeometry.addControl(new RigidBodyControl(new MeshCollisionShape(box), 0)); | ||||
|         rootNode.attachChild(boxGeometry); | ||||
|         space.add(boxGeometry); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * creates a box geometry with a RigidBodyControl | ||||
|      * @param assetManager | ||||
|      * @return | ||||
|      */ | ||||
|     public static Geometry createPhysicsTestBox(AssetManager assetManager) { | ||||
|         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg")); | ||||
|         Box box = new Box(0.25f, 0.25f, 0.25f); | ||||
|         Geometry boxGeometry = new Geometry("Box", box); | ||||
|         boxGeometry.setMaterial(material); | ||||
|         //RigidBodyControl automatically uses box collision shapes when attached to single geometry with box mesh | ||||
|         boxGeometry.addControl(new RigidBodyControl(2)); | ||||
|         return boxGeometry; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * creates a sphere geometry with a RigidBodyControl | ||||
|      * @param assetManager | ||||
|      * @return | ||||
|      */ | ||||
|     public static Geometry createPhysicsTestSphere(AssetManager assetManager) { | ||||
|         Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg")); | ||||
|         Sphere sphere = new Sphere(8, 8, 0.25f); | ||||
|         Geometry boxGeometry = new Geometry("Sphere", sphere); | ||||
|         boxGeometry.setMaterial(material); | ||||
|         //RigidBodyControl automatically uses sphere collision shapes when attached to single geometry with sphere mesh | ||||
|         boxGeometry.addControl(new RigidBodyControl(2)); | ||||
|         return boxGeometry; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * creates an empty node with a RigidBodyControl | ||||
|      * @param manager | ||||
|      * @param shape | ||||
|      * @param mass | ||||
|      * @return | ||||
|      */ | ||||
|     public static Node createPhysicsTestNode(AssetManager manager, CollisionShape shape, float mass) { | ||||
|         Node node = new Node("PhysicsNode"); | ||||
|         RigidBodyControl control = new RigidBodyControl(shape, mass); | ||||
|         node.addControl(control); | ||||
|         return node; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * creates the necessary inputlistener and action to shoot balls from teh camera | ||||
|      * @param app | ||||
|      * @param rootNode | ||||
|      * @param space | ||||
|      */ | ||||
|     public static void createBallShooter(final Application app, final Node rootNode, final PhysicsSpace space) { | ||||
|         ActionListener actionListener = new ActionListener() { | ||||
| 
 | ||||
|             public void onAction(String name, boolean keyPressed, float tpf) { | ||||
|                 Sphere bullet = new Sphere(32, 32, 0.4f, true, false); | ||||
|                 bullet.setTextureMode(TextureMode.Projected); | ||||
|                 Material mat2 = new Material(app.getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|                 TextureKey key2 = new TextureKey("Textures/Terrain/Rock/Rock.PNG"); | ||||
|                 key2.setGenerateMips(true); | ||||
|                 Texture tex2 = app.getAssetManager().loadTexture(key2); | ||||
|                 mat2.setTexture("ColorMap", tex2); | ||||
|                 if (name.equals("shoot") && !keyPressed) { | ||||
|                     Geometry bulletg = new Geometry("bullet", bullet); | ||||
|                     bulletg.setMaterial(mat2); | ||||
|                     bulletg.setShadowMode(ShadowMode.CastAndReceive); | ||||
|                     bulletg.setLocalTranslation(app.getCamera().getLocation()); | ||||
|                     RigidBodyControl bulletControl = new RigidBodyControl(10); | ||||
|                     bulletg.addControl(bulletControl); | ||||
|                     bulletControl.setLinearVelocity(app.getCamera().getDirection().mult(25)); | ||||
|                     bulletg.addControl(bulletControl); | ||||
|                     rootNode.attachChild(bulletg); | ||||
|                     space.add(bulletControl); | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|         app.getInputManager().addMapping("shoot", new MouseButtonTrigger(MouseInput.BUTTON_LEFT)); | ||||
|         app.getInputManager().addListener(actionListener, "shoot"); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										272
									
								
								src/roadtrip/RoadTrip.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								src/roadtrip/RoadTrip.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,272 @@ | ||||
| package roadtrip; | ||||
| 
 | ||||
| import com.jme3.app.SimpleApplication; | ||||
| import com.jme3.bullet.BulletAppState; | ||||
| import com.jme3.bullet.PhysicsSpace; | ||||
| import com.jme3.bullet.collision.shapes.BoxCollisionShape; | ||||
| import com.jme3.bullet.collision.shapes.CompoundCollisionShape; | ||||
| import com.jme3.bullet.control.VehicleControl; | ||||
| import com.jme3.input.KeyInput; | ||||
| import com.jme3.input.controls.ActionListener; | ||||
| import com.jme3.input.controls.KeyTrigger; | ||||
| import com.jme3.material.Material; | ||||
| import com.jme3.math.ColorRGBA; | ||||
| import com.jme3.math.FastMath; | ||||
| import com.jme3.math.Matrix3f; | ||||
| import com.jme3.math.Vector3f; | ||||
| import com.jme3.scene.Geometry; | ||||
| import com.jme3.scene.Node; | ||||
| import com.jme3.scene.Spatial; | ||||
| import com.jme3.scene.shape.Cylinder; | ||||
| 
 | ||||
| /** | ||||
|  * | ||||
|  * @author dejvino | ||||
|  */ | ||||
| public class RoadTrip extends SimpleApplication implements ActionListener { | ||||
| 
 | ||||
|     final int WEAK = 1; | ||||
|     final int TRUCK = 2; | ||||
|     final int SPORT = 3; | ||||
|      | ||||
|     final int carType = SPORT; | ||||
|      | ||||
|     private BulletAppState bulletAppState; | ||||
|     private VehicleControl vehicle; | ||||
|     private float accelerationForce = 200.0f; | ||||
|     private float brakeForce = 100.0f; | ||||
|     private float steeringValue = 0; | ||||
|     private float accelerationValue = 0; | ||||
|     private Vector3f jumpForce = new Vector3f(0, 3000, 0); | ||||
| 
 | ||||
|     public static void main(String[] args) { | ||||
|         RoadTrip app = new RoadTrip(); | ||||
|         app.start(); | ||||
|     } | ||||
| 
 | ||||
|     Spatial map; | ||||
|     Spatial car; | ||||
|      | ||||
|     @Override | ||||
|     public void simpleInitApp() { | ||||
|         bulletAppState = new BulletAppState(); | ||||
|         stateManager.attach(bulletAppState); | ||||
|         bulletAppState.getPhysicsSpace().enableDebug(assetManager); | ||||
|         PhysicsTestHelper.createPhysicsTestWorld(rootNode, assetManager, bulletAppState.getPhysicsSpace()); | ||||
|         setupKeys(); | ||||
|         buildPlayer(); | ||||
|          | ||||
|         map = assetManager.loadModel("Scenes/TestMap.j3o"); | ||||
|         rootNode.attachChild(map); | ||||
|         getPhysicsSpace().addAll(map); | ||||
|          | ||||
|         vehicle.setPhysicsLocation(new Vector3f(5f, 30f, 5f)); | ||||
|     } | ||||
| 
 | ||||
|     private PhysicsSpace getPhysicsSpace(){ | ||||
|         return bulletAppState.getPhysicsSpace(); | ||||
|     } | ||||
| 
 | ||||
|     private void setupKeys() { | ||||
|         inputManager.addMapping("Lefts", new KeyTrigger(KeyInput.KEY_H)); | ||||
|         inputManager.addMapping("Rights", new KeyTrigger(KeyInput.KEY_K)); | ||||
|         inputManager.addMapping("Ups", new KeyTrigger(KeyInput.KEY_U)); | ||||
|         inputManager.addMapping("Downs", new KeyTrigger(KeyInput.KEY_J)); | ||||
|         inputManager.addMapping("Space", new KeyTrigger(KeyInput.KEY_SPACE)); | ||||
|         inputManager.addMapping("Reset", new KeyTrigger(KeyInput.KEY_RETURN)); | ||||
|         inputManager.addListener(this, "Lefts"); | ||||
|         inputManager.addListener(this, "Rights"); | ||||
|         inputManager.addListener(this, "Ups"); | ||||
|         inputManager.addListener(this, "Downs"); | ||||
|         inputManager.addListener(this, "Space"); | ||||
|         inputManager.addListener(this, "Reset"); | ||||
|     } | ||||
| 
 | ||||
|     private void buildPlayer() { | ||||
|         Material mat = new Material(getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md"); | ||||
|         mat.getAdditionalRenderState().setWireframe(true); | ||||
|         mat.setColor("Color", ColorRGBA.Red); | ||||
| 
 | ||||
|         //create a compound shape and attach the BoxCollisionShape for the car body at 0,1,0 | ||||
|         //this shifts the effective center of mass of the BoxCollisionShape to 0,-1,0 | ||||
|         CompoundCollisionShape compoundShape = new CompoundCollisionShape(); | ||||
|         BoxCollisionShape box = new BoxCollisionShape(new Vector3f(1.4f, 0.5f, 3.6f)); | ||||
|         compoundShape.addChildShape(box, new Vector3f(0, 1, 0)); | ||||
|          | ||||
|         if (carType == TRUCK) { | ||||
|             BoxCollisionShape boxCabin = new BoxCollisionShape(new Vector3f(1.4f, 0.8f, 1.0f)); | ||||
|             compoundShape.addChildShape(boxCabin, new Vector3f(0, 2, 2f)); | ||||
|         } else if (carType == SPORT) { | ||||
|             BoxCollisionShape boxCabin = new BoxCollisionShape(new Vector3f(1.2f, 0.6f, 2.0f)); | ||||
|             compoundShape.addChildShape(boxCabin, new Vector3f(0, 2, -1f)); | ||||
|         } | ||||
| 
 | ||||
|         //create vehicle node | ||||
|         Node vehicleNode=new Node("vehicleNode"); | ||||
|         vehicle = new VehicleControl(compoundShape, 500); | ||||
|         vehicleNode.addControl(vehicle); | ||||
| 
 | ||||
|         //setting suspension values for wheels, this can be a bit tricky | ||||
|         //see also https://docs.google.com/Doc?docid=0AXVUZ5xw6XpKZGNuZG56a3FfMzU0Z2NyZnF4Zmo&hl=en | ||||
|         float stiffness = 30.0f;//200=f1 car | ||||
|         float compValue = .1f; //(should be lower than damp) | ||||
|         float dampValue = .2f; | ||||
|         vehicle.setSuspensionCompression(compValue * 2.0f * FastMath.sqrt(stiffness)); | ||||
|         vehicle.setSuspensionDamping(dampValue * 2.0f * FastMath.sqrt(stiffness)); | ||||
|         vehicle.setSuspensionStiffness(stiffness); | ||||
|         vehicle.setMaxSuspensionForce(10000.0f); | ||||
| 
 | ||||
|         //Create four wheels and add them at their locations | ||||
|         Vector3f wheelDirection = new Vector3f(0, -1, 0); // was 0, -1, 0 | ||||
|         Vector3f wheelAxle = new Vector3f(-1, 0, 0); // was -1, 0, 0 | ||||
|         float radius = 1.0f; | ||||
|         float restLength = 0.3f; | ||||
|         float yOff = 0.5f; | ||||
|         float xOff = 1.6f; | ||||
|         float zOff = 2f; | ||||
| 
 | ||||
|         Cylinder wheelMesh = new Cylinder(16, 16, radius, radius * 0.2f, true); | ||||
| 
 | ||||
|         Node node1 = new Node("wheel 1 node"); | ||||
|         Geometry wheels1 = new Geometry("wheel 1", wheelMesh); | ||||
|         node1.attachChild(wheels1); | ||||
|         wheels1.rotate(0, FastMath.HALF_PI, 0); | ||||
|         wheels1.setMaterial(mat); | ||||
|         vehicle.addWheel(node1, new Vector3f(-xOff, yOff, zOff), | ||||
|                 wheelDirection, wheelAxle, restLength, radius, true); | ||||
| 
 | ||||
|         Node node2 = new Node("wheel 2 node"); | ||||
|         Geometry wheels2 = new Geometry("wheel 2", wheelMesh); | ||||
|         node2.attachChild(wheels2); | ||||
|         wheels2.rotate(0, FastMath.HALF_PI, 0); | ||||
|         wheels2.setMaterial(mat); | ||||
|         vehicle.addWheel(node2, new Vector3f(xOff, yOff, zOff), | ||||
|                 wheelDirection, wheelAxle, restLength, radius, true); | ||||
| 
 | ||||
|         Node node3 = new Node("wheel 3 node"); | ||||
|         Geometry wheels3 = new Geometry("wheel 3", wheelMesh); | ||||
|         node3.attachChild(wheels3); | ||||
|         wheels3.rotate(0, FastMath.HALF_PI, 0); | ||||
|         wheels3.setMaterial(mat); | ||||
|         vehicle.addWheel(node3, new Vector3f(-xOff, yOff, -zOff), | ||||
|                 wheelDirection, wheelAxle, restLength, radius, false); | ||||
| 
 | ||||
|         Node node4 = new Node("wheel 4 node"); | ||||
|         Geometry wheels4 = new Geometry("wheel 4", wheelMesh); | ||||
|         node4.attachChild(wheels4); | ||||
|         wheels4.rotate(0, FastMath.HALF_PI, 0); | ||||
|         wheels4.setMaterial(mat); | ||||
|         vehicle.addWheel(node4, new Vector3f(xOff, yOff, -zOff), | ||||
|                 wheelDirection, wheelAxle, restLength, radius, false); | ||||
|          | ||||
|         vehicleNode.attachChild(node1); | ||||
|         vehicleNode.attachChild(node2); | ||||
|         vehicleNode.attachChild(node3); | ||||
|         vehicleNode.attachChild(node4); | ||||
|          | ||||
|         if (carType == TRUCK) { | ||||
|             Node node5 = new Node("wheel 5 node"); | ||||
|             Geometry wheels5 = new Geometry("wheel 5", wheelMesh); | ||||
|             node5.attachChild(wheels5); | ||||
|             wheels5.rotate(0, FastMath.HALF_PI, 0); | ||||
|             wheels5.setMaterial(mat); | ||||
|             vehicle.addWheel(node5, new Vector3f(-xOff, yOff, 2.1f* -zOff), | ||||
|                     wheelDirection, wheelAxle, restLength, radius, false); | ||||
| 
 | ||||
|             Node node6 = new Node("wheel 6 node"); | ||||
|             Geometry wheels6 = new Geometry("wheel 6", wheelMesh); | ||||
|             node6.attachChild(wheels6); | ||||
|             wheels6.rotate(0, FastMath.HALF_PI, 0); | ||||
|             wheels6.setMaterial(mat); | ||||
|             vehicle.addWheel(node6, new Vector3f(xOff, yOff, 2.1f* -zOff), | ||||
|                     wheelDirection, wheelAxle, restLength, radius, false); | ||||
|              | ||||
|             vehicleNode.attachChild(node5); | ||||
|             vehicleNode.attachChild(node6); | ||||
|         } | ||||
|          | ||||
|         rootNode.attachChild(vehicleNode); | ||||
| 
 | ||||
|         getPhysicsSpace().add(vehicle); | ||||
|         vehicle.setPhysicsLocation(new Vector3f(5f, 30f, 5f)); | ||||
|          | ||||
|         vehicle.getWheel(0).setFrictionSlip(0.8f); | ||||
|         vehicle.getWheel(1).setFrictionSlip(0.8f); | ||||
|         vehicle.getWheel(2).setFrictionSlip(0.6f); | ||||
|         vehicle.getWheel(3).setFrictionSlip(0.6f); | ||||
|              | ||||
|         if (carType == TRUCK) { | ||||
|             vehicle.getWheel(4).setFrictionSlip(0.6f); | ||||
|             vehicle.getWheel(5).setFrictionSlip(0.6f); | ||||
|          | ||||
|             accelerationForce = 1400f; | ||||
|             brakeForce = 200f; | ||||
|         } else if (carType == SPORT) { | ||||
|             accelerationForce = 20000f; | ||||
|             brakeForce = 200f; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     @Override | ||||
|     public void simpleUpdate(float tpf) { | ||||
|         cam.setLocation(new Vector3f(-10f, 35f, -10f)); | ||||
|         cam.lookAt(vehicle.getPhysicsLocation(), Vector3f.UNIT_Y); | ||||
|     } | ||||
| 
 | ||||
|     public void onAction(String binding, boolean value, float tpf) { | ||||
|         float steerMax = 0.5f; | ||||
|         if (carType == TRUCK) { | ||||
|             steerMax = 0.7f; | ||||
|         } | ||||
|         if (binding.equals("Lefts")) { | ||||
|             if (value) { | ||||
|                 steeringValue += steerMax; | ||||
|             } else { | ||||
|                 steeringValue += -steerMax; | ||||
|             } | ||||
|             vehicle.steer(steeringValue); | ||||
|         } else if (binding.equals("Rights")) { | ||||
|             if (value) { | ||||
|                 steeringValue += -steerMax; | ||||
|             } else { | ||||
|                 steeringValue += steerMax; | ||||
|             } | ||||
|             vehicle.steer(steeringValue); | ||||
|         } else if (binding.equals("Ups")) { | ||||
|             if (value) { | ||||
|                 accelerationValue += accelerationForce; | ||||
|             } else { | ||||
|                 accelerationValue -= accelerationForce; | ||||
|             } | ||||
|             vehicle.accelerate(2, accelerationValue); | ||||
|             vehicle.accelerate(3, accelerationValue); | ||||
|             if (carType == TRUCK) { | ||||
|                 vehicle.accelerate(4, accelerationValue); | ||||
|                 vehicle.accelerate(5, accelerationValue); | ||||
|             } | ||||
|         } else if (binding.equals("Downs")) { | ||||
|             float b; | ||||
|             if (value) { | ||||
|                 b = brakeForce; | ||||
|             } else { | ||||
|                 b = 0f; | ||||
|             } | ||||
|             vehicle.brake(0, b); | ||||
|             vehicle.brake(1, b); | ||||
|         } else if (binding.equals("Space")) { | ||||
|             if (value) { | ||||
|                 vehicle.applyImpulse(jumpForce, Vector3f.ZERO); | ||||
|             } | ||||
|         } else if (binding.equals("Reset")) { | ||||
|             if (value) { | ||||
|                 System.out.println("Reset"); | ||||
|                 vehicle.setPhysicsLocation(Vector3f.ZERO); | ||||
|                 vehicle.setPhysicsRotation(new Matrix3f()); | ||||
|                 vehicle.setLinearVelocity(Vector3f.ZERO); | ||||
|                 vehicle.setAngularVelocity(Vector3f.ZERO); | ||||
|                 vehicle.resetSuspension(); | ||||
|             } else { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user