To show how easy the engine is to use, here's a barebones wasd fps viewer.
Here's a slightly more complicated demo showcasing physics and fps movement, linepicks and camerapicks.
Strict Import Dsi.Aurora Local Display:TDisplay = TDisplay.Create() Display.OpenScreen() Display.ShadowMode( Shadows_StencilAdd ) Local Sl:TSceneLoader = New TSceneLoader Sl.LoadBest("scene.OSM") Const FPS#=30 Local period#=1000/FPS Local time#=MilliSecs()-period Display.ShadowMode( Shadows_StencilMod ) '---- Scene Set up Local Camera:TCamera = TCamera.Create() TGui.Init( Camera ) Local InputDevice:TInput = TInput.Create() Local elapsed# Local ticks#,tween# Repeat Repeat elapsed=MilliSecs()-time Until elapsed ticks=elapsed/period ';fractional remainder tween#=Float(elapsed Mod period)/Float(period) For Local k=1 To ticks time=time+period camera.pitch( -inputdevice.mouseyspeed() ) camera.yaw( -inputdevice.mousexspeed() ) If inputdevice.keydown(KEY_W) camera.move(0,0,-1) End If If inputdevice.keydown(KEY_S) camera.move(0,0,1) End If If inputdevice.keydown(KEY_A) camera.move(-1,0,0) End If If inputdevice.keydown(KEY_D) camera.move(1,0,0) End If captureInput() tgui.freeevents() tgui.updateEvents() Next Render3D() Until InputDevice.KeyDown(Key_Escape)
Here's a slightly more complicated demo showcasing physics and fps movement, linepicks and camerapicks.
Local Display:TDisplay = TDisplay.Create() Display.OpenScreen() Local Light:TLight = Tlight.CreateOmni() Light.Diffuse( 255,255,255 ) Light.Position( 0,30,0 ) Light.Specular( 0,0,0 ) TLight.SetAmbient( 128,128,128 ) Display.ShadowMode( Shadows_StencilAdd ) '---- Scene Set up Local Camera:TCamera = TCamera.Create() TGui.Init( Camera ) Local InputDevice:TInput = TInput.Create() TPhysics.Init( Camera ) TPhysics.SetWorldSize( -1000,-1000,-1000,1000,1000,1000 ) Local Terrain:TEntity = TEntity.CreateMesh("terrain.mesh") Local md:TMeshData =Terrain.CreateMeshData( "terrain.mesh" ) Print md.vertices() Local Col:TCollider = TCollider.CreateStatic( Terrain ) Local GBody:TBody = tbody.Create( col,"Ground" ) gbody.attachtopivot( terrain ) gbody.setInertia( Tinertia.CreateCube( 0,1,1,1 ) ) Local Sky:TEntity = TEntity.CreateMesh("sky.mesh") '--- Gun set up Local Gun:TEntity = TEntity.CreateMesh("gun1.mesh") Gun.scale( 0.05,0.05,0.05 ) '--- Set up barrels gun.setmaterial( "Examples/BumpMapping/MultiLightSpecular" ) '---Target set up Type Target Function Create:Target( x#,z#,xs#,ys#,zs#) Local out:target = New target out.ent = TEntity.CreateMesh( "target1.mesh" ) out.ent.castshadows( True ) out.ent.scale( xs,ys,zs ) Local col:TCollider = TCollider.Createconvex( out.ent ) out.bod = Tbody.Create( col,"Target" ) out.bod.attachtopivot( out.ent ) out.bod.setinertia( Tinertia.createCube( 0.5,2.5,6,1 ) ) out.bod.setCenterOfMass( 0,0.2,0 ) out.bod.enableGravity() out.bod.ActivateForceAndTorque() Local groundy# If traycast.cast( x,200,z,0,-400,0 ) groundy = traycast.y()+1 Else groundy=100 EndIf out.bod.position(x,groundy,z) Return out End Function Field bod:TBody Field Ent:TEntity End Type Local targets = 20 Local tars:Tlist = CreateList() For Local j=1 To targets Local tar:Target = target.create(Rnd(-100,100),Rnd(-100,100),0.2,0.2,0.2 ) tars.addlast( tar ) Next Local GunFire:TSound = LoadSound("Media/Shot1.wav") Local FireTime:TTimer = TTimer.Create(100) '--- Player Vars. Normally would be a type but this is supposed to be an easy to understand demo so not here it ain't. Local playx#,playy#,playz# Local xi#,zi# Local cinc# Repeat 'update physics. For Local j=1 To 3 tphysics.update( 0.1 ) Next If inputdevice.mousedown( 0 ) If firetime.clicked() If camera.pick( displaywidth()/2,displayheight()/2 ) Local hx#,hy#,hz# hx = camera.pickx() hy = camera.picky() hz = camera.pickz() Local bod:Tbody = camera.pickBody() Local vx#,vy#,vz#,mag# vx = bod.x()-camera.x() vy = bod.y()-camera.y() vz = bod.z()-camera.z() mag = Sqr( vx*vx+vy*vy+vz*vz ) vx = vx/mag vy = vy/mag vz = vz/mag Local strength# = 100 bod.addpush( vx*Strength,vy*Strength,vz*strength ) 'bod.push( hx,hy,hz,vx*strength,vy*strength,vz*strength ) TParticleController.Create( hx,hy,hz,"Examples/Smoke",250,1000 ) EndIf PlaySound gunfire EndIf Else firetime.reset() EndIf TparticleController.UpdateAll() 'Check to see where the player should be on the terrain. If traycast.cast( playx,10,playz,0,-100,0 ) 'cast a ray playx = traycast.x() playy = traycast.y()+4 playz = traycast.z() EndIf 'position and rotate camera based on player input camera.position( playx,playy,playz ) camera.pitch( -inputdevice.mouseyspeed() ) camera.yaw( -inputdevice.mousexspeed() ) If inputdevice.keydown( Key_W ) Camera.TFormVector( 0,0,-0.2 ) xi:+Camera.TFormedX() zi:+Camera.TFormedZ() EndIf If inputdevice.keydown( KEY_A ) camera.tformvector( -0.05,0,0 ) xi:+camera.tformedx() zi:+camera.tformedz() End If If inputdevice.keydown( KEY_D ) camera.tformvector( 0.05,0,0 ) xi:+Camera.tformedx() zi:+camera.tformedz() End If If inputdevice.keydown( KEY_S ) camera.tformvector( 0,0,0.2 ) xi:+camera.tformedx() zi:+camera.tformedz() End If xi:*0.9 zi:*0.9 playx:+xi playz:+zi 'determine gun's position camera.tformpoint( -1,-1,-3 ) gun.position( camera.tformedx(),camera.tformedy(),camera.tformedz() ) 'Determine gun's orientation gun.setquat( camera.getQuat() ) Render3D() CaptureInput() tgui.freeevents() tgui.updateevents() Until InputDevice.KeyDown(Key_Escape)