Skip to content
Snippets Groups Projects
Verified Commit 98e4e958 authored by v-lafeychine's avatar v-lafeychine
Browse files

Early BattleScene with new Engine

parent 2ec03883
No related branches found
No related tags found
1 merge request!22Resolve "Refactor: GameEngine"
Pipeline #9947 failed with stage
in 2 minutes and 3 seconds
package Engine
import SFML.Graphics.RenderWindow
import SFML.Window.{VideoMode, Window}
......@@ -10,4 +8,4 @@ import SFML.Window.{VideoMode, Window}
window.setFramerateLimit(30)
window.setVerticalSyncEnabled(true)
GameEngine(Scene.PokemonGame(), window).launch()
Engine.GameEngine(PokemonGame(), window)
import Engine.Game
import Pokemon.{PokemonFactory, Trainer}
val trainer = Trainer("", List(PokemonFactory("Bulbasaur"), PokemonFactory("Squirtle")), 0)
val trainerEnemy = Trainer("", List(PokemonFactory("Charmander")), 0)
class PokemonGame() extends Game(Scene.Battle.BattleScene(trainer, trainerEnemy))
......@@ -9,19 +9,20 @@ import SFML.Window.{Event, Mouse}
class GameEngine(game: Game, private val window: RenderWindow):
private var currentScene: Scene = game.primaryScene
def changeScene(scene: Scene): Unit =
currentScene = scene
while window.isOpen() do
window.clear(Color(0, 0, 0, 0))
pollEvent()
private[Engine] def launch(): Unit =
while window.isOpen() do
window.clear(Color(0, 0, 0, 0))
currentScene.recursiveComponents[Renderer].sorted.foreach(_.draw(window))
currentScene.recursiveComponents[MonoBehaviour].foreach(_.load(this))
pollEvent()
window.display()
currentScene.recursiveComponents[Renderer].sorted.foreach(_.draw(window))
currentScene.recursiveComponents[MonoBehaviour].foreach(_.load(this))
window.display()
def changeScene(scene: Scene): Unit =
currentScene = scene
private def pollEvent(): Unit =
for event <- window.pollEvent() do
......
package Scene.Battle
import Component.*
import Scene.*
import Engine.Game
import Engine.Objects.{GameObject, Scene, Sprite}
import SFML.Graphics.{Font, IntRect, Texture}
import Pokemon.Trainer
object BattleScene extends Scene:
private def healthPercentage(life: Int, maxLife: Int): Int = (48 * (life.toFloat / maxLife.toFloat)).toInt
import SFML.Graphics.Texture
import SFML.System.tupleIntToVectorFloat
def load(game: Main.Game) =
val pokemonTrainer = game.trainer.primaryPokemon.get
val pokemonTrainerEnemy = game.trainerEnemy.primaryPokemon.get
class BattleScene(trainer: Trainer, trainerEnemy: Trainer) extends GameObject(scale = 4) with Scene:
val pokemonTrainer = trainer.primaryPokemon.get
val pokemonTrainerEnemy = trainerEnemy.primaryPokemon.get
val background = Sprite(Texture("src/main/resources/battle/background.png"))
background.scale = 4
addComponent[Sprite](Texture("src/main/resources/battle/background.png"), Layer.Background.layer)
addComponent[Sprite](Texture("src/main/resources/battle/tiles.png"), Layer.Background.offset(1))
val tiles = Sprite(Texture("src/main/resources/battle/tiles.png"))
tiles.scale = 4
val bar = Sprite(Texture("src/main/resources/battle/bar.png"))
bar.scale = 4
bar.pos = (544, 390)
val barEnemy = Sprite(Texture("src/main/resources/battle/bar_enemy.png"))
barEnemy.scale = 4
barEnemy.pos = (0, 90)
val healthBar = Sprite(Texture("src/main/resources/battle/health_bar_green.png"))
healthBar.scale = 4
healthBar.pos = (792, 466)
healthBar.rect = Some(healthPercentage(pokemonTrainer.life, pokemonTrainer.maxLife), 7)
val healthBarEnemy = Sprite(Texture("src/main/resources/battle/health_bar_green.png"))
healthBarEnemy.scale = 4
healthBarEnemy.pos = (200, 166)
healthBarEnemy.rect = Some(healthPercentage(pokemonTrainerEnemy.life, pokemonTrainerEnemy.maxLife), 7)
val textbox = Sprite(Texture("src/main/resources/textbox.png"))
textbox.scale = 4
textbox.pos = (0, 576)
val pokemon = Sprite(Texture(f"src/main/resources/pokemons/back/${pokemonTrainer.id}%03d.png"))
pokemon.scale = 4
pokemon.pos = (130, 320)
val pokemonEnemy = Sprite(Texture(f"src/main/resources/pokemons/front/${pokemonTrainerEnemy.id}%03d.png"))
pokemonEnemy.scale = 4
pokemonEnemy.pos = (645, 150)
val fightBox = FightBox(Texture("src/main/resources/battle/fight_box.png"))
fightBox.scale = 3
fightBox.pos = (690, 603)
val font = Font("src/main/resources/font.ttf")
val name = Text(font)
name.msg = pokemonTrainer.name
name.color = 0.toByte
name.pos = (624, 415)
val nameEnemy = Text(font)
nameEnemy.msg = pokemonTrainerEnemy.name
nameEnemy.color = 0.toByte
nameEnemy.pos = (35, 115)
val health = Text(font)
health.msg = s"${pokemonTrainer.life}"
health.color = 0.toByte
health.pos = (800, 495)
val maxHealth = Text(font)
maxHealth.msg = s"${pokemonTrainer.maxLife}"
maxHealth.color = 0.toByte
maxHealth.pos = (920, 495)
val fight = Text(font)
fight.msg = "Fight"
fight.color = 255.toByte
fight.pos = (745, 660)
this.addComponent(background)
this.addComponent(tiles)
this.addComponent(bar)
this.addComponent(healthBar)
this.addComponent(barEnemy)
this.addComponent(healthBarEnemy)
this.addComponent(textbox)
this.addComponent(pokemon)
this.addComponent(pokemonEnemy)
this.addComponent(fightBox)
this.addComponent(name)
this.addComponent(nameEnemy)
this.addComponent(health)
this.addComponent(maxHealth)
this.addComponent(fight)
addGameObject(GameObject().moveTo(32, 80)).addComponent[Sprite](Texture(f"src/main/resources/pokemons/back/${pokemonTrainer.id}%03d.png"), Layer.Pokemons.layer)
addGameObject(GameObject().moveTo(160, 38)).addComponent[Sprite](Texture(f"src/main/resources/pokemons/front/${pokemonTrainerEnemy.id}%03d.png"), Layer.Pokemons.layer)
package Scene.Battle
import Engine.Components.RendererLayer
enum Layer(depth: Int):
def layer = RendererLayer(depth)
def offset(offset: Int): RendererLayer =
RendererLayer(layer.depth + offset)
case Background extends Layer(0)
case Pokemons extends Layer(10)
case UI extends Layer(20)
case Overlay extends Layer(30)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment