Skip to content

Instantly share code, notes, and snippets.

@iamOgunyinka
Created January 20, 2016 04:50
Show Gist options
  • Save iamOgunyinka/78d0bccf7caa30379473 to your computer and use it in GitHub Desktop.
Save iamOgunyinka/78d0bccf7caa30379473 to your computer and use it in GitHub Desktop.
from direct.showbase.ShowBase import ShowBase
from direct.showbase.DirectObject import DirectObject
import direct.directbase.DirectStart
from math import pi as PI, sin, cos
from direct.actor.Actor import Actor
class World( DirectObject ):
def __init__( self ):
DirectObject.__init__( self )
self.environment = loader.loadModel( "models/environment" )
self.environment.reparentTo( render )
self.panda = loader.loadModel( "models/panda" )
self.panda.reparentTo( render )
self.panda.setScale( 0.5, .5, .5 )
self.panda.setZ( 0 )
self.panda.setRenderModeWireframe()
self.colorR, self.colorG, self.colorB = .0, .0, .0
self.speed = 0
self.maxSpeed = 200
self.throttle = 0
self.acceleration = 25
base.disableMouse()
base.camera.reparentTo( self.panda )
base.camera.setY( base.camera, -5 )
self.keyMap = { "w": False,
"a": False,
"s": False,
"d": False,
"mouse1": False,
"mouse3": False
}
self.accept( "w", self.setKey, [ "w", True ] )
self.accept( "s", self.setKey, [ "s", True ] )
self.accept( "a", self.setKey, [ "a", True ] )
self.accept( "d", self.setKey, [ "d", True ] )
self.accept( "mouse1", self.setKey, [ "mouse1", True ] )
self.accept( "mouse3", self.setKey, [ "mouse3", True ] )
self.accept( "w-up", self.setKey, [ "w", False ] )
self.accept( "s-up", self.setKey, [ "s", False ] )
self.accept( "a-up", self.setKey, [ "a", False ] )
self.accept( "d-up", self.setKey, [ "d", False ] )
self.accept( "mouse1-up", self.setKey, [ "mouse1", False ] )
self.accept( "mouse3-up", self.setKey, [ "mouse3", False ] )
taskMgr.add( self.spinCamera, "Spin Camera" )
taskMgr.add( self.cycleMove, "Cycle Move" )
taskMgr.doMethodLater( 1, self.changePandaColor, "Kettle Color Changer" )
def setKey( self, key, value ):
self.keyMap[key] = value
def cameraZoom( self, direction, dt ):
if( direction == "in" ):
base.camera.setY( base.camera, 2 * dt )
else: base.camera.setY( base.camera, -2 * dt )
def resetColor( self ):
return ( .0, .0, .0 )
def changePandaColor( self, task ):
dt = globalClock.getDt()
if( self.colorR >= 1.0 and self.colorG >= 1.0 and self.colorB >= 1.0 ):
self.colorR, self.colorG, self.colorB = self.resetColor()
if( self.colorR >= 1.0 ):
if( self.colorG >= 1.0 ):
self.colorB += dt
else:
self.colorG += dt
else:
self.colorR += dt
self.panda.setColor( self.colorR, self.colorG, self.colorB )
return task.again
def cycleMove( self, task ):
dt = globalClock.getDt()
if( dt > .2 ):
return task.cont
if( self.keyMap["w"] == True ):
self.adjustThrottle( "up", dt )
elif( self.keyMap["s"] == True ):
self.adjustThrottle( "down", dt )
elif self.keyMap["a"] == True:
self.turn( "left", dt )
elif self.keyMap["d"] == True:
self.turn( "right", dt )
elif self.keyMap["mouse1"] == True:
self.cameraZoom( "in", dt )
elif self.keyMap["mouse3"] == True:
self.cameraZoom( "out", dt )
if base.mouseWatcherNode.hasMouse():
mpos = base.mouseWatcherNode.getMouse()
base.camera.setP( mpos.getY() * 20 )
base.camera.setH( mpos.getX() * -20 )
self.checkSpeed( dt )
self.move( dt )
return task.cont
def turn( self, direction, dt ):
turnRate = 20 * ( 2 - ( self.speed / self.maxSpeed ) )
if( direction == "right" ):
turnRate = -1.0 * turnRate
self.panda.setH( self.panda, turnRate * dt )
def checkSpeed( self, dt ):
throttleSettings = ( self.maxSpeed * self.throttle )
if( self.speed < throttleSettings ):
if( self.speed + ( self.acceleration * dt ) > throttleSettings ):
self.speed = throttleSettings
else:
self.speed += ( self.acceleration * dt )
elif self.speed > throttleSettings:
if ( self.speed - ( self.acceleration * dt ) ) < throttleSettings :
self.speed = throttleSettings
else:
self.speed -= ( self.acceleration * dt )
def move( self, dt ):
maxSpeed = self.speed * 1000 / 3600
self.panda.setY( self.panda, maxSpeed * dt )
def adjustThrottle( self, direction, dt ):
if( direction == "up" ):
self.throttle += .25 * dt
if( self.throttle > 1 ): self.throttle = 1
else:
self.throttle -= .25 * dt
if( self.throttle < -1 ): self.throttle = -1
def spinCamera( self, task ):
angleDegrees = task.time * 6.0
angleRadians = angleDegrees * ( PI / 180 )
camera.setPos( 20 * sin( angleRadians ), -20.0 * cos( angleRadians ), 3 )
camera.setHpr( angleDegrees, 0, 0 )
return task.cont
world = World()
base.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment