예제 #1
0
class StageScreen(DirectObject.DirectObject):
    def __init__(self, callback = None):
        self.stageRoot = NodePath("stageSelectRoot")
        
        self.ps = PreviewStrip("../assets/stages" ,-0.7)
        self.ps.getStripNP().reparentTo(self.stageRoot)
        
        self.callback = callback
        # name of the stage will be displayed here
        self.text = OnscreenText("")
        self.text.reparentTo(self.stageRoot)
        self.text.setPos(0,self.ps.height - 0.4)
        
        self.preview_size = [-0.5,  0.5, -0.5, 0.5]
        
        self.generator = CardMaker("PreviewMaker") 
        self.generator.setFrame(*self.preview_size)
        
        self.preview = self.stageRoot.attachNewNode(self.generator.generate())
        self.preview.setPos(0,0, 0.4)
        # keys are read so that the first in the pair is from player 1
        # and second from the player 2, so that they both can decide
        self.keys = readKeys()
        self.left = [self.keys[0][1], self.keys[1][2]]
        self.right = [self.keys[0][3], self.keys[1][3]]
        self.select = [self.keys[0][4], self.keys[1][4]]
        
        self.ready = OnscreenText("ready")
        self.ready.reparentTo(self.stageRoot)
        self.ready.setPos(0,self.ps.height)
        # will be shown when players selected the stage
        self.ready.hide()
        # we notify ourselves to enable the key input and update text
        # and preview
        
        self.updateText()
        self.updateImg() 
        
        self.disableInput()
    
    def enableInput(self):
        self.accept( self.left[0], self.rotateLeft ) 
        self.accept( self.left[1], self.rotateLeft ) 
        self.accept( self.right[0], self.rotateRight ) 
        self.accept( self.right[1], self.rotateRight ) 
        self.accept( self.select[0], self.callback)
        self.accept( self.select[1], self.callback)
    
    def disableInput(self):
        for key in self.left + self.right + self.select:
            self.ignore(key) 
    
    def getNp(self):
        return self.stageRoot 
     
    def updateText(self):
        t = str(self.ps.current().getTexture().getFilename())
        self.text["text"] = t.split(sep)[-2] 
     
    def updateImg(self):
        self.preview.setTexture(self.ps.current().getTexture())

    def rotateRight(self):
        self.ps.rotateRight()
        self.updateText()
        self.updateImg()    
        
    def rotateLeft(self):
        self.ps.rotateLeft()
        self.updateText()
        self.updateImg()
    
    def hide(self):
        self.stageRoot.hide()
    
    def show(self):
        self.stageRoot.show()
        
    def getStage(self):
        # return path to stage acceptable by Match class
        t = str(self.ps.current().getTexture().getFilename()).rstrip("icon.jpg")
        return t + "stage"