def onUpdate(self): # print(self.gameObject.transform.position / tileSizeNum) self.gameObject.state.onUpdate() if self.gameObject.transform.position.y < 0: World.destroy(self.gameObject)
def bigHit(self): super().bigHit() if self.itemClass is None: World.destroy(self) velX = 50 World.instantiate(BrickPieces, self.transform.position - (4, 4), Resources.theme[self.theme]["brickPieces"][0], (-velX, 250)) World.instantiate(BrickPieces, self.transform.position + (8, 0) - (4, 4), Resources.theme[self.theme]["brickPieces"][1], (velX, 250)) World.instantiate(BrickPieces, self.transform.position + (0, 8) - (4, 4), Resources.theme[self.theme]["brickPieces"][2], (-velX, 300)) World.instantiate(BrickPieces, self.transform.position + (8, 8) - (4, 4), Resources.theme[self.theme]["brickPieces"][3], (velX, 300)) Resources.breakblock.play().volume = 0.05 else: self.trigger() if not self.triggered: self.getScript(HitUpperEnemies).hit() self.getCoinAbove()
def onUpdate(self): for event in pygame.event.get(): if event.type == pygame.QUIT: from gameengine.core.World import World World.shutdown() elif event.type == pygame.MOUSEMOTION or event.type == pygame.MOUSEBUTTONUP or event.type == pygame.MOUSEBUTTONDOWN or \ event.type == pygame.KEYDOWN or event.type == pygame.KEYUP: self.dispatchEvent(event)
def onCollisionEnter(self, other, side): if self.gameObject.aggressive: if ("KoopaTroopa" in other.tags and "Bowling" in other.tags) or \ ("Fireball" in other.tags) or \ ("Player" in other.tags and "Invincible" in other.tags): from gameengine.core.World import World World.destroy(self.gameObject) Resources.kick.play().volume = 0.05
def resetLevel(): from game.levels.Level1_1 import Level1_1 from game.levels.LevelSplash import LevelSplash World.findByTag("Time")[0].restart() currentLevelClass = type(SceneManager().currentScene) SceneManager().loadScene(LevelSplash, currentLevelClass, currentLevelClass.major, currentLevelClass.minor)
def init(self, *args): self.triggers = [] def invertVelocity(): if not isinstance(self.gameObject.getScript(KoopaTroopaScript).state, KoopaTroopaScript.Bowling): self.gameObject.getComponent(Physics).velocity *= -1 self.triggers.append(World.instantiate(self.Trigger, self.gameObject.transform.position, follow=self.gameObject, offset=(0, -10), exitCallback=invertVelocity)) self.triggers.append(World.instantiate(self.Trigger, self.gameObject.transform.position, follow=self.gameObject, offset=(10, -10), exitCallback=invertVelocity))
def trigger(self): if not self.triggered: self.tags.remove("Invisible") self.getComponent(SpriteRenderer).setImage( Resources.theme[self.theme]["questionBlockHit"]) self.triggered = True World.instantiate(self.itemClass, self.transform.position) self.getScript(HitUpperEnemies).hit()
def loadScene(self, Class: Type[Scene], *args, **kwargs): for gameObject in World.gameObjects: if not gameObject.keepBetweenScenes: World.destroy(gameObject) scene = Class() scene.mainCamera = World.instantiate(Camera, (0, 0)) scene.mainCamera.tags.append("MainCamera") scene.onLoad(*args, **kwargs) self.currentScene = scene
def getCoinAbove(self): from gameengine.managers.CollisionManager import CollisionManager above: set = CollisionManager().quadtree.intersect( bbox=Rect(self.transform.position + (0, 20), 1, 1).bbox()) if above: go = above.pop().gameObject if "Coin" in go.tags: from game.blocks.QuestionBlock import RotatingCoin World.instantiate(RotatingCoin, (go.transform.position)) World.destroy(go)
def playerSmash(self): self.getComponent(SpriteRenderer).setImage( Resources.theme[self.theme]["goombaSmashed"]) self.removeComponent(self.getComponent(Collider)) self.removeComponent(self.getComponent(Physics)) World.destroy(self, 1000) Resources.stomp.play().volume = 0.05 World.findByTag("Score")[0].add(100)
def loadNextLevel(): DrawingManager().remove(gameOverLabel) DrawingManager().GUI.remove(gameOverLabel) DrawingManager().remove(scoreLabel) DrawingManager().GUI.remove(scoreLabel) World.findByTag("Score")[0].reset() World.findByTag("Coins")[0].reset() from game.levels.Level1_1 import Level1_1 SceneManager().loadScene(Level1_1)
def trigger(self): if not self.triggered: World.instantiate(self.itemClass, self.transform.position) if self.tenCoinBlock: self.hits += 1 if self.hits >= 10: self.triggered = True self.getComponent(SpriteRenderer).setImage( Resources.theme[self.theme]["questionBlockHit"]) else: self.triggered = True self.getComponent(SpriteRenderer).setImage( Resources.theme[self.theme]["questionBlockHit"])
def onLateUpdate(self): if not self.enabled: return players = World.findByTag("Player") if not players: return player = players[0] cameraPos = self.gameObject.transform.position playerPos = player.transform.position # Forward only nextPos = playerPos.x - World.window.width / 10 if nextPos > cameraPos.x: cameraPos.x = nextPos # Left limit if cameraPos.x < -8: cameraPos.x = -8 elif cameraPos.x > tileSizeNum * self.rightLimit - 8: cameraPos.x = tileSizeNum * self.rightLimit - 8 # Block player going out of the camera on the left if playerPos.x < cameraPos.x: playerPos.x = cameraPos.x player.getComponent(Physics).velocity.x = 0
def enter(player): mainCamera = World.findByTag("MainCamera")[0] mainCamera.backgroundColor = (0, 0, 0, 0) mainCamera.transform.position = (-8, tileSizeNum * 16) mainCamera.getScript(FollowPlayer).enabled = False player.transform.position = (tileSizeNum * 2, tileSizeNum * 28)
def exit(player): mainCamera = World.findByTag("MainCamera")[0] mainCamera.backgroundColor = (107, 140, 255, 0) mainCamera.transform.position.y = 0 mainCamera.getScript(FollowPlayer).enabled = True player.transform.position = (tileSizeNum * 163.5, tileSizeNum * 4)
def flip(self, flipSide): super().flip(flipSide) self.removeComponent(self.getComponent(Collider)) if flipSide == Sides.LEFT_SIDE: self.getComponent(Physics).velocity.set(-70, 250) else: self.getComponent(Physics).velocity.set(70, 250) spriteRenderer = self.getComponent(SpriteRenderer) spriteRenderer.setImage(Resources.theme[self.theme]["goombaFlipped"]) spriteRenderer.sprite.scale_y = -1 World.findByTag("Score")[0].add(100) World.destroy(self, 1000)
def __init__(self, script): self.script = script self.koopaTroopa = script.gameObject self.koopaTroopa.getComponent(Physics).velocity.x = 0 self.koopaTroopa.getComponent(SpriteRenderer).setImage(Resources.theme[self.koopaTroopa.theme][self.koopaTroopa.color]["koopaTroopaStomped"]) self.koopaTroopa.getComponent(Collider).offset = (0, 0) Resources.stomp.play().volume = 0.05 def recover(): self.script.state = KoopaTroopaScript.Recovering(self.script) self.recoverTimer = Timer.add(recover, (), 2500, 0, 1) World.findByTag("Score")[0].add(20)
def init(self, *args): self.gameObject.getComponent(Physics).velocity.y = -120 Resources.bgMusic.pause() Resources.flagpole.play().volume = 0.05 World.findByTag("Time")[0].stop() World.findByTag("Score")[0].add(5000) def goToNextLevel(): if self.gameObject.prepareNextLevel: self.gameObject.prepareNextLevel() if self.gameObject.nextScene: SceneManager().loadScene(self.gameObject.nextScene, *self.gameObject.nextSceneArgs, *self.gameObject.nextSceneKwargs) Timer.add(goToNextLevel, (), 2000, 0, 1)
def loadScene(self, Class: type): # Destroy all previous gameObjects for gameObject in World().gameObjects: destroy(gameObject) from gameengine.util.Timer import timers timers.clear() self.activeScene = Class() self.activeScene.onLoad()
def __init__(self, script): self.script = script self.player = script.gameObject Player.lives -= 1 collider = self.player.getComponent(Collider) print("die", collider.gameObject) self.player.removeComponent(collider) self.player.getComponent(SpriteRenderer).setImage( self.player.spriteSet["die"]) Resources.bgMusic.pause() Resources.mariodie.play().volume = 0.2 World.findByTag("Time")[0].stop() self.player.getComponent(Physics).customGravity = (0, 0) self.player.getComponent(Physics).velocity.set(0, 0) def f(): self.player.getComponent(Physics).customGravity = None self.player.getComponent(Physics).velocity.set(0, 450) Timer.add(f, (), 500, 0, 1) def goToGameOver(): from game.levels.GameOverSplash import GameOverSplash SceneManager().loadScene(GameOverSplash) def resetLevel(): from game.levels.Level1_1 import Level1_1 from game.levels.LevelSplash import LevelSplash World.findByTag("Time")[0].restart() currentLevelClass = type(SceneManager().currentScene) SceneManager().loadScene(LevelSplash, currentLevelClass, currentLevelClass.major, currentLevelClass.minor) if self.player.lives <= 0: Timer.add(goToGameOver, (), 4000, 0, 1) else: Timer.add(resetLevel, (), 4000, 0, 1)
def __init__(self, script, player): self.script = script self.koopaTroopa = script.gameObject self.koopaTroopa.tags.append("Bowling") self.koopaTroopa.getComponent(SpriteRenderer).setImage(Resources.theme[self.koopaTroopa.theme][self.koopaTroopa.color]["koopaTroopaStomped"]) playerMiddle = player.getComponent(Collider).rect.centerX koopaTroopaMiddle = self.koopaTroopa.getComponent(Collider).rect.centerX physics = self.koopaTroopa.getComponent(Physics) force = 250 physics.velocity.x = force if playerMiddle < koopaTroopaMiddle else -force self.koopaTroopa.getScript(InverseXVelocity).ignoreEntities = True Resources.kick.play().volume = 0.05 World.findByTag("Score")[0].add(100)
def walk(): self.koopaTroopa.transform.position += (0, 4) self.script.state = KoopaTroopaScript.Walk(self.script) players = World.findByTag("Player") if not players: return player = players[0] self.koopaTroopa.getComponent(Physics).velocity.x = \ -30 if player.transform.position.x < self.koopaTroopa.transform.position.x else 30
def init(self, *args): player: Player = World.findByTag("Player")[0] state = str(player.state) if state == "Small": World.instantiate(SuperMushroom, self.transform.position) elif state == "Big": World.instantiate(FireFlower, self.transform.position) elif state == "Fire": World.instantiate(RotatingCoin, self.transform.position)
def flip(self, flipSide): super().flip(flipSide) self.removeComponent(self.getComponent(Collider)) alwaysOnPlatform = self.getScript(AlwaysOnPlatform) if alwaysOnPlatform is not None: self.removeScript(alwaysOnPlatform) if flipSide == Sides.LEFT_SIDE: self.getComponent(Physics).velocity.set(-50, 250) else: self.getComponent(Physics).velocity.set(50, 250) spriteRenderer = self.getComponent(SpriteRenderer) # spriteRenderer.setImage(Resources.goombaFlipped) spriteRenderer.sprite.scale_y = -1 World.findByTag("Score")[0].add(200) World.destroy(self, 1000)
def f(): World.instantiate(Goomba, (tileSizeNum * 97, onGroundY), theme="ug") World.instantiate(Goomba, (tileSizeNum * 98.5, onGroundY), theme="ug") World.instantiate(Goomba, (tileSizeNum * 100, onGroundY), theme="ug")
def onLoad(self, *args, **kwargs): self.mainCamera.backgroundColor = (0, 0, 0, 0) self.mainCamera.zoom = 3 # players = World.findByTag("Player") # if players: # from gameengine.components.Physics import Physics # players[0].getComponent(Physics).customGravity = (0, 0) from game.Player import Player Player.lives = 3 gameOverLabel = World.instantiate(Label, (500, 400)) gameOverLabel.text = "Game Over" gameOverLabel.font_name = "Emulogic" gameOverLabel.font_size = 22 gameOverLabel.set_style("align", "center") DrawingManager().GUI.add(gameOverLabel) scoreLabel = World.instantiate(Label, (400, 330)) scoreLabel.text = "final score: {}".format(World.findByTag("Score")[0].score) scoreLabel.font_name = "Emulogic" scoreLabel.font_size = 22 scoreLabel.set_style("align", "center") DrawingManager().GUI.add(scoreLabel) def loadNextLevel(): DrawingManager().remove(gameOverLabel) DrawingManager().GUI.remove(gameOverLabel) DrawingManager().remove(scoreLabel) DrawingManager().GUI.remove(scoreLabel) World.findByTag("Score")[0].reset() World.findByTag("Coins")[0].reset() from game.levels.Level1_1 import Level1_1 SceneManager().loadScene(Level1_1) Timer.add(loadNextLevel, (), 4000, 0, 1)
def f(): World.instantiate(Goomba, (tileSizeNum * 73, tileSizeNum * 10), theme="ug") World.instantiate(Goomba, (tileSizeNum * 78.5, tileSizeNum * 6), theme="ug") World.instantiate(Goomba, (tileSizeNum * 80, tileSizeNum * 6), theme="ug")
def f(): World.instantiate(KoopaTroopa, (tileSizeNum * 45, onGroundY + 10), theme="ug") World.instantiate(KoopaTroopa, (tileSizeNum * 46.5, onGroundY + 10), theme="ug") World.instantiate(KoopaTroopa, (tileSizeNum * 57, onGroundY + 10), theme="ug")
def decrement(self): self.time -= 1 self.text = "TIME\n{:03d}".format(self.time) if self.time == 100: Resources.bgMusic.pause() p = Resources.hurryUp.play() p.volume = 0.15 def f(): setBgMusic(self.fastMusic).play() Resources.bgMusic.pitch = 1.05 p.set_handler("on_player_eos", f) if self.time <= 0: Timer.remove(self.countdown) players = World.findByTag("Player") for player in players: # TODO: Just die player.state.downgrade()
def init(self, theme="ow", hasPiranhaPlant="False", *args, **kwargs): PipeHead.init(self, *args, **kwargs) self.tags.extend(["Solid", "PipeHead"]) self.theme = theme self.hasPiranhaPlant = hasPiranhaPlant spriteRenderer = self.addComponent(SpriteRenderer) spriteRenderer.setImage(Resources.theme[self.theme]["vPipeHead"]) spriteRenderer.order = 1 spriteRenderer.offset = (8, 0) collider = self.addComponent(Collider) collider.size = spriteRenderer.size collider.size.x = 30 collider.offset = Vector2(1, 0) self.piranhaPlant = None if self.hasPiranhaPlant == "True": self.piranhaPlant = World.instantiate(PiranhaPlant, self.transform.position - (0, 4), theme=self.theme) self.addScript(self.VPipeHeadScript) if "enter" in kwargs: self.tags.append("Enter")