Exemplo n.º 1
0
 def __init__(self):
   self.mobiles = []
   self.planes = []
   self.gravity = Vector2d(0.0,0.0)
   self.particlemanager = ParticleManager(50)
   self.groundcollider = GroundCollider(self.particlemanager)
Exemplo n.º 2
0
def main():
    #Get our pygame up and running
    pygame.init()
    pygame.font.init()
  
    #Are we on the phone?
    # If so, map the back key to the escape key
    if android:
        android.init()
        android.map_key(android.KEYCODE_BACK, pygame.K_ESCAPE)
        
    #Setting up the screen
    winstyle = 0
    bestdepth = pygame.display.mode_ok(SCREENRECT.size, winstyle, 32)
    screen = pygame.display.set_mode(SCREENRECT.size, winstyle, bestdepth)
    pygame.display.set_caption('Chong Flight')

    #Load our spritesheet
    spritesheet = SpriteSheet('spriteSheet.png')
    
    #Setup the images for the sprites 
    BlueBaddie.image = spritesheet.imgat((0, 32, 32, 32), -1)
    RedBaddie.image = spritesheet.imgat((0,64, 32, 32), -1)
    Crosshair.image = spritesheet.imgat((0,0,32,32), -1)
        
    #Set up our sprite groups    
    blueBaddieGroup = pygame.sprite.Group()
    redBaddieGroup = pygame.sprite.Group()
    crosshairsGroup = pygame.sprite.Group()
    
    #Set up all our renderPlains
    all = pygame.sprite.RenderPlain()
    blueBaddieRender = pygame.sprite.RenderPlain()
    redBaddieRender = pygame.sprite.RenderPlain()
    crosshairRender = pygame.sprite.RenderPlain()
    
    #Finally set up our containers for our sprites
    BlueBaddie.containers = blueBaddieGroup, blueBaddieRender, all
    RedBaddie.containers = redBaddieGroup, redBaddieRender, all
    Crosshair.containers = crosshairsGroup, crosshairRender, all
    
    #Make a new player and particle Manager
    player = Player(screen)
    particleManager = ParticleManager(screen)
    
    #Make us a baddie manager
    bm = BaddieManager(player, particleManager, screen)
    
    #Start your clocks!
    clock = pygame.time.Clock()        
    
    #GAME LOOP!!!!!!!!!!
    while 1:
        #60 fps and fill our screen with black death space
        elapsedTime = clock.tick(60)
        screen.fill((0,0,0))
        
        #Check for quiting
        for event in pygame.event.get():
            if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
                return
            
        #Check for android pausing
        keystate = pygame.key.get_pressed()
        if android:
            if android.check_pause():
                android.wait_for_resume()
                
        #If all our blue baddies are deaded, we need another wave!
        if len(blueBaddieGroup) == 0:
            bm.getWave()
            
        #Update
        all.update(player.killShot)
        player.update()
        particleManager.update()
        particleManager.draw()
        
        #Draw
        player.draw()
        bm.draw()
        blueBaddieRender.draw(screen)
        redBaddieRender.draw(screen)
        crosshairRender.draw(screen)
        
        #Flip it
        pygame.display.flip()
Exemplo n.º 3
0
class World:
  particlemanager = 0
  landingzone = 0
  groundcollider = 0
  def __init__(self):
    self.mobiles = []
    self.planes = []
    self.gravity = Vector2d(0.0,0.0)
    self.particlemanager = ParticleManager(50)
    self.groundcollider = GroundCollider(self.particlemanager)
  def reset(self):
    self.mobiles = []
    self.planes = []    
  def addPlane(self,plane):
    self.planes.append(plane)
  def addMobile(self,mobile):
    self.mobiles.append(mobile)
    mobile.setupParticleEmitters(self.particlemanager,TextureHelper.loadTextureFromFile('star.png'))
  def setGravity(self,x,y):
    self.gravity.set(x,y)
  def setLandingzone(self,landingzone):
    self.landingzone = landingzone
  def getLandingzone(self):
    return self.landingzone
  def step(self,step):
    for mobile in self.mobiles:
      mobile.applyStep(step)
      grav = self.gravity.copy()
      grav.mulScalar(mobile.getMass())
      #grav.rotate(mobile.getAngle())
      mobile.applyForce(step,grav)
      for mobile2 in self.mobiles:
        if mobile != mobile2:
          if mobile.isBound(mobile2.getPosition(),mobile2.getRadius()) == 1:
            n = Vector2d.normal(mobile2.getPosition(),mobile.getPosition())
            vn = Vector2d.dotProduct(mobile.getVelocity(),n)
            if vn < 0:
              #mobile.getVelocity().display()
              #n.display()    
              Mobile.solveCollide(mobile,mobile2)
	      mobile.applyStep(step)
              mobile2.applyStep(step)
      for plane in self.planes:
        #d = plane.distancePoint(mobile.getPosition())
        #vn = Vector2d.dotProduct(mobile.getVelocity(),plane.getNormal())
        #if d < 0 and vn < 0:
        #  plane.reflective(mobile)
        
        for submobile in mobile.getMobiles():
          d = plane.distancePoint(submobile.getPhysicalPosition())
          vn = Vector2d.dotProduct(submobile.getVelocity(),plane.getNormal())
          if d < submobile.getRadius() and vn < 0:
            #ADDED CONDITION OVER PHYSICAL POINTS
            if submobile.getUpdatedPhysicalPoints().count > 0:
              ppcollide = 0
              for point in submobile.getUpdatedPhysicalPoints():
                if plane.distancePoint(point) < 0:
                  self.groundcollider.collideEvent(point)
                  n = plane.getNormal().copy()
                  n.normalize()
                  n.mulScalar(-plane.distancePoint(point))
                  #n.display()
                  mobile.getPosition().add(n)
                  mobile.updateMobiles()
                  
                  ppcollide = 1
                  
              if ppcollide == 1:
                plane.reflective(submobile)
                for submobile2 in mobile.getMobiles():
                  v = submobile2.getVelocity()
                  v.set(0.0,v.getY())
                mobile.angularVelocity = mobile.angularVelocity * 0.8

  def draw(self,canvas):

    if self.landingzone != 0:
      self.landingzone.draw(canvas)
    for mobile in self.mobiles:
      #p = mobile.getPosition()
      mobile.draw(canvas)
      #mobile.drawPhysical(canvas)
      #print "MOBILE %d %d\n"%(p.getX(),p.getY())
    if self.particlemanager != 0:
      self.particlemanager.update(1.0/60.0)
      self.particlemanager.draw(canvas)   
  def on_touch_down(self, touch):
    for mobile in self.mobiles:
      mobile.on_touch_down(touch)