Esempio n. 1
0
File: client.py Progetto: wezu/a4p
    def __init__(self):
        log.debug('Starting Client')
        #open a window... but first set all the needed props
        wp = self.loadWindoProperites()
        #open the window
        base.openMainWindow(props=wp)
        #base.setBackgroundColor(0.06, 0.1, 0.12, 1)
        base.setBackgroundColor(0.0, 0.0, 0.0, 1)
        base.disableMouse()
        base.enableParticles()

        #needed to determine what window event fired
        self.window_focused = base.win.getProperties().getForeground()
        self.window_x = base.win.getXSize()
        self.window_y = base.win.getYSize()
        self.window_minimized = base.win.getProperties().getMinimized()

        #filter manager, post process
        self.filters = Filters()

        #audio sound effects (sfx) + music
        self.audio = Audio()
        self.audio.setMusic('background')
        self.audio.playMusic()

        #light manager
        self.lights = LightManager()

        #setup the user interface (gui+key/mouse bind)
        self.ui = UserInterface()

        #skybox
        self.sun_and_sky = Skybox(self.lights)

        #player (character) droid
        self.droid = PCDroid(self.ui)

        #some vars used later
        self.map_name = None
        self.loading_status = set()
        self.level_root = render.attachNewNode('level_root')
        self.level_root.hide()
        self.is_in_game = False

        #events
        base.win.setCloseRequestEvent('exit-event')
        self.accept('exit-event', self.onClientExit)
        self.accept('window-event', self.onWindowEvent)
        self.accept('window-reset', self.onWindowReset)
        self.accept('client-mouselock', self.setMouseLock)
        self.accept('load-level', self.onLevelLoad)
        self.accept('loading-done', self.onLoadingDone)
        self.accept('reload-shaders', self.onShaderReload)
        self.accept('client-set-team', self.onTeamCahnge)
        self.accept('client-quit', self.onQuit)
        # Task
        taskMgr.add(self.update, 'client_update')

        log.debug('Client started')
Esempio n. 2
0
def testLightManager():
    lm = LightManager.Instance()
    lm.load()

    # Make sure all lights were loaded.
    print("LIGHT MANAGER UNIT TESTING")
    for id in ['100001','100002','100003', \
      '100004','100005']:
        print(str(lm.getLight(id) != None) + ' (Light id=' + id + ' loaded.)')

    # Test name changing and permissions.
    print(str(lm.changeLightName('100001', 'lol')) + ' (Change light name.)')
    print(str(lm.getLight('100001')['name'] == 'lol') + ' (Verify change.)')
    print(
        str(lm.changeLightClient('100001', 'new client')) +
        ' (Change light client.)')
    print(
        str(lm.getLight('100001', )['client'] == 'new client') +
        ' (Verify change.)')
    print(str(lm.lightExists('100001')) + ' (Verify existence testing.)')
    print(str(not lm.lightExists('fake ID')) + ' (Verify existence testing.)')
    print(str(not lm.deleteLight('fake ID')) + ' (Delete fake light.)')
    print(str(lm.deleteLight('100003')) + ' (Delete real light.)')
    print(str(not lm.getLight('100003')) + ' (Verify deletion.)')
    print(str(not lm.deleteLight('100003')) + ' (Check double delete.)')
    print(
        str(not lm.isAllowed('3', '100002')) + ' (Check light whitelisting.)')
    print(str(lm.isAllowed('6', '100002')) + ' (Check light whitelisting.)')
    print(str(lm.isAllowed('3', '100001')) + ' (Check light whitelisting.)')
    print(
        str(not lm.isAllowed('999', '100001')) +
        ' (Check light whitelisting.)')

    result = lm.addUUIDtoSubset('new UUID', ['100001', '100002', '100004'])
    test = True
    for light in result.values():
        test = test and light['success']

    print(str(test) + ' (Test adding UUID to multiple lights.')
    print(str(lm.isAllowed('new UUID', '100002')) + ' (Verify add.)')
    print(str(not lm.isAllowed('new UUID', '100005')) + ' (Verify add.)')

    result = lm.removeUUIDfromSubset('new UUID',
                                     ['100001', '100002', '100004'])
    test = True
    for light in result.values():
        test = test and light['success']

    print(str(test) + ' (Test removing UUID from multiple lights.')
    print(str(not lm.isAllowed('new UUID', '100002')) + ' (Verify removal.)')
    print(str(not lm.isAllowed('new UUID', '100005')) + ' (Verify removal.)')
Esempio n. 3
0
 def __init__(self):       
     base = ShowBase.ShowBase()         
     base.trackball.node().setPos(0, 600, -80)    
     base.trackball.node().setHpr(0, 40, 0) 
     
     LM=LightManager(max_lights=32, ambient=(0.2, 0.2, 0.2))
     print "Number of lights:", LM.max_lights
     
     for i in range(LM.max_lights):
         x=random.randrange(-128, 128)
         y=random.randrange(-128, 128)
         z=random.randrange(1, 20)            
         r=random.uniform(0.0, 1.0)
         g=random.uniform(0.0, 1.0)
         b=random.uniform(0.0, 1.0)            
         LM.addLight(pos=(x, y, z), color=(r,g,b), radius=50.0, specular=1.0)
    
     #preview         
     cm = CardMaker("plane")
     cm.setFrame(-128, 128, -128,128)
     self.plane=render.attachNewNode(cm.generate())
     self.plane.lookAt(0, 0, -1)
     self.plane.flattenStrong()
     #self.plane.hprInterval(30.0, LPoint3(360, 0,0)).loop()
     self.plane.setShader(Shader.load(Shader.SL_GLSL,'v.glsl','f.glsl'))
     self.plane.setShaderInput("normal_map",loader.loadTexture("1324-normal.jpg"))
     self.plane.setTexture(loader.loadTexture("1324.jpg"))
             
     self.smiley = loader.loadModel('smiley')
     self.smiley.reparentTo(render)
     self.smiley.setPos(-5,60,10)
     self.smiley.setScale(10)
     self.smiley.hprInterval(3.0, LPoint3(360, 0,0)).loop()
     axis = render.attachNewNode('axis')
     self.smiley.wrtReparentTo(axis) 
     axis.hprInterval(10.0, LPoint3(-360, 0,0)).loop()
     self.smiley.setShader(Shader.load(Shader.SL_GLSL,'v.glsl','f.glsl'))
     self.smiley.setShaderInput("normal_map",loader.loadTexture("7569-normal.jpg"))
Esempio n. 4
0
class InteractionManager(object):
    datePicker = DatePicker()
    session = Session()
    lightmanager = LightManager()

    def setUser(self, user):
        self.user = user

    def sendusertosession(self, previoussession):

        self.session = Session()
        self.session.setUser(self.user)


        if previoussession == 0:
            self.startSession1()
        elif previoussession == 1:
            self.startSession2()
        else:
            self.startSession3()


        self.lightmanager.setSession(previoussession + 1) # Runs light in current phaase

    def startSession1(self):
        self.session.setSessionNumber("1")
        self.session.setHeading("Afklaring")

        user = self.session.user  # get the user from the session
        self.session.appendElement("hilsen", "Hej " + user.name)

        for question in self.buildList(self.questionsforone, 5):
            self.session.appendElement("question", question)

        for statement in self.buildList(self.economyStatements, 2):
            number = randint(5000, 20000)
            concatenate = statement % (number)
            print concatenate
            self.session.appendElement("blue", concatenate)

        numberofelements = len(self.moneyStatements) - 1
        picknumber = randint(0, numberofelements)

        self.session.appendElement("blue", self.moneyStatements[picknumber] % int(user.money))

        self.session.appendElement("green", "Nuværende Addresse: " + user.address + ", " + user.city)
        for statement in self.buildList(self.workstatements, 2):
            self.session.appendElement("green", statement)

        self.session.appendElement("green", "Du har snart jubilæum i %s" % self.volunteerclubs[randint(0, len(self.volunteerclubs) - 1)])
        self.session.appendElement("green", "Du har været været ansat i %d år, i dit sidste job." % randint(0, 10))


        self.session.appendElement("red", "Fødselsdato: " + user.birthday)
        date = self.datePicker.randomDate("1/1/2012", "24/5/2016", random.uniform(0, 1))
        print date
        self.session.appendElement("red", "Du var sidst ved lægen den: " + date)

        for statement in self.buildList(self.healthstatements, 1):
            self.session.appendElement("red", statement)

        print "Starter session: 1"

    def startSession2(self):
        self.session.setSessionNumber("2")
        self.session.setHeading("Valg")

        user = self.session.user  # get the user from the session
        self.session.appendElement("hilsen", "Velkommen tilbage " + user.name)

        self.session.appendElement("valg", self.makeChoice(user))

        self.session.appendElement("telefon",
                                   "Økonomisk rådgivning kan tilgås via kommunen på tlf: 41 85 63 86 mellem 09.00 og 14.00 på alle hverdage")

        print "Starter session: 2"

    def makeChoice(self, person):
        if person.age < 30:
            self.session.appendElement("uddannelse", "En Uddannelsesvejleder kan snakke med omkring din fremtid på 33925000, alle hverdage fra 09.00 til 14.00.")
            return "Du har ikke ret til kontanthjælp, du kan i stedet for modtage uddannnelseshjælp."

        elif person.money > 10000:
            return self.nolist[randint(0, len(self.nolist) - 1)]

        else:
            return self.choicelist[randint(0, len(self.choicelist) - 1)]

    def startSession3(self):
        self.session.setSessionNumber("3")
        self.session.setHeading("Fremtid")
        print "Starter session: 3"

    def getContent(self):
        return self.session

    """
    Precondition list should be bigger than max or endless recursion
    """

    def buildList(self, list, max):
        res = []
        numlist = []

        highest = len(list)
        print max

        for number in range(0, max):
            choice = self.guessnumber(0, highest - 1, numlist)
            statement = list[choice]
            res.append(statement)

        return res

    def guessnumber(self, min, max, list):
        num = randint(min, max)
        for number in list:
            if num == number:
                return self.guessnumber(min, max, list)

        list.append(num)

        return num

    questionsforone = [
        "Har jeg råd til mad?",
        "Har jeg det jeg skal bruge i min hverdag?",
        "Hvordan har familien det?",
        "Er der sket noget jeg har behov for en anden til at snakke med om?",
        "Går det godt, alt taget i betragtning?",
        "Er de gamle skavanker helet?",
        "Hvornår har jeg sidst være ved lægen?",
        "Kunne jeg tænke mig at blive selvstændig?",
        "Var jeg glad for dit gamle arbejde?",
        "Lyst til at arbejde i en ny branche?",
        "Er jeg færdig med at uddanne mig?",
        "Hvad kan jeg blive?",
        "Hvor mange penge skal der til, for at jeg kan få det til at køre rundt?",
        "Er der balance i min økonomi?",
        "Er der mere jeg vil vide?"]

    moneyStatements = [
        "Der står %d på din konto",
        "Samlet set ejer du %d kroner"]


    #UDVID
    economyStatements = ["Du har lån for %d kroner.",
                         "Du har brugt %d kroner på elektronik det sidste halve år",
                         "Du bruger i gennemsnit %d kroner på mad hver halve år"]

    healthstatements = [
        "Din journal siger du døjer med rygproblemer.",
        "Du har været ved lægen sidste måned med ondt i knæet ved en sportskade.",
        "Din journal siger du har problemer i højre håndled fra arbejde ved din bærbare computer.",
        "Du mangler anden vaccination af din Hepapitis B for at fuldt ud vaccineret.",
        "Du har været ved vagtlægen 3 gange i løbet af sidste år."]

    workstatements = [
        "Du betragtes som erfaren indenfor din branche.",
        "Dine evner er eftertragtet hos erhvervslivet i øjeblikket.",
        "Du har en god chance for at komme hurtigt i nyt job."]



    volunteerclubs = [
        "fodboldkluben",
        "håndboldkluben",
        "klatreklubben",
        "golfklubben",
        "petanqueklubben",
        "dartklubben",
        "open space aarhus",
        "sportsklubben"]

    choicelist = [
        "Du har efter reglerne ret til kontanthjælp, da du er bedømt til ikke at være i stand til at forsørge dig selv på grund af helbredsmæssige årsager.",
        "På grund af dine økonomiske årsager er du blevet bedømt som havende krav på modtage kontanthjælp.",
        "Da du står uden forsørger efter samlivsophør, er du blevet berettiget kontanthjælp."]
    nolist = [
        "Du har ikke ret til kontanthjælp, da du efter reglerne er i stand til at forsørge dig selv.",
        "Du har ikke ret til kontanthjælp, eftersom du har nok penge på dine konti til selvforsørgelse."]
Esempio n. 5
0
        return setupChromecast(attempts)

    cast.wait()
    return cast

# find the sonos system and pick the highest priority room
sonos = SonosManager(SONOS_SPEAKERS)

album_manager = AlbumManager(LASTFM_API_KEY, LASTFM_API_SECRET,
                            lastfm_username, lastfm_password)

cast = setupChromecast()
castViewer = cast.media_controller
track = {'title': 'NA', 'artist': 'NA', 'album': 'NA'}
# The 5 used below is for all
light_manager = LightManager(HUE_IP_ADDRESS, hue_lights=HUE_LIGHTS, limitlessled_groups=[5])
duration = ''
failed_album_artwork = False
is_paused = False

while 1:
    # get the current album is being played in currently selected sonos speaker
    track = sonos.wait_for_next_track()
    if not sonos.get_paused_state():
        # if we were paused but are now moving forward
        if is_paused:
            # This means the play button was pressed
            cast = setupChromecast()
            castViewer = cast.media_controller
            # make sure everything gets setup next time
            # track = {'title': 'NA', 'artist': 'NA', 'album': 'NA'}
Esempio n. 6
0
class Demo (DirectObject):
    def __init__(self, directory):
        #init ShowBase
        base = ShowBase.ShowBase()    
        base.setBackgroundColor(1,1,1) 
        #PStatClient.connect()
        self.lManager=LightManager()
        self.skyimg=PNMImage("data/sky_grad.png")
        
        #manager for post process filters (fxaa, soft shadows, dof)
        manager=FilterManager(base.win, base.cam)
        self.filters=setupFilters(manager, path, fxaa_only=False)
        
        #load a level
        self.level=loadLevel(path=path, from_dir=directory) 
        
        self.startpos=None
        
        #process properties
        functions={'coll_mask':self.setCollideMaskOn,
                   'hide':self.hideNode,
                   'startpos':self.setStratPos,
                   'alpha':self.setAlpha
                   }                   
        processProps(self.level, functions)        
        
        #lights and shadows    
        self.sun=setupLights(self.lManager)                
        self.shadows=setupShadows(buffer_size=1024)
        
        #camera controll
        base.disableMouse()  
        self.controler=CameraControler(shadows=self.shadows)                
        #point and click interface
        self.pointer=PointAndClick()
        self.accept('mouse1', self.onMouseClick)
        
        #player model
        #could be another class.... well next time
        self.pcNode=render.attachNewNode('pcNode')        
        self.actor=Actor("demo_models/male", {"attack1":"demo_models/male_attack1",
                                            "attack2":"demo_models/male_attack2",
                                            "walk":"demo_models/male_run",
                                            "block":"demo_models/male_block",
                                            "die":"demo_models/male_die",
                                            "strafe":"demo_models/male_strafe2",
                                            "hit":"demo_models/male_hit",
                                            "idle":"demo_models/male_ready2"}) 
        self.actor.setBlend(frameBlend = True) 
        self.actor.reparentTo(self.pcNode)
        self.actor.setScale(.1)
        self.actor.setShader(Shader.load(Shader.SLGLSL, path+"shaders/player_v.glsl",path+"shaders/player_f.glsl"))
        self.actor.loop("idle")         
        self.pcNode.setPos(self.startpos)
        #collisions
        self.coll_ray=self.pcNode.attachNewNode(CollisionNode('collRay'))        
        self.coll_ray.node().addSolid(CollisionRay(0, 0, 20, 0,0,-180))
        self.coll_ray.node().setIntoCollideMask(BitMask32.allOff()) 
        self.coll_ray.node().setFromCollideMask(BitMask32.bit(1)) 
        #self.coll_ray.show()
        self.traverser = CollisionTraverser() 
        self.queue = CollisionHandlerQueue()
        self.traverser.addCollider(self.coll_ray, self.queue)
        
        #pathfinding
        self.navi=Navigator(path+directory+'/navmesh.csv', self.pcNode, self.actor)
        self.target=render.attachNewNode('target')
        self.setTime(7.5)
        #tasks
        taskMgr.add(self.update, 'update_task', sort=45)
        self.clock=7.5        
        taskMgr.doMethodLater(1.0, self.clockTick,'clock_task', sort=10)
        self.accept( 'window-event', self.windowEventHandler) 
        
    def clockTick(self, task):
        self.clock+=0.05
        if self.clock>23.9:
            self.clock=0.0
        self.setTime(self.clock)                
        return task.again
        
    def blendPixels(self, p1, p2, blend):
        c1=[p1[0]/255.0,p1[1]/255.0,p1[2]/255.0, p1[3]/255.0] 
        c2=[p2[0]/255.0,p2[1]/255.0,p2[2]/255.0, p2[3]/255.0]         
        return Vec4( c1[0]*blend+c2[0]*(1.0-blend), c1[1]*blend+c2[1]*(1.0-blend), c1[2]*blend+c2[2]*(1.0-blend), c1[3]*blend+c2[3]*(1.0-blend))
        
    def setTime(self, time):
        sunpos=min(0.5, max(-0.5,(time-12.0)/14.0)) 
        render.setShaderInput('sunpos', sunpos)
        x1=int(time)
        x2=x1-1
        if x2<0:
            x2=0
        blend=time%1.0        
        
        p1=self.skyimg.getPixel(x1, 0)
        p2=self.skyimg.getPixel(x2, 0)
        sunColor=self.blendPixels(p1, p2, blend)
        sunColor[0]=sunColor[0]*1.5
        sunColor[1]=sunColor[1]*1.5
        sunColor[2]=sunColor[2]*1.5
        p1=self.skyimg.getPixel(x1, 1)
        p2=self.skyimg.getPixel(x2, 1)
        skyColor=self.blendPixels(p1, p2, blend)
        
        p1=self.skyimg.getPixel(x1, 2)
        p2=self.skyimg.getPixel(x2, 2)
        cloudColor=self.blendPixels(p1, p2, blend)
        
        p1=self.skyimg.getPixel(x1, 3)
        p2=self.skyimg.getPixel(x2, 3)
        fogColor=self.blendPixels(p1, p2, blend)        
        fogColor[3]=abs(sunpos)*0.01+0.001
        
        if time<6.0 or time>18.0:
            p=0.0            
        else:
            p=sunpos*-180.0
        LerpHprInterval(self.shadows['sunNode'], 1.0, (0,p,0)).start()
        #self.shadows['sunNode'].setP(p) 
        self.lManager.setLight(id=self.sun, pos=self.shadows['shadowCamera'].getPos(render), color=sunColor, radius=10000.0)
        self.level['skydome'].setShaderInput("sunColor",sunColor)        
        self.level['skydome'].setShaderInput("skyColor",skyColor)  
        self.level['skydome'].setShaderInput("cloudColor",cloudColor)
        render.setShaderInput("fog", fogColor)
        
    def windowEventHandler( self, window=None ):    
        if window is not None: # window is none if panda3d is not started
            self.filters[-1].setShaderInput("rt_w",float(base.win.getXSize()))
            self.filters[-1].setShaderInput("rt_h",float(base.win.getYSize()))
                
    def onMouseClick(self):
        pos=self.pointer.getPos()
        if pos:
            self.target.setPos(pos)
            self.navi.moveTo(self.target)
            
    def setAlpha(self, node, mode):
        pass
        #node.setTransparency(TransparencyAttrib.MAlpha)
        
    def setCollideMaskOn(self, node, mask):
        print "setting mask", mask, "on", node
        node.setCollideMask(BitMask32.bit(mask))
    
    def hideNode(self, node, doHide):
        if doHide==1:
            print "hidding node", node
            node.hide()    
    
    def setStratPos(self, node, not_used=None):
        self.startpos=node.getPos(render)
    
    def update(self, task):
        time=globalClock.getFrameTime()            
        render.setShaderInput('time', time)   
        self.controler.cameraNode.setPos(self.pcNode.getPos())
        #self.shadows['shadowNode'].setPos(self.pcNode.getPos())
        if len(self.filters)>1:
            self.filters[4].setShaderInput('time', time)  
        #water
        if self.level['water']['waterNP'].getZ()>0.0:   
            self.level['water']['waterCamera'].setMat(base.cam.getMat(render)*self.level['water']['wPlane'].getReflectionMat())
        #collision
        self.traverser.traverse(render)
        if self.queue.getNumEntries() > 0:        
            self.queue.sortEntries()                
            pos=self.queue.getEntry(0).getSurfacePoint(render)
            self.pcNode.setZ(pos[2]+0.2)
        return task.cont
Esempio n. 7
0
 def __init__(self, directory):
     #init ShowBase
     base = ShowBase.ShowBase()    
     base.setBackgroundColor(1,1,1) 
     #PStatClient.connect()
     self.lManager=LightManager()
     self.skyimg=PNMImage("data/sky_grad.png")
     
     #manager for post process filters (fxaa, soft shadows, dof)
     manager=FilterManager(base.win, base.cam)
     self.filters=setupFilters(manager, path, fxaa_only=False)
     
     #load a level
     self.level=loadLevel(path=path, from_dir=directory) 
     
     self.startpos=None
     
     #process properties
     functions={'coll_mask':self.setCollideMaskOn,
                'hide':self.hideNode,
                'startpos':self.setStratPos,
                'alpha':self.setAlpha
                }                   
     processProps(self.level, functions)        
     
     #lights and shadows    
     self.sun=setupLights(self.lManager)                
     self.shadows=setupShadows(buffer_size=1024)
     
     #camera controll
     base.disableMouse()  
     self.controler=CameraControler(shadows=self.shadows)                
     #point and click interface
     self.pointer=PointAndClick()
     self.accept('mouse1', self.onMouseClick)
     
     #player model
     #could be another class.... well next time
     self.pcNode=render.attachNewNode('pcNode')        
     self.actor=Actor("demo_models/male", {"attack1":"demo_models/male_attack1",
                                         "attack2":"demo_models/male_attack2",
                                         "walk":"demo_models/male_run",
                                         "block":"demo_models/male_block",
                                         "die":"demo_models/male_die",
                                         "strafe":"demo_models/male_strafe2",
                                         "hit":"demo_models/male_hit",
                                         "idle":"demo_models/male_ready2"}) 
     self.actor.setBlend(frameBlend = True) 
     self.actor.reparentTo(self.pcNode)
     self.actor.setScale(.1)
     self.actor.setShader(Shader.load(Shader.SLGLSL, path+"shaders/player_v.glsl",path+"shaders/player_f.glsl"))
     self.actor.loop("idle")         
     self.pcNode.setPos(self.startpos)
     #collisions
     self.coll_ray=self.pcNode.attachNewNode(CollisionNode('collRay'))        
     self.coll_ray.node().addSolid(CollisionRay(0, 0, 20, 0,0,-180))
     self.coll_ray.node().setIntoCollideMask(BitMask32.allOff()) 
     self.coll_ray.node().setFromCollideMask(BitMask32.bit(1)) 
     #self.coll_ray.show()
     self.traverser = CollisionTraverser() 
     self.queue = CollisionHandlerQueue()
     self.traverser.addCollider(self.coll_ray, self.queue)
     
     #pathfinding
     self.navi=Navigator(path+directory+'/navmesh.csv', self.pcNode, self.actor)
     self.target=render.attachNewNode('target')
     self.setTime(7.5)
     #tasks
     taskMgr.add(self.update, 'update_task', sort=45)
     self.clock=7.5        
     taskMgr.doMethodLater(1.0, self.clockTick,'clock_task', sort=10)
     self.accept( 'window-event', self.windowEventHandler) 
Esempio n. 8
0
    cast.wait()
    return cast


# find the sonos system and pick the highest priority room
sonos = SonosManager(SONOS_SPEAKERS)

album_manager = AlbumManager(LASTFM_API_KEY, LASTFM_API_SECRET,
                             lastfm_username, lastfm_password)

cast = setupChromecast()
castViewer = cast.media_controller
track = {'title': 'NA', 'artist': 'NA', 'album': 'NA'}
# The 5 used below is for all
light_manager = LightManager(HUE_IP_ADDRESS,
                             hue_lights=HUE_LIGHTS,
                             limitlessled_groups=[5])
duration = ''
failed_album_artwork = False
is_paused = False

while 1:
    # get the current album is being played in currently selected sonos speaker
    track = sonos.wait_for_next_track()
    if not sonos.get_paused_state():
        # if we were paused but are now moving forward
        if is_paused:
            # This means the play button was pressed
            cast = setupChromecast()
            castViewer = cast.media_controller
            # make sure everything gets setup next time
Esempio n. 9
0
 def __init__(self):
     self._lm = LightManager.Instance()
     self._am = AliasManager.Instance()
     self._cm = ClientManager.Instance()
Esempio n. 10
0
File: demo.py Progetto: wezu/koparka
    def __init__(self, directory):
        #init ShowBase
        base = ShowBase.ShowBase()
        base.setBackgroundColor(1, 1, 1)
        #PStatClient.connect()
        self.lManager = LightManager()
        self.skyimg = PNMImage("data/sky_grad.png")

        #manager for post process filters (fxaa, soft shadows, dof)
        manager = FilterManager(base.win, base.cam)
        self.filters = setupFilters(manager, path, fxaa_only=False)

        #load a level
        self.level = loadLevel(path=path, from_dir=directory)

        self.startpos = None

        #process properties
        functions = {
            'coll_mask': self.setCollideMaskOn,
            'hide': self.hideNode,
            'startpos': self.setStratPos,
            'alpha': self.setAlpha
        }
        processProps(self.level, functions)

        #lights and shadows
        self.sun = setupLights(self.lManager)
        self.shadows = setupShadows(buffer_size=1024)

        #camera controll
        base.disableMouse()
        self.controler = CameraControler(shadows=self.shadows)
        #point and click interface
        self.pointer = PointAndClick()
        self.accept('mouse1', self.onMouseClick)

        #player model
        #could be another class.... well next time
        self.pcNode = render.attachNewNode('pcNode')
        self.actor = Actor(
            "demo_models/male", {
                "attack1": "demo_models/male_attack1",
                "attack2": "demo_models/male_attack2",
                "walk": "demo_models/male_run",
                "block": "demo_models/male_block",
                "die": "demo_models/male_die",
                "strafe": "demo_models/male_strafe2",
                "hit": "demo_models/male_hit",
                "idle": "demo_models/male_ready2"
            })
        self.actor.setBlend(frameBlend=True)
        self.actor.reparentTo(self.pcNode)
        self.actor.setScale(.1)
        self.actor.setShader(
            Shader.load(Shader.SLGLSL, path + "shaders/player_v.glsl",
                        path + "shaders/player_f.glsl"))
        self.actor.loop("idle")
        self.pcNode.setPos(self.startpos)
        #collisions
        self.coll_ray = self.pcNode.attachNewNode(CollisionNode('collRay'))
        self.coll_ray.node().addSolid(CollisionRay(0, 0, 20, 0, 0, -180))
        self.coll_ray.node().setIntoCollideMask(BitMask32.allOff())
        self.coll_ray.node().setFromCollideMask(BitMask32.bit(1))
        #self.coll_ray.show()
        self.traverser = CollisionTraverser()
        self.queue = CollisionHandlerQueue()
        self.traverser.addCollider(self.coll_ray, self.queue)

        #pathfinding
        self.navi = Navigator(path + directory + '/navmesh.csv', self.pcNode,
                              self.actor)
        self.target = render.attachNewNode('target')
        self.setTime(7.5)
        #tasks
        taskMgr.add(self.update, 'update_task', sort=45)
        self.clock = 7.5
        taskMgr.doMethodLater(1.0, self.clockTick, 'clock_task', sort=10)
        self.accept('window-event', self.windowEventHandler)
Esempio n. 11
0
File: demo.py Progetto: wezu/koparka
class Demo(DirectObject):
    def __init__(self, directory):
        #init ShowBase
        base = ShowBase.ShowBase()
        base.setBackgroundColor(1, 1, 1)
        #PStatClient.connect()
        self.lManager = LightManager()
        self.skyimg = PNMImage("data/sky_grad.png")

        #manager for post process filters (fxaa, soft shadows, dof)
        manager = FilterManager(base.win, base.cam)
        self.filters = setupFilters(manager, path, fxaa_only=False)

        #load a level
        self.level = loadLevel(path=path, from_dir=directory)

        self.startpos = None

        #process properties
        functions = {
            'coll_mask': self.setCollideMaskOn,
            'hide': self.hideNode,
            'startpos': self.setStratPos,
            'alpha': self.setAlpha
        }
        processProps(self.level, functions)

        #lights and shadows
        self.sun = setupLights(self.lManager)
        self.shadows = setupShadows(buffer_size=1024)

        #camera controll
        base.disableMouse()
        self.controler = CameraControler(shadows=self.shadows)
        #point and click interface
        self.pointer = PointAndClick()
        self.accept('mouse1', self.onMouseClick)

        #player model
        #could be another class.... well next time
        self.pcNode = render.attachNewNode('pcNode')
        self.actor = Actor(
            "demo_models/male", {
                "attack1": "demo_models/male_attack1",
                "attack2": "demo_models/male_attack2",
                "walk": "demo_models/male_run",
                "block": "demo_models/male_block",
                "die": "demo_models/male_die",
                "strafe": "demo_models/male_strafe2",
                "hit": "demo_models/male_hit",
                "idle": "demo_models/male_ready2"
            })
        self.actor.setBlend(frameBlend=True)
        self.actor.reparentTo(self.pcNode)
        self.actor.setScale(.1)
        self.actor.setShader(
            Shader.load(Shader.SLGLSL, path + "shaders/player_v.glsl",
                        path + "shaders/player_f.glsl"))
        self.actor.loop("idle")
        self.pcNode.setPos(self.startpos)
        #collisions
        self.coll_ray = self.pcNode.attachNewNode(CollisionNode('collRay'))
        self.coll_ray.node().addSolid(CollisionRay(0, 0, 20, 0, 0, -180))
        self.coll_ray.node().setIntoCollideMask(BitMask32.allOff())
        self.coll_ray.node().setFromCollideMask(BitMask32.bit(1))
        #self.coll_ray.show()
        self.traverser = CollisionTraverser()
        self.queue = CollisionHandlerQueue()
        self.traverser.addCollider(self.coll_ray, self.queue)

        #pathfinding
        self.navi = Navigator(path + directory + '/navmesh.csv', self.pcNode,
                              self.actor)
        self.target = render.attachNewNode('target')
        self.setTime(7.5)
        #tasks
        taskMgr.add(self.update, 'update_task', sort=45)
        self.clock = 7.5
        taskMgr.doMethodLater(1.0, self.clockTick, 'clock_task', sort=10)
        self.accept('window-event', self.windowEventHandler)

    def clockTick(self, task):
        self.clock += 0.05
        if self.clock > 23.9:
            self.clock = 0.0
        self.setTime(self.clock)
        return task.again

    def blendPixels(self, p1, p2, blend):
        c1 = [p1[0] / 255.0, p1[1] / 255.0, p1[2] / 255.0, p1[3] / 255.0]
        c2 = [p2[0] / 255.0, p2[1] / 255.0, p2[2] / 255.0, p2[3] / 255.0]
        return Vec4(c1[0] * blend + c2[0] * (1.0 - blend),
                    c1[1] * blend + c2[1] * (1.0 - blend),
                    c1[2] * blend + c2[2] * (1.0 - blend),
                    c1[3] * blend + c2[3] * (1.0 - blend))

    def setTime(self, time):
        sunpos = min(0.5, max(-0.5, (time - 12.0) / 14.0))
        render.setShaderInput('sunpos', sunpos)
        x1 = int(time)
        x2 = x1 - 1
        if x2 < 0:
            x2 = 0
        blend = time % 1.0

        p1 = self.skyimg.getPixel(x1, 0)
        p2 = self.skyimg.getPixel(x2, 0)
        sunColor = self.blendPixels(p1, p2, blend)
        sunColor[0] = sunColor[0] * 1.5
        sunColor[1] = sunColor[1] * 1.5
        sunColor[2] = sunColor[2] * 1.5
        p1 = self.skyimg.getPixel(x1, 1)
        p2 = self.skyimg.getPixel(x2, 1)
        skyColor = self.blendPixels(p1, p2, blend)

        p1 = self.skyimg.getPixel(x1, 2)
        p2 = self.skyimg.getPixel(x2, 2)
        cloudColor = self.blendPixels(p1, p2, blend)

        p1 = self.skyimg.getPixel(x1, 3)
        p2 = self.skyimg.getPixel(x2, 3)
        fogColor = self.blendPixels(p1, p2, blend)
        fogColor[3] = abs(sunpos) * 0.01 + 0.001

        if time < 6.0 or time > 18.0:
            p = 0.0
        else:
            p = sunpos * -180.0
        LerpHprInterval(self.shadows['sunNode'], 1.0, (0, p, 0)).start()
        #self.shadows['sunNode'].setP(p)
        self.lManager.setLight(id=self.sun,
                               pos=self.shadows['shadowCamera'].getPos(render),
                               color=sunColor,
                               radius=10000.0)
        self.level['skydome'].setShaderInput("sunColor", sunColor)
        self.level['skydome'].setShaderInput("skyColor", skyColor)
        self.level['skydome'].setShaderInput("cloudColor", cloudColor)
        render.setShaderInput("fog", fogColor)

    def windowEventHandler(self, window=None):
        if window is not None:  # window is none if panda3d is not started
            self.filters[-1].setShaderInput("rt_w", float(base.win.getXSize()))
            self.filters[-1].setShaderInput("rt_h", float(base.win.getYSize()))

    def onMouseClick(self):
        pos = self.pointer.getPos()
        if pos:
            self.target.setPos(pos)
            self.navi.moveTo(self.target)

    def setAlpha(self, node, mode):
        pass
        #node.setTransparency(TransparencyAttrib.MAlpha)

    def setCollideMaskOn(self, node, mask):
        print("setting mask", mask, "on", node)
        node.setCollideMask(BitMask32.bit(mask))

    def hideNode(self, node, doHide):
        if doHide == 1:
            print("hidding node", node)
            node.hide()

    def setStratPos(self, node, not_used=None):
        self.startpos = node.getPos(render)

    def update(self, task):
        time = globalClock.getFrameTime()
        render.setShaderInput('time', time)
        self.controler.cameraNode.setPos(self.pcNode.getPos())
        #self.shadows['shadowNode'].setPos(self.pcNode.getPos())
        if len(self.filters) > 1:
            self.filters[4].setShaderInput('time', time)
        #water
        if self.level['water']['waterNP'].getZ() > 0.0:
            self.level['water']['waterCamera'].setMat(
                base.cam.getMat(render) *
                self.level['water']['wPlane'].getReflectionMat())
        #collision
        self.traverser.traverse(render)
        if self.queue.getNumEntries() > 0:
            self.queue.sortEntries()
            pos = self.queue.getEntry(0).getSurfacePoint(render)
            self.pcNode.setZ(pos[2] + 0.2)
        return task.cont
Esempio n. 12
0
 def __init__(self):       
     #setup
     size=512 #size of the wave buffer
     self.update_speed=1.0/60.0 #the waves only look good when generated at this constant rate (1/60=60fps)
    
     
     base = ShowBase.ShowBase()   
     base.setBackgroundColor(0.1,0.25,0.4) 
     #I don't know what I'm doin'...
     base.trackball.node().setPos(-128, 150, -50)    
     base.trackball.node().setHpr(0, 40, 0) 
     
     #wave source buffer
     self.wave_source=self.makeBuffer(size=256, texFilter=Texture.FTNearest)
     self.wave_source['quad'].setColor(0,0,0, 0)
     self.wave_source['quad'].setZ(-10)
     
     #a normal, animated actor
     visible_panda=self.makeWalkingPanda(render)
     
     #a copy of the panda, but rendered offscreen
     phantom_panda=self.makeWalkingPanda(self.wave_source['root']) 
     #do the magic       
     self.setWaveCaster(phantom_panda)
     
     #make the ping-pong buffer to draw the water waves
     #shader 2 makes no use of the wave_source texture, appart from that they are identical
     shader1=Shader.load(Shader.SL_GLSL,'v.glsl', 'make_wave_f.glsl')
     shader2=Shader.load(Shader.SL_GLSL,'v.glsl', 'make_wave2_f.glsl')        
     self.ping=self.makeBuffer(shader1, size)
     self.pong=self.makeBuffer(shader2, size)
     self.ping['quad'].setShaderInput("size",float(size))
     self.pong['quad'].setShaderInput("size",float(size))        
     self.ping['quad'].setTexture(self.pong['tex'])
     self.pong['quad'].setTexture(self.ping['tex'])        
     self.ping['quad'].setShaderInput('startmap', self.wave_source['tex'])        
     self.ping['buff'].setActive(True)
     self.pong['buff'].setActive(False)   
     
     #some vars to track the state of things
     self.time=0
     self.state=0
     
     #set lights
     #reusing some of my old stuff, no mind the light manager
     l=LightManager()
     self.sun=l.addLight(pos=(128.0, 300.0, 50.0), color=(0.9, 0.9, 0.9), radius=500.0)
     
     #skybox
     skybox=loader.loadModel('skybox/skybox')
     skybox.reparentTo(render)
     skybox.setPos(128, 128, 64)
     skybox.setScale(300)
     #preview         
     cm = CardMaker("plane")
     cm.setFrame(0, 256, 0, 256)
     self.water_plane=render.attachNewNode(cm.generate())
     self.water_plane.lookAt(0, 0, -1)
     self.water_plane.setPos(0,0,1.0)
     self.water_plane.flattenStrong()
     self.water_plane.setShader(Shader.load(Shader.SL_GLSL,'water_v.glsl','water_f.glsl'))
     self.water_plane.setShaderInput("size",float(size))
     self.water_plane.setShaderInput("normal_map",loader.loadTexture("normal.png"))
     self.water_plane.setTexture(self.pong['tex'])           
     self.water_plane.hide(BitMask32.bit(1))
     self.makeWaterBuffer()  
     #self.water_plane.hide()
  
     #update task
     taskMgr.add(self.update, 'update')