Exemplo n.º 1
0
class FirstTry(visual):
    def setup(self):
        self.tex1 = MovieTexture('videos/saturn5_apollo_launch.mp4')
        assert self.tex1.read('videos/saturn5_apollo_launch.mp4')
        self.tex2 = MovieTexture('videos/boards_eye_view.mp4')
        assert self.tex2.read('videos/boards_eye_view.mp4')

        self.cm1 = CardMaker('saturn')
        self.cm1.setFrameFullscreenQuad()
        self.cm1.setUvRange(self.tex1)
        self.card1 = NodePath(self.cm1.generate())
        self.card1.reparentTo(self.path)
        self.card1.setPos(0,0,10)
        self.card1.setP(50)

        self.cm2 = CardMaker('board')
        self.cm2.setFrameFullscreenQuad()
        self.cm2.setUvRange(self.tex2)
        self.card2 = NodePath(self.cm2.generate())
        self.card2.reparentTo(self.path)
        self.card2.setPos(0,0,-10)
        self.card2.setP(-50)

        self.card1.setTexture(self.tex1)
        self.card1.setTexScale(TextureStage.getDefault(), self.tex1.getTexScale())
        self.card2.setTexture(self.tex2)
        self.card2.setTexScale(TextureStage.getDefault(), self.tex2.getTexScale())

        self.card1.setScale(10)
        self.card2.setScale(10)

    def getBeat(self):
        pass
class DistributedCinemaInterior(DistributedToonInterior.DistributedToonInterior
                                ):
    notify = directNotify.newCategory("DistributedCinemaInterior")

    def __init__(self, cr):
        DistributedToonInterior.DistributedToonInterior.__init__(self, cr)
        self.fsm = ClassicFSM.ClassicFSM('DCinemaInterior', [
            State.State('off', self.enterOff, self.exitOff),
            State.State('show', self.enterShow, self.exitShow),
            State.State('intermission', self.enterIntermission,
                        self.exitIntermission)
        ], 'off', 'off')
        self.fsm.enterInitialState()
        self.state = None
        self.cinemaIndex = None
        self.movieTex = None
        self.movieCard = None
        self.movieSound = None
        self.movieTrack = None
        self.intermissionText = None

    def makeInterior(self):
        # Always use the same room for cinemas.
        DistributedToonInterior.DistributedToonInterior.makeInterior(
            self, roomIndex=0)

    def announceGenerate(self):
        DistributedToonInterior.DistributedToonInterior.announceGenerate(self)
        self.sendUpdate('requestStateAndTimestamp')

    def disable(self):
        self.fsm.requestFinalState()
        self.fsm = None
        self.state = None
        self.cinemaIndex = None
        self.movieTex = None
        self.movieCard = None
        self.movieSound = None
        self.movieTrack = None
        self.intermissionText = None
        self.cr.playGame.hood.loader.interiorMusic.stop()
        DistributedToonInterior.DistributedToonInterior.disable(self)

    def darkenInterior(self):
        darkenIval = self.interior.colorScaleInterval(
            3.0,
            colorScale=(0.3, 0.3, 0.3, 1.0),
            startColorScale=(1.0, 1.0, 1.0, 1.0),
            blendType='easeInOut')
        darkenIval.start()

    def lightenInterior(self):
        lightenIval = self.interior.colorScaleInterval(
            3.0,
            colorScale=(1, 1, 1, 1.0),
            startColorScale=(0.3, 0.3, 0.3, 1.0),
            blendType='easeInOut')
        lightenIval.start()

    def enterShow(self, ts=0):
        self.darkenInterior()
        self.cr.playGame.hood.loader.interiorMusic.stop()

        videoFile = CinemaGlobals.Cinemas[self.cinemaIndex][0]
        audioFile = CinemaGlobals.Cinemas[self.cinemaIndex][1]

        self.movieTex = MovieTexture(self.uniqueName("movieTex"))
        self.movieTex.read(videoFile)
        card = CardMaker(self.uniqueName('movieCard'))
        card.setFrame(-1.5, 1.5, -1, 1)
        self.movieCard = NodePath(card.generate())
        self.movieCard.reparentTo(render)
        self.movieCard.setPos(
            self.interior.find('**/sign_origin;+s').getPos(render))
        #self.movieCard.setX(self.movieCard, -0.05)
        self.movieCard.setHpr(
            self.interior.find('**/sign_origin;+s').getHpr(render))
        self.movieCard.setDepthWrite(1, 1)
        self.movieCard.setTwoSided(True)
        self.movieCard.setTexture(self.movieTex)
        self.movieCard.setTexScale(TextureStage.getDefault(),
                                   self.movieTex.getTexScale())
        self.movieCard.setScale(2.5)
        self.movieSound = base.loadSfx(audioFile)
        self.movieTex.synchronizeTo(self.movieSound)
        self.movieTrack = SoundInterval(self.movieSound,
                                        name=self.uniqueName('movieTrack'))
        self.movieTrack.setDoneEvent(self.movieTrack.getName())
        self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request,
                        ['off'])
        self.movieTrack.start(ts)

    def exitShow(self):
        self.ignore(self.movieTrack.getDoneEvent())
        self.movieTrack.finish()
        self.movieTrack = None
        self.movieSound = None
        self.movieCard.removeNode()
        self.movieCard = None
        self.movieTex = None

        self.lightenInterior()
        self.cr.playGame.hood.loader.interiorMusic.play()

    def enterIntermission(self, ts=0):
        self.intermissionText = DirectLabel(
            relief=None,
            text_decal=True,
            text="",
            scale=0.7,
            parent=self.interior.find('**/sign_origin;+s'),
            text_font=CIGlobals.getMickeyFont(),
            text_fg=(1, 0.9, 0, 1))
        self.movieTrack = Sequence(name=self.uniqueName('intermissionTrack'))
        for second in range(CinemaGlobals.IntermissionLength + 1):
            timeRemaining = CinemaGlobals.IntermissionLength - second
            self.movieTrack.append(
                Func(self.setIntermissionText,
                     "Next show in:\n%d" % timeRemaining))
            self.movieTrack.append(Wait(1.0))
        self.movieTrack.setDoneEvent(self.movieTrack.getName())
        self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request,
                        ['off'])
        self.movieTrack.start(ts)

    def setIntermissionText(self, text):
        self.intermissionText['text'] = text

    def exitIntermission(self):
        self.ignore(self.movieTrack.getDoneEvent())
        self.movieTrack.finish()
        self.movieTrack = None
        self.intermissionText.destroy()
        self.intermissionText = None

    def enterOff(self):
        pass

    def exitOff(self):
        pass

    def setCinemaIndex(self, index):
        self.cinemaIndex = index

    def getCinemaIndex(self):
        return self.cinemaIndex

    def setState(self, state, timestamp):
        ts = globalClockDelta.localElapsedTime(timestamp)
        self.state = state
        self.fsm.request(state, [ts])

    def getState(self):
        return self.state
class Tutorial:
    def __init__(self, pat):
        self.t = Transitions(loader)
        self.pickAToon = pat

    def askTutorial(self):
        self.firstTimeMsg = YesNoDialog(text=CIGlobals.FirstTimeMsg,
                                        text_scale=0.07,
                                        text_wordwrap=18,
                                        buttonGeomList=[
                                            CIGlobals.getOkayBtnGeom(),
                                            CIGlobals.getCancelBtnGeom()
                                        ],
                                        button_relief=None,
                                        button_text_pos=(0, -0.1),
                                        command=self.handleTutorialDecision,
                                        image_color=CIGlobals.DialogColor,
                                        fadeScreen=1)

    def handleTutorialDecision(self, value):
        if value:
            self.firstTimeMsg.destroy()
            self.startTutorial()
            base.hoodBGM.stop()
        else:
            self.firstTimeMsg.destroy()
            self.enablePatButtons()

    def enablePatButtons(self):
        for btn in self.pickAToon.btnList:
            btn['state'] = DGG.NORMAL
        self.pickAToon.quit_btn['state'] = DGG.NORMAL

    def startTutorial(self):
        self.t.fadeOut(1)
        Sequence(Wait(1.2), Func(self.playVideo)).start()

    def playVideo(self):
        self.t.fadeIn(0)
        self.pickAToon.removeGui()
        self.movieTex = MovieTexture("tutorial")
        assert self.movieTex.read(
            "tutorial.avi"), "Failed to load tutorial video"

        cm = CardMaker("tutorialCard")
        cm.setFrameFullscreenQuad()
        self.card = NodePath(cm.generate())
        self.card.reparentTo(render2d)
        self.card.setTexture(self.movieTex)
        self.card.setTexScale(TextureStage.getDefault(),
                              self.movieTex.getTexScale())
        self.movieSound = loader.loadSfx("tutorial.avi")
        self.movieTex.synchronizeTo(self.movieSound)

        self.movieSound.play()
        taskMgr.add(self.checkMovieStatus, "checkMovieStatus")

    def checkMovieStatus(self, task):
        if self.movieSound.status() == AudioSound.READY:
            self.stopVideo()
            return task.done
        return task.cont

    def stopVideo(self):
        self.movieSound.stop()
        self.card.removeNode()
        self.t.fadeOut(0)
        self.pickAToon.createGui(1)
        Sequence(Wait(0.2), Func(self.t.fadeIn, 1)).start()
Exemplo n.º 4
0
class CameraApp(GuiHandler):
    __ImageDir = "data/images"
    
    def __init__(self, device):
        GuiHandler.__init__(self)
        self.func3 = "Si"
        self.func2 = ""
        self.func1 = "No"
        self.title = "Guardar?"
        self.parent = device
        self.video_mode = False
        
        option = WebcamVideo.get_option(0)
        self.texture = MovieTexture(option)
        self.texture.setKeepRamImage(True)
    	#self.texture = OpenCVTexture()
    	#self.texture.fromCamera()
    	scale = self.texture.getTexScale()
    	print scale
    	#self.texture = OpenCVTexture()
    	self.card = CardMaker('webcam')
    	self.card.setFrame(-scale[0], scale[0], -scale[1], scale[1])
    	self.card.setUvRange(Point2(scale[0], 0), Point2(0, scale[1]))
    	
        self.card = render.attachNewNode(self.card.generate())
        
        screen = self.parent.get_screen()    
        self.card.reparentTo(screen.getParent())
        self.card.setTransform(screen.getTransform())
    	
        self.card.setSx(0.49)
        self.card.setSz(0.394)
        self.card.setHpr(0, 270, 0)
        self.card.setPos(0.004, 0.335, 0.1)
        self.card.hide()

    def activate(self, events):
        self.toggle_view(True)
        events.add_action("boton_izq1", self.quit)
        events.add_action("centro", self.shoot)
        events.add_action("boton_der", self.shoot)
        events.add_action("boton_izq", self.cancel)

    def shoot(self):
        if self.video_mode:
            max = self.texture.getXSize() * self.texture.getYSize()
            data = array.array('B')
            data.fromstring(self.texture.getRamImageAs("BGR1").getData())

            img = cairo.ImageSurface.create_for_data(data, cairo.FORMAT_ARGB32,
                       self.texture.getXSize(), self.texture.getYSize(),
                       self.texture.getXSize() * 4)

            self.cam_shot = cairo.ImageSurface(cairo.FORMAT_ARGB32,
                                               self.texture.getVideoWidth(),
                                               self.texture.getVideoHeight())

            ctx = cairo.Context(self.cam_shot)
            ctx.set_source_surface(img, 0 , 0)
            ctx.paint() 
            
            self.paint_background()
            self.cr.set_source_surface(self.draw_viewer(self.cam_shot), 30,
                                       self.top_margin + 5)
            self.cr.paint()
            self.paint_foreground()
            self.surface.write_to_png(self.get_output())
            self.parent.repaint()
            self.toggle_view(False)
        else:
            print "Saving..."
            pic_path = CameraApp.__ImageDir + "/p" + Util.generate_id() + ".png"
            print pic_path
            self.cam_shot.write_to_png(pic_path)
            self.toggle_view(True)

    def paint_scene(self):
        drawer_width = self.width - 60
        drawer_height = 2 * self.height / 3
        
        surface  = cairo.ImageSurface (cairo.FORMAT_ARGB32, self.width, self.height)
        context = cairo.Context(surface)
        
        scale_x = float(self.width) / float(self.cam_shot.get_width())
        scale_y = float(self.height) / float(self.cam_shot.get_height())
        
        
        context.scale(scale_x, scale_y)
        
        context.set_source_surface(self.cam_shot, 0, 0)
        context.paint()
        
        return surface
        
    def cancel(self):
        self.cam_shot = None
        self.toggle_view(True)
        
    def draw_viewer(self, image_surface):
        drawer_width = self.width - 60
        drawer_height = 2 * self.height / 3
    
        surface  = cairo.ImageSurface (cairo.FORMAT_ARGB32, drawer_width, drawer_height)
        context = cairo.Context(surface)
        
        context.rectangle(0, 0, drawer_width, drawer_height)
        context.set_source_rgba(.05, .05, .05, .8)
        context.fill()
        
        context.rectangle(1, 1, drawer_width - 2, drawer_height - 2)
        context.clip()
        context.new_path()
        
        context.transform(get_transformation_matrix(drawer_width, drawer_height, image_surface.get_width(), image_surface.get_height()))
        
        context.set_source_surface(image_surface, 0, 0)
        context.paint()

        return surface
    
    def paint_background(self):
        # Fondo
        gradient = cairo.LinearGradient(0, 0, 0, self.height)
        
        gradient.add_color_stop_rgb(0, 0, 0, 0)
        gradient.add_color_stop_rgb(1, .4, .4, .4)
        
        self.cr.set_source(gradient)
        self.cr.move_to(0, 0)
        self.cr.line_to(self.width, 0)
        self.cr.line_to(self.width, self.height)
        self.cr.line_to(0, self.height)
        self.cr.close_path()
        self.cr.fill()
    
    def quit(self):
        self.toggle_view(False)
        self.parent.launch("menu")

    def toggle_view(self, video):
        self.video_mode = video
        if video:
            #self.texture.fromCamera()
            self.card.setTexture(self.texture)
            print (self.texture.getVideoWidth(), self.texture.getVideoHeight())
            self.card.show()
            self.parent.get_screen().hide()
        else:
            #self.texture = OpenCVTexture()
            self.card.setTexture(self.texture)
            self.card.hide()
            self.parent.get_screen().show()
Exemplo n.º 5
0
class CameraApp(GuiHandler):
    __ImageDir = "data/images"

    def __init__(self, device):
        GuiHandler.__init__(self)
        self.func3 = "Si"
        self.func2 = ""
        self.func1 = "No"
        self.title = "Guardar?"
        self.parent = device
        self.video_mode = False

        option = WebcamVideo.get_option(0)
        self.texture = MovieTexture(option)
        self.texture.setKeepRamImage(True)
        #self.texture = OpenCVTexture()
        #self.texture.fromCamera()
        scale = self.texture.getTexScale()
        print scale
        #self.texture = OpenCVTexture()
        self.card = CardMaker('webcam')
        self.card.setFrame(-scale[0], scale[0], -scale[1], scale[1])
        self.card.setUvRange(Point2(scale[0], 0), Point2(0, scale[1]))

        self.card = render.attachNewNode(self.card.generate())

        screen = self.parent.get_screen()
        self.card.reparentTo(screen.getParent())
        self.card.setTransform(screen.getTransform())

        self.card.setSx(0.49)
        self.card.setSz(0.394)
        self.card.setHpr(0, 270, 0)
        self.card.setPos(0.004, 0.335, 0.1)
        self.card.hide()

    def activate(self, events):
        self.toggle_view(True)
        events.add_action("boton_izq1", self.quit)
        events.add_action("centro", self.shoot)
        events.add_action("boton_der", self.shoot)
        events.add_action("boton_izq", self.cancel)

    def shoot(self):
        if self.video_mode:
            max = self.texture.getXSize() * self.texture.getYSize()
            data = array.array('B')
            data.fromstring(self.texture.getRamImageAs("BGR1").getData())

            img = cairo.ImageSurface.create_for_data(
                data, cairo.FORMAT_ARGB32, self.texture.getXSize(),
                self.texture.getYSize(),
                self.texture.getXSize() * 4)

            self.cam_shot = cairo.ImageSurface(cairo.FORMAT_ARGB32,
                                               self.texture.getVideoWidth(),
                                               self.texture.getVideoHeight())

            ctx = cairo.Context(self.cam_shot)
            ctx.set_source_surface(img, 0, 0)
            ctx.paint()

            self.paint_background()
            self.cr.set_source_surface(self.draw_viewer(self.cam_shot), 30,
                                       self.top_margin + 5)
            self.cr.paint()
            self.paint_foreground()
            self.surface.write_to_png(self.get_output())
            self.parent.repaint()
            self.toggle_view(False)
        else:
            print "Saving..."
            pic_path = CameraApp.__ImageDir + "/p" + Util.generate_id(
            ) + ".png"
            print pic_path
            self.cam_shot.write_to_png(pic_path)
            self.toggle_view(True)

    def paint_scene(self):
        drawer_width = self.width - 60
        drawer_height = 2 * self.height / 3

        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, self.width,
                                     self.height)
        context = cairo.Context(surface)

        scale_x = float(self.width) / float(self.cam_shot.get_width())
        scale_y = float(self.height) / float(self.cam_shot.get_height())

        context.scale(scale_x, scale_y)

        context.set_source_surface(self.cam_shot, 0, 0)
        context.paint()

        return surface

    def cancel(self):
        self.cam_shot = None
        self.toggle_view(True)

    def draw_viewer(self, image_surface):
        drawer_width = self.width - 60
        drawer_height = 2 * self.height / 3

        surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, drawer_width,
                                     drawer_height)
        context = cairo.Context(surface)

        context.rectangle(0, 0, drawer_width, drawer_height)
        context.set_source_rgba(.05, .05, .05, .8)
        context.fill()

        context.rectangle(1, 1, drawer_width - 2, drawer_height - 2)
        context.clip()
        context.new_path()

        context.transform(
            get_transformation_matrix(drawer_width, drawer_height,
                                      image_surface.get_width(),
                                      image_surface.get_height()))

        context.set_source_surface(image_surface, 0, 0)
        context.paint()

        return surface

    def paint_background(self):
        # Fondo
        gradient = cairo.LinearGradient(0, 0, 0, self.height)

        gradient.add_color_stop_rgb(0, 0, 0, 0)
        gradient.add_color_stop_rgb(1, .4, .4, .4)

        self.cr.set_source(gradient)
        self.cr.move_to(0, 0)
        self.cr.line_to(self.width, 0)
        self.cr.line_to(self.width, self.height)
        self.cr.line_to(0, self.height)
        self.cr.close_path()
        self.cr.fill()

    def quit(self):
        self.toggle_view(False)
        self.parent.launch("menu")

    def toggle_view(self, video):
        self.video_mode = video
        if video:
            #self.texture.fromCamera()
            self.card.setTexture(self.texture)
            print(self.texture.getVideoWidth(), self.texture.getVideoHeight())
            self.card.show()
            self.parent.get_screen().hide()
        else:
            #self.texture = OpenCVTexture()
            self.card.setTexture(self.texture)
            self.card.hide()
            self.parent.get_screen().show()
Exemplo n.º 6
0
class DistributedCinemaInterior(DistributedToonInterior.DistributedToonInterior):
    notify = directNotify.newCategory('DistributedCinemaInterior')

    def __init__(self, cr):
        DistributedToonInterior.DistributedToonInterior.__init__(self, cr)
        self.fsm = ClassicFSM.ClassicFSM('DCinemaInterior', [State.State('off', self.enterOff, self.exitOff), State.State('show', self.enterShow, self.exitShow), State.State('intermission', self.enterIntermission, self.exitIntermission)], 'off', 'off')
        self.fsm.enterInitialState()
        self.state = None
        self.cinemaIndex = None
        self.movieTex = None
        self.movieCard = None
        self.movieSound = None
        self.movieTrack = None
        self.intermissionText = None
        return

    def makeInterior(self):
        DistributedToonInterior.DistributedToonInterior.makeInterior(self, roomIndex=0)

    def announceGenerate(self):
        DistributedToonInterior.DistributedToonInterior.announceGenerate(self)
        self.sendUpdate('requestStateAndTimestamp')

    def disable(self):
        self.fsm.requestFinalState()
        self.fsm = None
        self.state = None
        self.cinemaIndex = None
        self.movieTex = None
        self.movieCard = None
        self.movieSound = None
        self.movieTrack = None
        self.intermissionText = None
        self.cr.playGame.hood.loader.interiorMusic.stop()
        DistributedToonInterior.DistributedToonInterior.disable(self)
        return

    def darkenInterior(self):
        darkenIval = self.interior.colorScaleInterval(3.0, colorScale=(0.3, 0.3, 0.3, 1.0), startColorScale=(1.0, 1.0, 1.0, 1.0), blendType='easeInOut')
        darkenIval.start()

    def lightenInterior(self):
        lightenIval = self.interior.colorScaleInterval(3.0, colorScale=(1, 1, 1, 1.0), startColorScale=(0.3, 0.3, 0.3, 1.0), blendType='easeInOut')
        lightenIval.start()

    def enterShow(self, ts = 0):
        self.darkenInterior()
        self.cr.playGame.hood.loader.interiorMusic.stop()
        videoFile = CinemaGlobals.Cinemas[self.cinemaIndex][0]
        audioFile = CinemaGlobals.Cinemas[self.cinemaIndex][1]
        self.movieTex = MovieTexture(self.uniqueName('movieTex'))
        self.movieTex.read(videoFile)
        card = CardMaker(self.uniqueName('movieCard'))
        card.setFrame(-1.5, 1.5, -1, 1)
        self.movieCard = NodePath(card.generate())
        self.movieCard.reparentTo(render)
        self.movieCard.setPos(self.interior.find('**/sign_origin;+s').getPos(render))
        self.movieCard.setHpr(self.interior.find('**/sign_origin;+s').getHpr(render))
        self.movieCard.setDepthWrite(1, 1)
        self.movieCard.setTwoSided(True)
        self.movieCard.setTexture(self.movieTex)
        self.movieCard.setTexScale(TextureStage.getDefault(), self.movieTex.getTexScale())
        self.movieCard.setScale(2.5)
        self.movieSound = base.loadSfx(audioFile)
        self.movieTex.synchronizeTo(self.movieSound)
        self.movieTrack = SoundInterval(self.movieSound, name=self.uniqueName('movieTrack'))
        self.movieTrack.setDoneEvent(self.movieTrack.getName())
        self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request, ['off'])
        self.movieTrack.start(ts)

    def exitShow(self):
        self.ignore(self.movieTrack.getDoneEvent())
        self.movieTrack.finish()
        self.movieTrack = None
        self.movieSound = None
        self.movieCard.removeNode()
        self.movieCard = None
        self.movieTex = None
        self.lightenInterior()
        self.cr.playGame.hood.loader.interiorMusic.play()
        return

    def enterIntermission(self, ts = 0):
        self.intermissionText = DirectLabel(relief=None, text_decal=True, text='', scale=0.7, parent=self.interior.find('**/sign_origin;+s'), text_font=CIGlobals.getMickeyFont(), text_fg=(1, 0.9, 0, 1))
        self.movieTrack = Sequence(name=self.uniqueName('intermissionTrack'))
        for second in range(CinemaGlobals.IntermissionLength + 1):
            timeRemaining = CinemaGlobals.IntermissionLength - second
            self.movieTrack.append(Func(self.setIntermissionText, 'Next show in:\n%d' % timeRemaining))
            self.movieTrack.append(Wait(1.0))

        self.movieTrack.setDoneEvent(self.movieTrack.getName())
        self.acceptOnce(self.movieTrack.getDoneEvent(), self.fsm.request, ['off'])
        self.movieTrack.start(ts)
        return

    def setIntermissionText(self, text):
        self.intermissionText['text'] = text

    def exitIntermission(self):
        self.ignore(self.movieTrack.getDoneEvent())
        self.movieTrack.finish()
        self.movieTrack = None
        self.intermissionText.destroy()
        self.intermissionText = None
        return

    def enterOff(self):
        pass

    def exitOff(self):
        pass

    def setCinemaIndex(self, index):
        self.cinemaIndex = index

    def getCinemaIndex(self):
        return self.cinemaIndex

    def setState(self, state, timestamp):
        ts = globalClockDelta.localElapsedTime(timestamp)
        self.state = state
        self.fsm.request(state, [ts])

    def getState(self):
        return self.state