from direct.directbase.DirectStart import *
from direct.gui.DirectGui import *
from direct.actor import Actor
from pandac.PandaModules import *
from direct.showbase import DirectObject
from direct.task import Task
import math
import sys,os
[b]class NormalMapDemo(DirectObject):
def __init__(self):[/b]
wp = WindowProperties()
wp.setTitle('Myhorigia ')
base.win.requestProperties(wp)
#Load the first environment model
self.environ = loader.loadModel("models/levels/level1/level1")
self.environ.reparentTo(render)
self.environ.setScale(1,1,1)
self.environ.setPos(0,0,0)
self.treelayer = loader.loadModel("models/levels/level1/level1_trees")
self.treelayer.reparentTo(render)
self.treelayer.setScale(1,1,1)
self.treelayer.setPos(0,0,0)
self.envsky = loader.loadModel("models/sky/env")
self.envsky.reparentTo(render)
self.envsky.setScale(500,500,500)
self.envsky.setPos(0,0,-30)
dlight = DirectionalLight('dlight')
dlight.setColor(VBase4(0.8, 0.8, 0.8, 50))
dlnp = render.attachNewNode(dlight.upcastToPandaNode())
dlnp.setHpr(0, -90, 200)
self.render.setLight(dlnp)
alight = AmbientLight('alight')
alight.setColor(VBase4(0.3, 0.3, 0.3, 20))
alnp = render.attachNewNode(alight.upcastToPandaNode())
render.setLight(alnp)
#standaard settings
base.disableMouse()
base.setBackgroundColor(0,0,0)
# Set the current viewing target
self.focus = Vec3(48,0,25)
self.heading = 180
self.pitch = 0
self.mousex = 0
self.mousey = 0
self.last = 0
self.mousebtn = [0,0,0]
# Start the camera control task:
taskMgr.add(self.controlCamera, "camera-task")
self.accept("escape", sys.exit, [0])
self.accept("mouse1", self.setMouseBtn, [0, 1])
self.accept("mouse1-up", self.setMouseBtn, [0, 0])
self.accept("mouse2", self.setMouseBtn, [1, 1])
self.accept("mouse2-up", self.setMouseBtn, [1, 0])
self.accept("mouse3", self.setMouseBtn, [2, 1])
self.accept("mouse3-up", self.setMouseBtn, [2, 0])
self.accept("enter", self.toggleShader)
self.accept("j", self.rotateLight, [-1])
self.accept("k", self.rotateLight, [1])
self.accept("arrow_left", self.rotateCam, [-1])
self.accept("arrow_right", self.rotateCam, [1])
def setMouseBtn(self, btn, value):
self.mousebtn[btn] = value
def rotateCam(self, offset):
self.heading = self.heading - offset*10
def controlCamera(self, task):
# figure out how much the mouse has moved (in pixels)
md = base.win.getPointer(0)
x = md.getX()
y = md.getY()
if base.win.movePointer(0, 100, 100):
self.heading = self.heading - (x - 100)*0.2
self.pitch = self.pitch - (y - 100)*0.2
if (self.pitch < -45): self.pitch = -45
if (self.pitch > 45): self.pitch = 45
base.camera.setHpr(self.heading,self.pitch,0)
dir = base.camera.getMat().getRow3(1)
elapsed = task.time - self.last
if (self.last == 0): elapsed = 0
if (self.mousebtn[0]):
self.focus = self.focus + dir * elapsed*30
if (self.mousebtn[1]) or (self.mousebtn[2]):
self.focus = self.focus - dir * elapsed*30
base.camera.setPos(self.focus - (dir*5))
if (base.camera.getX() < -49.0): base.camera.setX(-49)
if (base.camera.getX() > 49.0): base.camera.setX( 49)
if (base.camera.getY() < -49.0): base.camera.setY(-49)
if (base.camera.getY() > 49.0): base.camera.setY( 49)
if (base.camera.getZ() < 1.0): base.camera.setZ( 1)
if (base.camera.getZ() > 49.0): base.camera.setZ( 49)
self.focus = base.camera.getPos() + (dir*5)
self.last = task.time
return Task.cont
t=NormalMapDemo()
run()