Created
January 20, 2016 04:50
-
-
Save iamOgunyinka/78d0bccf7caa30379473 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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