def __init__(self): super( CombatScene, self ).__init__() # Render da text self.title = combatText.CombatText() self.add(self.title) # Initialize the ship self.bookCraft = ship.Ship() self.collisionManager = CollisionManagerBruteForce() # Initialize the enemies self.enemyList = [] self.enemyTimer = 0 self.enemycounter = 0 self.explosionList = [] self.roomBorder = roomBorder() self.collisionManager.add(self.bookCraft) self.roomBorder.addTilesToCollision(self.collisionManager) self.add(self.roomBorder) self.add(self.bookCraft ) self.mouserel = (0, 0) self.schedule_interval(self.mainCombatTimer, 0.05)
def __init__(self, game, interface, meta): super().__init__(242, 242, 242, 255) background_sprite = Sprite('fondo_final.svg', anchor=(0, 0)) background_sprite.position = (0, 0) background_sprite.scale = 0.1 self.add(background_sprite, z=0) self.game = game self.toaster = None self.meta = meta self.meta["current_world"] = 0 self.current_screen = 0 self.space_used = 1 self.interface = interface self.main_character = CollidableSprite('ppepotato.svg', anchor=(0, 0)) self.collision_manager = CollisionManagerBruteForce() self.collision_manager.add(self.main_character) self.add(self.main_character) self.sprites_by_id = {} self.explosions = [] self.do_draw() self.schedule_interval(self.check_collisions, 0.1) self.schedule_interval(self.check_finished, 0.1)
def __init__(self, HUD): super().__init__() self.ancho_ventana, self.alto_ventana = director.get_window_size() self.man_col = CollisionManagerBruteForce() self.HUD = HUD self.lanzar_personaje() self.enemigo() self.schedule(self.update) # Cargamos el fondo self.fondo = Sprite(load('Fondo3.png'), (400, 325)) self.add(self.fondo, z=0)
def __init__(self, fastmode=False, net=None): from Main import Main self.fastmode = fastmode self.net = net self.bat = Bat((0, Main.SCREEN_HEIGHT / 2)) self.collision_manager = CollisionManagerBruteForce() self.ball = Ball((1280 / 2, 720 / 2)) self.enemy = PerfectEnemy(self.ball, (Main.SCREEN_WIDTH - 0 - PerfectEnemy.WIDTH, Main.SCREEN_HEIGHT / 2)) self.gamestate = Gamestate.RUNNING wall_width = 10 self.wall_left = CollidableColorLayer((40 - wall_width, 0), wall_width, Main.SCREEN_HEIGHT, color=(255, 0, 0)) self.wall_right = CollidableColorLayer((Main.SCREEN_WIDTH - 50, 0), wall_width, Main.SCREEN_HEIGHT, color=(255, 0, 0)) self.wall_top = CollidableColorLayer( (0, Main.SCREEN_HEIGHT - wall_width), Main.SCREEN_WIDTH, wall_width, color=(255, 0, 0)) self.wall_bottom = CollidableColorLayer((0, 0), Main.SCREEN_WIDTH, wall_width, color=(255, 0, 0)) self.score = 0.0
class RunnerLayer(cocos.layer.ColorLayer, Layer): """State""" is_event_handler = True def __init__(self, game, interface, meta): super().__init__(242, 242, 242, 255) background_sprite = Sprite('fondo_final.svg', anchor=(0, 0)) background_sprite.position = (0, 0) background_sprite.scale = 0.1 self.add(background_sprite, z=0) self.game = game self.toaster = None self.meta = meta self.meta["current_world"] = 0 self.current_screen = 0 self.space_used = 1 self.interface = interface self.main_character = CollidableSprite('ppepotato.svg', anchor=(0, 0)) self.collision_manager = CollisionManagerBruteForce() self.collision_manager.add(self.main_character) self.add(self.main_character) self.sprites_by_id = {} self.explosions = [] self.do_draw() self.schedule_interval(self.check_collisions, 0.1) self.schedule_interval(self.check_finished, 0.1) def do_draw(self): """Draw a screen.""" self.main_character.x = 0 self.main_character.y = 0 self.main_character.do( MoveTo((self.interface.width, self.main_character.y), 10)) for character in self.characters: with suppress(Exception): self.remove(character.sprite) for explosion in self.explosions: with suppress(Exception): self.remove(explosion) self.explosions = [] self.collision_manager.clear() if self.toaster: self.remove(self.toaster) self.toaster = CollidableSprite("toaster00.svg") self.toaster.scale = 0.1 self.toaster.position = (2 * random.randint(0, self.width) / 3 + self.width / 3), (random.randint( 0, round(2 * self.height / 3))) self.add(self.toaster) self.collision_manager.add(self.toaster) self.current_screen += 1 for character in self.characters: self.sprites_by_id[id(character.sprite)] = character self.collision_manager.add(character.sprite) self.add(character.sprite) self.draw() def check_finished(self, *args, **kwargs): """Check if has finished.""" if self.main_character.x > self.interface.width: self.do_draw() def check_collisions(self, *args, **kwargs): """Check for collisions.""" for elem in self.collision_manager.iter_colliding(self.main_character): if elem == self.toaster: position = self.toaster.position self.remove(self.toaster) self.toaster = CollidableSprite("toaster01.svg") self.toaster.scale = 0.1 self.toaster.position = position self.add(self.toaster) director.replace( FadeTRTransition(self.meta['scenes']['toaster'])) continue if not id(elem) in self.sprites_by_id: continue self.sprites_by_id[id(elem)].touched = True explosion = Sprite('explosion.svg') explosion.scale = 0.5 explosion.position = elem.position self.explosions.append(explosion) with suppress(Exception): self.remove(elem) self.add(explosion) def on_key_press(self, key, _): """Jumps.""" if key == pyglet.window.key.SPACE: self.main_character.do( JumpTo((self.main_character.x + 50, 10), 100, 1, 0.8)) @property def world(self): """Get current world.""" return self.game.state[self.meta["current_world"]] @property def characters(self): """Get current drawable characters""" return self.interface.screens[self.current_screen].characters
class CombatScene( cocos.scene.Scene ): collisionManager = None title = None def __init__(self): super( CombatScene, self ).__init__() # Render da text self.title = combatText.CombatText() self.add(self.title) # Initialize the ship self.bookCraft = ship.Ship() self.collisionManager = CollisionManagerBruteForce() # Initialize the enemies self.enemyList = [] self.enemyTimer = 0 self.enemycounter = 0 self.explosionList = [] self.roomBorder = roomBorder() self.collisionManager.add(self.bookCraft) self.roomBorder.addTilesToCollision(self.collisionManager) self.add(self.roomBorder) self.add(self.bookCraft ) self.mouserel = (0, 0) self.schedule_interval(self.mainCombatTimer, 0.05) #self.mainCombatTimer(10) def on_mouse_motion(self, x, y, dx, dy): self.mouserel = (dx, dy) self.bookCraft.rotate((x, y)) def on_mouse_press(self, *args): self.bookCraft.shoot(self) def on_key_press(self, key, modifiers): # Determine what direction the ship is moving if key==pyglet.window.key.W: self.bookCraft.craftMovingUp = True if key==pyglet.window.key.S: self.bookCraft.craftMovingDown = True if key==pyglet.window.key.A: self.bookCraft.craftMovingLeft = True if key==pyglet.window.key.D: self.bookCraft.craftMovingRight = True def on_key_release(self, key, modifiers): if key == pyglet.window.key.W: self.bookCraft.craftMovingUp = False if key == pyglet.window.key.S: self.bookCraft.craftMovingDown = False if key == pyglet.window.key.A: self.bookCraft.craftMovingLeft = False if key == pyglet.window.key.D: self.bookCraft.craftMovingRight = False def on_enter(self): super(CombatScene,self).on_enter() if(not get_busy()): load(os.path.normpath(r'../assets/RoRFight2.mp3')) set_volume(1) play(loops=-1) cocos.director.director.window.push_handlers(self) def on_exit(self): super(CombatScene,self).on_exit() cocos.director.director.window.remove_handlers(self) stop() # The update loop for the combat scene def mainCombatTimer(self, test): self.bookCraft.updateCraftVelocity() self.bookCraft.updateBulletPosition() self.updateEnemies() self.bookCraft.updateCollisionPos() self.roomBorder.updateCollisionPos() self.updateExplosions() if(len(self.collisionManager.objs_colliding(self.bookCraft))>0): self.bookCraft.reverseDirection() def updateEnemies(self): self.enemyTimer += 1 if self.enemyTimer % 100 == 0: for x in xrange(random.randint(2, 15)): newEnemy = enemyships.Enemy((0, random.randint(0, 768)), random.randint(200, 340), random.randint(50, 1000)) self.collisionManager.add(newEnemy) self.add(newEnemy) self.enemyList.append(newEnemy) if not self.enemyList: return for ship in self.enemyList: for item in map(str, self.collisionManager.objs_colliding(ship)): if 'Pellet'.upper() in item.upper(): ship.health -= 50 for bullet in self.bookCraft.bulletList: if bullet in self.collisionManager.objs_colliding(ship): self.collisionManager.remove_tricky(bullet) self.remove(bullet) self.bookCraft.bulletList.remove(bullet) if 'ship.Ship' in item: self.bookCraft.heath -= 15 huh = Sound(os.path.normpath(r'../assets/VEC3 FX Impact 35.wav')) huh.play() splosion = explosion.Explosion(ship.get_rect().center) self.add(splosion) self.explosionList.append(splosion) self.collisionManager.remove_tricky(ship) self.remove(ship) self.enemyList.remove(ship) self.title.updateHP(self.bookCraft.heath) if self.bookCraft.heath <= 0: cocos.director.director.replace(FlipX3DTransition(gameOver(),duration=1)) # check if this should be dead if ship.health <= 0: self.enemycounter += 1 self.title.incrementKills(self.enemycounter) huh = Sound(os.path.normpath(r'../assets/VEC3 FX Impact 35.wav')) huh.play() splosion = explosion.Explosion(ship.get_rect().center) self.add(splosion) self.explosionList.append(splosion) self.collisionManager.remove_tricky(ship) self.remove(ship) self.enemyList.remove(ship) ship.fly() if ship.time_alive >= 500: self.collisionManager.remove_tricky(ship) self.remove(ship) self.enemyList.remove(ship) else: ship.updateCollisionPos() ship.time_alive += 1 def updateExplosions(self): if not self.explosionList: return for splosion in self.explosionList: if splosion.time_alive > 5: self.remove(splosion) self.explosionList.remove(splosion) continue splosion.time_alive += 1
def __init__(self, client=None): self.screen = director.get_window_size() super(Task, self).__init__(0, 0, 0, 255, 1024, int(768*1.1)) self.client = client self.state = self.STATE_INIT self.mole_images = [resource.image('mole_1.png'), resource.image('mole_laugh1.png'), resource.image('mole_laugh2.png'), resource.image('mole_laugh3.png'), resource.image('mole_thump1.png'), resource.image('mole_thump2.png'), resource.image('mole_thump3.png'), resource.image('mole_thump4.png')] self.music = Player() self.music.queue(pyglet.resource.media('whack.mp3')) self.music.eos_action = 'loop' self.cm = CollisionManagerBruteForce() self.moles = [] for i in range(0,3): mole = Mole(self.mole_images, (112 + (i * 310)), (127-80)) self.moles.append(mole) self.add(mole, 55) self.cm.add(mole) for i in range(3,6): mole = Mole(self.mole_images, (112 + ((i-3) * 310)), (383-80)) self.moles.append(mole) self.add(mole, 35) self.cm.add(mole) for i in range(6,9): mole = Mole(self.mole_images, (112 + ((i-6) * 310)), (639-80)) self.moles.append(mole) self.add(mole, 15) self.cm.add(mole) self.text_batch = BatchNode() self.add(self.text_batch, z=100) self.score = 0 scorey = int((768 + int(768*1.1))/2) self.score_num = text.Label("%06d" % self.score, font_name="Score Board", font_size=48, x=512, y=scorey, color=(255, 255, 255, 255), anchor_x='center', anchor_y='center', batch=self.text_batch.batch) self.fix = Label('G', font_name='Cut Outs for 3D FX', font_size=48, position=(0,0), color=(255, 0, 0, 192), anchor_x='center', anchor_y='center') self.fix.visible = False self.add(self.fix, z=100000) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,0))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,128))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,256))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,384))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,512))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,640))) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,0)), z=60) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,128)), z=50) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,256)), z=40) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,384)), z=30) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,512)), z=20) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,640)), z=10)
class Task(ColorLayer, pyglet.event.EventDispatcher): d = Dispatcher() states = ["INIT", "CALIBRATE", "IGNORE_INPUT", "TASK", "DONE"] STATE_INIT = 0 STATE_CALIBRATE = 1 STATE_IGNORE_INPUT = 2 STATE_TASK = 3 STATE_DONE = 4 BG_TILE_SIZE = (1024,128) FG_TILE_SIZE = (1024,128) is_event_handler = True def __init__(self, client=None): self.screen = director.get_window_size() super(Task, self).__init__(0, 0, 0, 255, 1024, int(768*1.1)) self.client = client self.state = self.STATE_INIT self.mole_images = [resource.image('mole_1.png'), resource.image('mole_laugh1.png'), resource.image('mole_laugh2.png'), resource.image('mole_laugh3.png'), resource.image('mole_thump1.png'), resource.image('mole_thump2.png'), resource.image('mole_thump3.png'), resource.image('mole_thump4.png')] self.music = Player() self.music.queue(pyglet.resource.media('whack.mp3')) self.music.eos_action = 'loop' self.cm = CollisionManagerBruteForce() self.moles = [] for i in range(0,3): mole = Mole(self.mole_images, (112 + (i * 310)), (127-80)) self.moles.append(mole) self.add(mole, 55) self.cm.add(mole) for i in range(3,6): mole = Mole(self.mole_images, (112 + ((i-3) * 310)), (383-80)) self.moles.append(mole) self.add(mole, 35) self.cm.add(mole) for i in range(6,9): mole = Mole(self.mole_images, (112 + ((i-6) * 310)), (639-80)) self.moles.append(mole) self.add(mole, 15) self.cm.add(mole) self.text_batch = BatchNode() self.add(self.text_batch, z=100) self.score = 0 scorey = int((768 + int(768*1.1))/2) self.score_num = text.Label("%06d" % self.score, font_name="Score Board", font_size=48, x=512, y=scorey, color=(255, 255, 255, 255), anchor_x='center', anchor_y='center', batch=self.text_batch.batch) self.fix = Label('G', font_name='Cut Outs for 3D FX', font_size=48, position=(0,0), color=(255, 0, 0, 192), anchor_x='center', anchor_y='center') self.fix.visible = False self.add(self.fix, z=100000) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,0))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,128))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,256))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,384))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,512))) self.add(Sprite(resource.image('bg_dirt128.png'), anchor=(0,0), position=(0,640))) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,0)), z=60) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,128)), z=50) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,256)), z=40) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,384)), z=30) self.add(Sprite(resource.image('grass_lower128.png'), anchor=(0,0), position=(0,512)), z=20) self.add(Sprite(resource.image('grass_upper128.png'), anchor=(0,0), position=(0,640)), z=10) def set_score(self): self.score_num.begin_update() self.score_num.text = "%06d" % self.score self.score_num.end_update() def visit(self): super(Task, self).visit() if director.settings["overlay"]: for mole in self.moles: if mole.opacity > -1: if mole.state == 1: color = (.3,0.0,0.0,.7) else: color = (.3,0.2,0.5,.7) p = Polygon([(mole.center[0]-mole.rx, mole.center[1]-mole.ry), (mole.center[0]+mole.rx, mole.center[1]-mole.ry), (mole.center[0]+mole.rx, mole.center[1]+mole.ry), (mole.center[0]-mole.rx, mole.center[1]+mole.ry)], color=color) p.render() def mole_up(self): moles = [mole for mole in self.moles if not mole.active] if moles: random.choice(moles).up() def animate(self, dt): self.mole_up() if random.randint(0, 3) == 0: self.mole_up() def game_over(self): self.state = self.STATE_GAME_OVER def clear(self): self.music.pause() self.music.seek(0) for mole in self.moles: mole.active = False mole.state = 0 mole.position = mole.position_in pyglet.clock.unschedule(self.animate) if self.client: self.client.removeDispatcher(self.d) self.client.stopDataStreaming() self.client.stopFixationProcessing() def reset(self): self.clear() if self.client: self.client.addDispatcher(self.d) #self.client.setDataFormat('%TS %ET %SX %SY %DX %DY %EX %EY %EZ') #self.client.startDataStreaming() self.client.startFixationProcessing() self.state = self.STATE_TASK self.score = 0 pyglet.clock.schedule_interval(self.animate, .5) self.music.play() def on_enter(self): if isinstance(director.scene, TransitionScene): return super(Task, self).on_enter() if director.settings['eyetracker']: self.state = self.STATE_CALIBRATE self.dispatch_event("start_calibration", self.calibration_ok, self.calibration_bad) else: self.reset() def calibration_ok(self): self.dispatch_event("stop_calibration") self.reset() def calibration_bad(self): self.dispatch_event("stop_calibration") director.scene.dispatch_event("show_intro_scene") def on_exit(self): if isinstance(director.scene, TransitionScene): return super(Task, self).on_exit() self.clear() @d.listen('ET_FIX') def iViewXEvent(self, inResponse): if inResponse[0] == 'l': x = int(float(inResponse[2])) y = int(float(inResponse[3])) if director.settings["overlay"]: self.fix.position = (x, y) self.fix.visible = True self.handle_mouse_press(x, y) @d.listen('ET_EFX') def iViewXEvent(self, inResponse): if inResponse[0] == 'l': if director.settings["overlay"]: self.fix.visible = False @d.listen('ET_SPL') def iViewXEvent(self, inResponse): pass def handle_mouse_press(self, x, y): for obj in self.cm.objs_touching_point(x, y): if obj.active: if obj.state == 0: obj.state = 1 obj.thump() self.score += 10 elif obj.state == 2: self.score -= 10 self.set_score() def on_mouse_press(self, x, y, buttons, modifiers): posx, posy = director.get_virtual_coordinates(x, y) self.handle_mouse_press(posx, posy) def on_mouse_motion(self, x, y, dx, dy): pass def on_key_press(self, symbol, modifiers): if self.state < self.STATE_IGNORE_INPUT: return if symbol == key.W and (modifiers & key.MOD_ACCEL): director.scene.dispatch_event("show_intro_scene") True if self.state == self.STATE_TASK: pass elif self.state == self.STATE_DONE: pass
class MiCapa(Layer): is_event_handler = True def on_key_press(self, k, _): Personaje.pulsar_tecla[k] = 1 def on_key_release(self, k, _): Personaje.pulsar_tecla[k] = 0 def __init__(self, HUD): super().__init__() self.ancho_ventana, self.alto_ventana = director.get_window_size() self.man_col = CollisionManagerBruteForce() self.HUD = HUD self.lanzar_personaje() self.enemigo() self.schedule(self.update) # Cargamos el fondo self.fondo = Sprite(load('Fondo3.png'), (400, 325)) self.add(self.fondo, z=0) #Posicionamos al personaje en la pantalla def lanzar_personaje(self): self.personaje = Personaje('Personaje.png', self.ancho_ventana * 0.5, 50) self.add(self.personaje, z=1) #Posicionamos los enemigos en pantalla def enemigo(self): for i in range(2): self.enemigo = Enemigo("Enemigo.png", self.ancho_ventana * 0.5, 560 - i * 40) self.add(self.enemigo, z=1) #Llamamos a todos los métodos update() def update(self, dt): self.man_col.clear() for _, node in self.children: if isinstance(node, Actor): node.update(dt) for _, node in self.children: if isinstance(node, Actor): self.man_col.add(node) self.collide(self.personaje) #Definimos el método de colisiones def collide(self, node): if node is not None: for other in self.man_col.iter_colliding(node): if self.children.count((1, other)) != 0: other.kill() if isinstance(other, Enemigo): self.HUD.puntos += 10 self.HUD.update() if self.children.count((1, node)) != 0: node.kill() seq = ImageGrid(load('Explosion.png'), 1, 1) anim = Animation.from_image_sequence(seq, 0.05, False) self.sprite = Sprite(anim, (other.x, other.y)) self.add(self.sprite) self.do(Delay(0.8) + CallFunc(self.sprite.kill))