Пример #1
0
    def onUpdate(self):
        # print(self.gameObject.transform.position / tileSizeNum)

        self.gameObject.state.onUpdate()

        if self.gameObject.transform.position.y < 0:
            World.destroy(self.gameObject)
Пример #2
0
    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()
Пример #3
0
    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)
Пример #4
0
        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
Пример #5
0
            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)
Пример #6
0
	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))
Пример #7
0
    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()
Пример #8
0
    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
Пример #9
0
 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)
Пример #10
0
    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)
Пример #11
0
		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)
Пример #12
0
    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"])
Пример #13
0
	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
Пример #14
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)
Пример #15
0
		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)
Пример #16
0
    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)
Пример #17
0
		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)
Пример #18
0
        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)
Пример #19
0
    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()
Пример #20
0
        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)
Пример #21
0
		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)
Пример #22
0
			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
Пример #23
0
    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)
Пример #24
0
	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)
Пример #25
0
 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")
Пример #26
0
	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)
Пример #27
0
        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")
Пример #28
0
 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")
Пример #29
0
    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()
Пример #30
0
	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")