Ejemplo n.º 1
0
    def __init__(self,characterPath , callOnDeath , side , name = None):
        #side indicates if the player is on the left or right side.
        #TODO: add collision tests against ring-out geometry in the arena, 
        

        self.fsm = FighterFsm(self,characterPath)    
        self.inputHandler = InputHandler(self.fsm,side)
        
        self.side = side
        
        self.wins = 0 #counting won rounds, a double-ko/draw counts as win for both.
        self.faceOpp = True  #looking at opponent
        self.callOnDeath = callOnDeath
        
        self.statusBitMask = BitMask32()
        self.defenseBitMask = BitMask32()    #active defense parts get a 1
        #the attack bitmask is generated by the fsm and passed to the attack method directly
    
        if not name:
            name = "player"+str(1+bool(side))
        
        self.healthBar = PlayerHud(side, name )
          
        self.fighterNP = render.attachNewNode(name)
        self.collTrav = CollisionTraverser(name)
        fromObject = self.fighterNP.attachNewNode(CollisionNode('colNode'+name))
        fromObject.node().addSolid(CollisionRay(0, 0, 2,0,0, -1))
        fromObject.node().setFromCollideMask(BitMask32.bit(1))
        fromObject.node().setIntoCollideMask(BitMask32.allOff())
        self.queue = CollisionHandlerQueue()
        self.collTrav.addCollider(fromObject, self.queue)
        
        self.fsm.getNP().reparentTo(self.fighterNP)
        #fromObject.show() #more debug collision visuals
        #self.collTrav.showCollisions(render) #debug visuals for collision     
        self.prepareFighter()
Ejemplo n.º 2
0
# main.py

import sys
from alien import Alien
from exportHandler import ExportHandler
from exportHandler import *

from inputHandler import InputHandler

if __name__ == '__main__':
    print("Welcome")

    alien = Alien()
    alien = InputHandler.takeAlienDetails(alien)

    formats_available = ExportHandler.fetch_plugins()
    to_req_format = InputHandler.enquireRequiredFormat(formats_available)

    ret = ExportHandler.convert_to_dest_format(formats_available,
                                               to_req_format, alien)

    if ret < 0:
        print("Conversion error:", ret)
Ejemplo n.º 3
0
class Fighter():
    def __init__(self,characterPath , callOnDeath , side , name = None):
        #side indicates if the player is on the left or right side.
        #TODO: add collision tests against ring-out geometry in the arena, 
        

        self.fsm = FighterFsm(self,characterPath)    
        self.inputHandler = InputHandler(self.fsm,side)
        
        self.side = side
        
        self.wins = 0 #counting won rounds, a double-ko/draw counts as win for both.
        self.faceOpp = True  #looking at opponent
        self.callOnDeath = callOnDeath
        
        self.statusBitMask = BitMask32()
        self.defenseBitMask = BitMask32()    #active defense parts get a 1
        #the attack bitmask is generated by the fsm and passed to the attack method directly
    
        if not name:
            name = "player"+str(1+bool(side))
        
        self.healthBar = PlayerHud(side, name )
          
        self.fighterNP = render.attachNewNode(name)
        self.collTrav = CollisionTraverser(name)
        fromObject = self.fighterNP.attachNewNode(CollisionNode('colNode'+name))
        fromObject.node().addSolid(CollisionRay(0, 0, 2,0,0, -1))
        fromObject.node().setFromCollideMask(BitMask32.bit(1))
        fromObject.node().setIntoCollideMask(BitMask32.allOff())
        self.queue = CollisionHandlerQueue()
        self.collTrav.addCollider(fromObject, self.queue)
        
        self.fsm.getNP().reparentTo(self.fighterNP)
        #fromObject.show() #more debug collision visuals
        #self.collTrav.showCollisions(render) #debug visuals for collision     
        self.prepareFighter()
   
   
    def updateState(self,newState = None):
        if newState:
            if "enter" + state in dir(self.fsm):
                self.fsm.forceTransition(newState)
        else:
            self.inputHandler.pollEvents()          
        
    def prepareFighter(self):
        taskMgr.remove("player"+str(self.side))
        self.speed = (0,0)
        self.fsm.forceTransition("Idle")
        self.health= 100
        self.healthBar.setHealth(self.health)
        self.healthBar.setRoundIndicator('V'*self.wins)
        
        if self.side:
            self.fighterNP.setX(5)
        else:
            self.fighterNP.setX(-5)
        self.fighterNP.setY(0)
        taskMgr.add(self._playertask, "player"+str(self.side))
    
    def setStatusBitMask(self,bitmask):
        self.statusBitMask = bitmask
        
    def setDefenseBitMask(self,bitmask):
        self.defenseBitMask = bitmask 
   
    #getters and setters are a bit stupid here. properties from python 3 would be nice
    def fighterWin(self):
        #request a win-anim from the fsm if there are any
        self.wins += 1
        self.healthBar.setRoundIndicator('V'*self.wins)
    
    def getWins(self):
        return self.wins   
    
    def getHealth(self):
        return self.health
        
    def getNP(self):
        return self.fighterNP

    def setOpponent(self,opponent):
        self.opponent = opponent
        self.fighterNP.lookAt(self.opponent.getNP())
   
    def attack(self,attackBitMask,attackrange,damageHit,damageDodge=0,angle=30): #those variables will be supplied by the fsm states later on. 
                                                             #function is pretty redundant... for structure only, and for early days
        attackstatus = self.opponent.getAttacked(attackBitMask,attackrange,damageHit,damageDodge,angle)
        return attackstatus
    
    def _testHit(self,node1,node2,threshold=30, dist = 1):  #node1 which looks for a target , node2 is the target , threshold is the max-attack-angle, dist the dist
          dirVec = node1.getRelativePoint(node2,Vec3(0,0,0))
          dirVec = Vec3(dirVec[0],dirVec[1],dirVec[2])
          
          dirVec.normalize()
          angle = dirVec.angleDeg(Vec3(0,1,0))
          if angle < threshold and dist > node1.getDistance(node2):
            #print "hit at "+str(angle)+" degree!"
            return True
          else:
            #print angle,node1.getDistance(node2)
            return False
        
    def getAttacked(self,attackBitMask,attackrange,damageHit,damageDodge=0,angle = 30):
        """
        returns 0 if not hit, 1 if hit was blocked, 2 if hit, 3 for hit+KO 
        """
        if self.health <=0:
            return 4 #player is ko already
            

        if  not self._testHit(self.opponent.getNP(),self.fighterNP  ,angle,attackrange )  : #instead of 0, a sligtly positive values makes thinks look better.
            #attack misses due to out of range.
            return 0 

        if (self.statusBitMask & attackBitMask).getWord() == 0: # attak misses cause the player avoided it. went low or so.
            return 0
  
        if (self.defenseBitMask & attackBitMask).getWord():
            self.health -= damageDodge
            self.healthBar.setHealth(self.health)
            return 1 #hit,... but blocked so no combos 
            
        else:
            self.health -= damageHit
            self.healthBar.setHealth(self.health)
            if self.health <= 0 : #if KO
                taskMgr.remove("player"+str(self.side))
                self.fsm.forceTransition("Ko")
                #actually make the match.py allow the other player to KO (in case of doubleKO,befor calling round end.
                taskMgr.doMethodLater(0.5,self.callOnDeath,"RoundEnd") 
                return 3
            #TODO: requesting the same state as you are in doesnt work well.sorta need to re-enter the hit state
            if "Crouch" in self.fsm.state:
                self.fsm.forceTransition("CrouchHit")
            elif self.fsm.state:
                self.fsm.forceTransition("Hit")
            return 2 #regular hit
    
    def setSpeed(self,x,y):
        self.speed = (x,y)
    
    def faceOpponent(self,facing):
        self.faceOpp = facing #true if yuo look at the other player (usualy true unless attacking), so you can dodge an attack by evading.
    
    def _playertask(self,task):
        
        oldpos = self.fighterNP.getPos()
        
        dist = self.fighterNP.getY(self.opponent.getNP()) 

        if dist > 3 or self.speed[0]<0: #prevert players from walking throug each other , too troublesome atm
            self.fighterNP.setX(self.fighterNP,self.speed[1]*globalClock.getDt())
            self.fighterNP.setY(self.fighterNP,self.speed[0]*globalClock.getDt())
        else :
            self.speed = ( min(2,self.speed[0] ), self.speed[1])
            #also push back other player
            self.opponent.getNP().setY(self.opponent.getNP(),-self.speed[0]*globalClock.getDt() )
            
        self.collTrav.traverse(render)
        self.queue.sortEntries()
        for i in range(self.queue.getNumEntries()):
            entry = self.queue.getEntry(i)
            if "ground" in entry.getIntoNodePath().getName() :
                break
            if "out" in entry.getIntoNodePath().getName() :
                pass #ring out
                self.fighterNP.setPos(oldpos) #for now reset him as we have no ring-out anim yet #TODO: add ring out anim!
                break
            
        if self.queue.getNumEntries() == 0:
            #if there is no ground and no ring out, propably a wall or no thin like that. just reset the pos     
            self.fighterNP.setPos(oldpos)
            print "resetting fighter"
            
        if self.faceOpp:
            self.fighterNP.lookAt(self.opponent.getNP())      
                
        return task.cont
Ejemplo n.º 4
0
    "admin": sendToAdmin,
    "survivors": serverConn.getLiving,
    "status": serverConn.getStatus,
    "start": registerUser
}

#########################################
#	   	~~~Main~~~		#
#########################################
if __name__ == '__main__':
    # 1. Start whatsapp web handler (Uses commandline for confirmation)
    whatsappHandler.start()
    while not whatsappHandler.isReady():
        time.sleep(1)
    # 2. Start waiting for commandline commands
    inputHandler = InputHandler()
    inputHandler.start()
    # 3. Start network handler (Long Polling)
    serverConn.start()

    logFile = open(os.getcwd() + "/log.txt", "a")
    running = True

    while running:
        try:
            #Check for incoming commands
            incomingCommands = getFileCommands() + serverConn.getCommands()
            for command in incomingCommands:
                handleIncomingCommand(whatsappHandler, logFile, command)
                time.sleep(0.1)
            #Check for input commands
Ejemplo n.º 5
0
# main.py


import sys
from alien import Alien
from exportHandler import ExportHandler
from exportHandler import *

from inputHandler import InputHandler

if __name__ == '__main__':
    print("Welcome")

    alien = Alien()
    alien = InputHandler.takeAlienDetails(alien)

    formats_available = ExportHandler.fetch_plugins()
    to_req_format = InputHandler.enquireRequiredFormat(formats_available)


    ret = ExportHandler.convert_to_dest_format(formats_available, to_req_format, alien)

    if ret < 0:
        print ("Conversion error:", ret)
Ejemplo n.º 6
0
        shared.isClient = False
        shared.isNetworked = True
        logging.info('Running server')
    elif (arg.lower() == 'client'):
        from network.client import NetworkHandler
        shared.isClient = True
        shared.isNetworked = True
        logging.info('Running client')
    elif (len(arg) > 3 and arg.lower()[:3] == 'ip='):
        shared.host = arg.lower()[3:]
        logging.info('IP: ' + str(shared.host))
    elif (len(arg) > 5 and arg.lower()[:5] == 'port='):
        shared.port = int(arg.lower()[5:])
        logging.info('Port: ' + str(shared.port))

timer = Timer()
map = Map(96, 48)
renderer = Renderer()
inputHandler = InputHandler()
inputHandler.start()
if (shared.isNetworked):
    networkHandler = NetworkHandler()
    networkHandler.start()
while shared.running:
    gameLogic()
    gameRender()
    gameInput()
    timer.startSection('SLEEP')
    timer.sync(10)
if (shared.isNetworked):
    networkHandler.stop()
Ejemplo n.º 7
0
# pygame init
pygame.mixer.pre_init(22050, -16, 1, 64)
pygame.mixer.init()
pygame.init()

from inputHandler import InputHandler
from guiMenu import GuiMenu
from guiSettings import GuiSettings
from pongGame import PongGame
from subprocess import call

# Hide the cursor
pygame.mouse.set_visible(False)

# Create objects here so settings stay remembered
input = InputHandler()
settings = GuiSettings(input)
menu = GuiMenu(input)

# Bug fix, the first sound the game plays doesn't make sound.
pygame.mixer.Sound('/home/pi/Desktop/pong2d/pong_8bit_scored.wav').play(0)

playGame = True
shutDown = False
while playGame:
    # get action from menu
    action = menu.handleMenu()
    # check if game needs to start
    if (action == menu.STATE_PLAY):
        # create game
        game = PongGame(input, settings.getMaxScore(), settings.getBallSpeed(),