def update(self): Sprite.update(self) # Keyboard Input if (App.Keys[pygame.K_LEFT] or App.Keys[pygame.K_a] or App.Keys[pygame.K_RIGHT] or App.Keys[pygame.K_d]): if (App.Keys[pygame.K_LEFT] or App.Keys[pygame.K_a]): self.velocity -= self.accel if (App.Keys[pygame.K_RIGHT] or App.Keys[pygame.K_d]): self.velocity += self.accel if (abs(self.velocity) > self.maxVelocity): self.velocity = self.maxVelocity * math.copysign(1, self.velocity) else: self.velocity *= 0.80 if (abs(self.velocity) < 0.1): self.velocity = 0.0 self.shootTimer += App.Elapsed if (App.Keys[pygame.K_UP] or App.Keys[pygame.K_w] or App.Keys[pygame.K_SPACE]): self.shoot() # Move the player self.angle += self.velocity * App.Elapsed # Set Position self.position = Vector.FromAngle(self.angle, self.distance) self.position.x += (App.Width / 2) - (self.image.get_width() / 2) self.position.y += (App.Height / 2) - (self.image.get_height() / 2)
class GameObject: def __init__(self, x, y, width, height, images, fps, looping): self.x = x self.y = y self.width = width self.height = height self.sprite = Sprite(images, fps, looping) def update(self, gameTime): self.sprite.update(gameTime) def draw(self, surface): surface.blit(self.getImage(), self.getRect()) def getRect(self): return Rect(self.x, self.y, self.width, self.height) def getImage(self): return self.sprite.getImage() def setSprite(self, sprite): self.sprite = sprite def getHitMask(self): return pygame.surfarray.array_alpha(self.sprite.getImage())
def update(self): Sprite.update(self) if (self.Index == 0): self.YPosition -= 6 else: self.YPosition += 4 self.image = Sprite.FBFrames[self.Frame + self.Index * 2]
def update(self): Sprite.update(self) self.distance += self.speed * App.Elapsed self.speed += 3 if self.distance > 600: self.kill() self.position = Vector.FromAngle(self.angle, self.distance) self.position.x += (App.Width / 2) - (self.image.get_width() / 2) self.position.y += (App.Height / 2) - (self.image.get_height() / 2)
def update(self): """ Updates the bee sprite Either dies, calls Sprite.hunt for plants or calls Sprite.update """ Sprite.button_ops(self) if self.health_monitor(): return if not Sprite.hunt(self, Global.plant_group): Sprite.update(self)
def update(self): """ Updates the deer sprite Either dies, hunts deer, or calls Sprite.update """ Sprite.button_ops(self) if self.health_monitor(): return if not Sprite.hunt(self, Global.deer_group): Sprite.update(self)
def update(self, bullets): """Updates the player""" if(self.Firing and self.LastFired > 40): self.LastFired = 0 self.Frame = 2 self.FrameTicks = 0 s = Fireball(self.spriteSheet, self.XPosition, self.YPosition, 0) bullets.add(s) Player.SEffect.play() Sprite.update(self) self.image = Sprite.PlayerFrames[self.Frame]
def update(self, bullets): Sprite.update(self) if(self.Left and self.XPosition <= 0): self.Left = False self.Right = True if(self.Right and self.XPosition >= 768): self.Right = False self.Left = True if(self.LastFired >= 50 and randint(0,25) == 5): b = Fireball(self.spriteSheet, self.XPosition, self.YPosition, 1) bullets.add(b) self.LastFired = 0 self.image = Sprite.MonsterFrames[2 * self.Index + self.Frame]
class RemoteSpaceJet(Transformable): _frameMap = {vec(-1, -1):0, vec(0, -1):1, vec(1, -1):2, \ vec(-1, 0):3, vec(0,0):4, vec(1,0):5, \ vec(-1, 1):6, vec(0, 1):7, vec(1, 1):8} def __init__(self, remoteController, yFaceDirection, **kwArgs): super().__init__(**kwArgs) rm = ResourceManager.activeManager # Set Systems self._controller = remoteController self._yFaceDirection = yFaceDirection # Set Characteristics self._alive = True self._armor = 3 self._health = 1000 self._velocity = vec(0,0) # Set Rendering and Physics Data self._sprite = Sprite(rm.request("SpaceJet.anim"), t=self.getTransform().createChild()) self._sprite.setFrame(1+3) self._explosionSprite = Sprite(rm.request("Explosion.anim"), t=self.getTransform().createChild()) self._explosionSprite.isDrawn = False self._explosionSound = rm.request("Explosion.mp3") self._bounds = CollisionRect(self._sprite.getWidth(), self._sprite.getHeight(), t=self.getTransform().createChild()) self._bounds.addEntity(self) #self._boundsDisplay = SceneObject(dataSrc = self._bounds, t=self._bounds.getTransform(), color=Color.Green, \ # batch=pyglet.graphics.Batch(), group=LinePolygonMode) # Set Flight Area self._flightAreaEdges = [-400+self._sprite.getWidth()/2, 400-self._sprite.getWidth()/2, \ yFaceDirection*(-300+self._sprite.getHeight()/2), -100*yFaceDirection] if yFaceDirection == -1: s = self._flightAreaEdges[2] self._flightAreaEdges[2] = self._flightAreaEdges[3] self._flightAreaEdges[3] = s self.rotate(math.pi) '''''''''''''''''''''''''''''''''''''''''''''''' # Update State Remotely def remoteUpdate(self, controlStruc): if(controlStruc): # Read Data From Control Structure health = controlStruc.get('health', self._health) position = controlStruc.get('position', self.getPosition()) velocity = controlStruc.get('velocity', self._velocity) frameNum = controlStruc.get('frame', self._sprite.getFrame()) # Set Alive and Position self._health = health self.setTranslation(position) # Set Velocity and Check for Movement self._velocity = velocity*self._yFaceDirection if(self._health > 0 and self._velocity != vec(0,0)): self._sprite.setFrame(frameNum) # Update State Locally -> No Message Received def update(self, dt): if self._alive: # Move according to last received velocity (aka 'Dead Reckoning') self.translate(self._velocity*dt) # Check Flight Area p = self.getPosition(); np = p.copy() fa = self._flightAreaEdges if p.x < fa[0]: np.x = fa[0] if p.x > fa[1]: np.x = fa[1] if p.y < fa[2]: np.y = fa[2] if p.y > fa[3]: np.y = fa[3] if p != np: self.setTranslation(np) # Update Sprite Data moving = False; direc = vec(0, 0) if(self._velocity != vec(0,0)): moving = True if(self._velocity.x != 0): direc.x = math.copysign(1, self._velocity.x) if(self._velocity.y != 0): direc.y = math.copysign(1, self._velocity.y) # Draw Sprite Accordingly self._sprite.setFrame(self._frameMap[vec(direc.x if self._yFaceDirection==1 else -direc.x, direc.y*self._yFaceDirection)]) if not moving and self._sprite.getFrame() != 4: self._sprite.setFrame(4) # Update Sprite and Bounds if self._sprite.update(dt): self._updateDimensions() self._bounds.update(dt) self._checkDeath(dt) def notifyCollisions(self, primitive, colliderSet): pass '''''''''''''''''''''''''''''''''''''''''''''''' def _checkDeath(self, dt): if self._health <= 0 and self._alive: self._explosionSprite.setAnimation("Iterating") self._explosionSprite.isDrawn = True self._explosionSound.play() self._alive = False self._explosionSprite.update(dt) if(self._explosionSprite.hasEnded()): self.removeFromWorld() def removeFromWorld(self): self._controller.removeEntity(self) self._bounds.removeEntity(self) self.getTransform().killSubtree() self.removeTransform() '''''''''''''''''''''''''''''''''''''''''''''''' def _updateDimensions(self): w, h = self._sprite.getDimensions() self._bounds.resize(w, h) def getCollisionPrimitive(self): return self._bounds def explosionEnded(self): return self._explosionSprite.hasEnded()
class SpaceJet(Transformable): _frameMap = {vec(-1, -1):0, vec(0, -1):1, vec(1, -1):2, \ vec(-1, 0):3, vec(0,0):4, vec(1,0):5, \ vec(-1, 1):6, vec(0, 1):7, vec(1, 1):8} def __init__(self, yFaceDirection, **kwArgs): super().__init__(**kwArgs) rm = ResourceManager.activeManager # Set Systems self._yFaceDirection = yFaceDirection # Set Characteristics self._alive = True self._armor = 3 self._health = 1000 self._speed = 550 self._velocity = vec(0,0) # Set Rendering and Physics Data self._sprite = Sprite(rm.request("SpaceJet.anim"), t=self.getTransform().createChild()) self._sprite.setFrame(1+3) self._explosionSprite = Sprite(rm.request("Explosion.anim"), t=self.getTransform().createChild()) self._explosionSprite.isDrawn = False self._explosionSound = rm.request("Explosion.mp3") self._bounds = CollisionRect(self._sprite.getWidth(), self._sprite.getHeight(), t=self.getTransform().createChild()) self._bounds.addEntity(self) #self._boundsDisplay = SceneObject(dataSrc = self._bounds, t=self._bounds.getTransform(), color=Color.Green, \ # batch=pyglet.graphics.Batch(), group=LinePolygonMode) # Set Flight Area self._flightAreaEdges = [-400+self._sprite.getWidth()/2, 400-self._sprite.getWidth()/2, \ yFaceDirection*(-300+self._sprite.getHeight()/2), -100*yFaceDirection] if yFaceDirection == -1: s = self._flightAreaEdges[2] self._flightAreaEdges[2] = self._flightAreaEdges[3] self._flightAreaEdges[3] = s # Create the default weapon from Weapon import LaserGun from Weapon import MissleLauncher self._velocity = vec(0,0) self._weapon = LaserGun(self, t=self.getTransform().createChild()) self._secondaryWep = MissleLauncher(self, t=self.getTransform().createChild()) '''''''''''''''''''''''''''''''''''''''''''''''' def update(self, dt): self.readKeyboardInput(dt) if self._sprite.update(dt): self._updateDimensions() self._bounds.update(dt) self._weapon.update(dt) self._secondaryWep.update(dt) return self._checkDeath(dt) def notifyCollisions(self, primitive, colliderSet): pass '''''''''''''''''''''''''''''''''''''''''''''''' def _checkDeath(self, dt): if self._health <= 0 and self._alive: self._explosionSprite.setAnimation("Iterating") self._explosionSprite.isDrawn = True self._explosionSound.play() self._alive = False self._explosionSprite.update(dt) if not self._alive and self._explosionSprite.hasEnded(): self.removeFromWorld() def removeFromWorld(self): from GameWorld import GameWorld GameWorld.activeWorld.removeEntity(self) self._bounds.removeEntity(self) self.getTransform().killSubtree() self.removeTransform() def readKeyboardInput(self, dt): if not self._alive: return actions = Keyboard.localKeyboard.getActions() moving = False for action in actions: if action.name == "Move": direc = action.params[0] direc = direc*self._yFaceDirection self._sprite.setFrame(self._frameMap[vec(direc.x if self._yFaceDirection==1 else -direc.x, direc.y*self._yFaceDirection)]) self.translate(direc*self._speed*dt) self._velocity = direc*self._speed # Check Flight Area p = self.getPosition(); np = p.copy() fa = self._flightAreaEdges if p.x < fa[0]: np.x = fa[0] if p.x > fa[1]: np.x = fa[1] if p.y < fa[2]: np.y = fa[2] if p.y > fa[3]: np.y = fa[3] if p != np: self.setTranslation(np) moving = True elif action.name == "FirePrimary": self._weapon.fire(vec(0, self._yFaceDirection)) elif action.name == "FireSecondary": self._secondaryWep.fire(vec(0, self._yFaceDirection)) if not moving and self._sprite.getFrame() != 4: self._sprite.setFrame(4) '''''''''''''''''''''''''''''''''''''''''''''''' def _updateDimensions(self): w, h = self._sprite.getDimensions() self._bounds.resize(w, h) def getCollisionPrimitive(self): return self._bounds def explosionEnded(self): return self._explosionSprite.hasEnded()
def update(self): Sprite.update(self) self.position.x = (App.Width / 2) - (self.image.get_width() / 2) self.position.y = (App.Height / 2) - (self.image.get_height() / 2)
class Bullet(Transformable): def __init__(self, controller, ship, startPos, vel, dAccel, accel, maxVel, damage, animation, **kwArgs): super().__init__(**kwArgs) # Controller self._controller = controller # Generic state self._ship = ship self._damage = damage self._alive = True # Set Movement state self.setTransform(r.activeRenderer.getSceneGraph().newTransform(t=startPos.getTranslation(), r=startPos.getRotation())) self._velocity = vel self._dAccel = dAccel self._accel = accel self._maxVelocity = maxVel # Create Sprite and Bounds self._sprite = Sprite(animation, t=self.getTransform()) self._bounds = CollisionRect(self._sprite.getWidth(), self._sprite.getHeight(), t=self.getTransform().createChild()) self._bounds.addEntity(self) #self._boundsDisplay = SceneObject(dataSrc = self._bounds, t=self._bounds.getTransform(), color=Color.Green, \ # batch=pyglet.graphics.Batch(), group=LinePolygonMode) '''''''''''''''''''''''''''''''''''''''''''''''''''''''' def update(self, dt): super().update(dt) self._sprite.update(dt) self._bounds.update(dt) # Update Position if self._alive: if abs(self._velocity) <= abs(self._maxVelocity): self._accel += self._dAccel*dt self._velocity += self._accel*dt self.translate(self._velocity*dt) # Check for Death gw = GameWorld.activeWorld p = self.getPosition() if not self._alive or \ p.x < gw.minX or p.x > gw.maxX or p.y < gw.minY or p.y > gw.maxY: self.removeFromWorld() def removeFromWorld(self): self._controller.removeEntity(self) self._bounds.removeEntity(self) self.getTransform().killSubtree() self.removeTransform() def notifyCollisions(self, prim, otherPrims): for prim in otherPrims: for ent in prim.getEntities(): if isinstance(ent, SpaceJet) and not ent is self._ship and self._alive: ent._health -= (self._damage - ent._armor) self._alive = False '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' def getCollisionPrimitive(self): return self._bounds
def update(self): Sprite.update(self) if self.took_hit: self.check_dead() self.image.fill(self.color)