Пример #1
0
    def __init__(self, Character1, Character2, arena, roundTime=90, name1="Player1", name2="Player2"):
        ###character 1 and 2 are strings pointing to the assets with the character. will be delivered by the character-selection screen.
        ### till we have the selection screen, hardcode or default them.

        self.arena = loader.loadModel(arena)
        self.arena.reparentTo(render)
        self.arena.setScale(4)
        self.arena.find("**/ground").setCollideMask(BitMask32.bit(1))
        self.arena.find("**/ground").hide()
        self.arena.find("**/out").setCollideMask(BitMask32.bit(1))
        self.arena.find("**/out").hide()
        
        self.player1 = Fighter(Character1, self.roundEnd, 0,  name=name1 )
        self.player2 = Fighter(Character2, self.roundEnd, 1, name=name2 )
        
        self.player1.setOpponent(self.player2)
        self.player2.setOpponent(self.player1)
        self.matchCam =MatchCamera(self.player1.getNP(),self.player2.getNP(),base.camera )
        self.roundTime=roundTime
        self.timer = Timer(self.roundEnd)
        self.messages = AnimatedText()
        self.winner = AnimatedText(pos = (0.0,0.0))
        self.roundStart()
Пример #2
0
class Match():
    def __init__(self, Character1, Character2, arena, roundTime=90, name1="Player1", name2="Player2"):
        ###character 1 and 2 are strings pointing to the assets with the character. will be delivered by the character-selection screen.
        ### till we have the selection screen, hardcode or default them.

        self.arena = loader.loadModel(arena)
        self.arena.reparentTo(render)
        self.arena.setScale(4)
        self.arena.find("**/ground").setCollideMask(BitMask32.bit(1))
        self.arena.find("**/ground").hide()
        self.arena.find("**/out").setCollideMask(BitMask32.bit(1))
        self.arena.find("**/out").hide()
        
        self.player1 = Fighter(Character1, self.roundEnd, 0,  name=name1 )
        self.player2 = Fighter(Character2, self.roundEnd, 1, name=name2 )
        
        self.player1.setOpponent(self.player2)
        self.player2.setOpponent(self.player1)
        self.matchCam =MatchCamera(self.player1.getNP(),self.player2.getNP(),base.camera )
        self.roundTime=roundTime
        self.timer = Timer(self.roundEnd)
        self.messages = AnimatedText()
        self.winner = AnimatedText(pos = (0.0,0.0))
        self.roundStart()
    
    def roundStart(self,task=None):
        self.player1.prepareFighter()
        self.player2.prepareFighter()
        self.timer.setTime(self.roundTime)
        self.timer.start()
        self.messages.splay("Fight!")
        self.roundEnded = False
                
    def roundEnd(self,task=None):
        #TODO: hook in GUI to display apporpriate messages for KO and Draw , player wins , match end etc
        if self.roundEnded:
            return
        else:
            self.roundEnded = True
        self.timer.stop()
        #double ko would require a variable like roundOver.
        #short delay to allow double ko. 
        if self.player1.getHealth()<=0 and self.player2.getHealth() <=0:
            #double knockout.
            self.player1.fighterWin()
            self.player2.fighterWin()
            self.messages.splay("Double K.O.")
            
        elif self.player2.getHealth() > 0 > self.player1.getHealth():
            self.player2.fighterWin()
            self.messages.splay("K.O.")
            #player2 wins by ko
            
        elif self.player2.getHealth() < 0 < self.player1.getHealth():
            self.player1.fighterWin()
            self.messages.splay("K.O.")
            #player1 wins by ko
            
        elif self.player2.getHealth() > self.player1.getHealth() :
            self.player2.fighterWin() 
            self.messages.splay("K.O.")
            #put both an a state where they cant attack each other!!
            
        elif self.player2.getHealth() < self.player1.getHealth() :   
            self.player1.fighterWin() 
            self.messages.splay("K.O.")
            #put both an a state where they cant attack each other!!
             
        else:
            self.player1.fighterWin()
            self.player2.fighterWin() 
            #both players with the same health??? W T F ??
            #put in non-attack-state 
            
        
        
        print self.player1.getWins(),self.player2.getWins()
        if self.player1.getWins() >=3 and self.player2.getWins() >=3:
            #match ended in a draw
            self.winner.splay("Draw!")
            self.endMatch()
            return
        elif self.player1.getWins() >=3:
            #player1 wins
            self.winner.splay("Player 1 wins!")
            self.endMatch()
            return
        elif self.player2.getWins() >=3:
            #player2 wins
            self.winner.splay("Player 2 wins!")
            self.endMatch()
            return
        else:
            pass
        
        taskMgr.doMethodLater(3,self.roundStart,"startRound")
            
        #update the round-wins gui. display guistuff, play win animation on chars, do whatever you like..
        #reset the char healt,reset the positions and fsm states, then let the fun go on.
        #eventually clear the round-end variable.
        #if one player has 3 wins. end match
 
    def endMatch(self):
        self.winner.splay("Match ended!")
        print "match ends!"