Merge remote-tracking branch 'origin/main' into main

imgbot
MehdiAyadi 2 years ago
commit 40d38ee057

Binary file not shown.

@ -16,6 +16,7 @@ class Player(private val textureRegion: TextureRegion, private val gameState: Ga
private var direction = Vector2.Zero private var direction = Vector2.Zero
private val movementSpeed = 200f private val movementSpeed = 200f
private val interactionRange = 60f private val interactionRange = 60f
private var lastStep = 0L
init { init {
val size = Math.max(textureRegion.regionWidth, textureRegion.regionHeight).toFloat() val size = Math.max(textureRegion.regionWidth, textureRegion.regionHeight).toFloat()
@ -36,8 +37,15 @@ class Player(private val textureRegion: TextureRegion, private val gameState: Ga
} }
fun move(v: Vector2, delta: Float) { fun move(v: Vector2, delta: Float) {
updatePosition(v, delta) if (v.x != 0f || v.y != 0f) {
updateCollider() updatePosition(v, delta)
updateCollider()
if (System.currentTimeMillis() - lastStep > 500) {
gameState.soundEngine.play(GameSoundEffect.STEPS_INDOOR, 0.5f)
lastStep = System.currentTimeMillis()
}
}
} }
private fun updatePosition(v: Vector2, delta: Float) { private fun updatePosition(v: Vector2, delta: Float) {

@ -4,8 +4,16 @@ import com.last.commit.audio.GameSound
public class GameSoundEffect(name: String): GameSound(name) { public class GameSoundEffect(name: String): GameSound(name) {
companion object { companion object {
val STEPS_INDOOR = GameSoundEffect("steps_indoor.mp3") val STEPS_INDOOR: GameSoundEffect
get() = listOf(
GameSoundEffect("steps/steps_indoor_1.mp3"),
GameSoundEffect("steps/steps_indoor_2.mp3"),
GameSoundEffect("steps/steps_indoor_3.mp3"),
).random()
val DOOR_OPEN = GameSoundEffect("door_open.mp3") val DOOR_OPEN = GameSoundEffect("door_open.mp3")
val DOOR_CLOSE = GameSoundEffect("door_close.mp3") val DOOR_CLOSE = GameSoundEffect("door_close.mp3")
val TIME_TRAVEL = GameSoundEffect("time_travel.mp3")
val GRAB = GameSoundEffect("grab.mp3")
} }
} }

@ -1,18 +1,17 @@
package com.last.commit.audio; package com.last.commit.audio
import com.badlogic.gdx.Gdx import com.badlogic.gdx.Gdx
import com.badlogic.gdx.audio.Sound
import com.badlogic.gdx.audio.Music import com.badlogic.gdx.audio.Music
import com.last.commit.audio.GameSound import com.badlogic.gdx.audio.Sound
import com.last.commit.audio.GameMusic
public class SoundEngine { public class SoundEngine {
private val sounds: HashMap<String, Sound> = HashMap() private val sounds: ThreadLocal<HashMap<String, Sound>> =
private val musicTracks: HashMap<String, Music> = HashMap() ThreadLocal.withInitial() { HashMap() }
private val musicTracks: ThreadLocal<HashMap<String, Music>> =
public fun play(gameSound: GameSound, volume: Float = 1f) { ThreadLocal.withInitial() { HashMap() }
fun play(gameSound: GameSound, volume: Float = 1f) {
if (gameSound is GameSoundEffect) { if (gameSound is GameSoundEffect) {
val sound = loadEffect(gameSound.name) val sound = loadEffect(gameSound.name)
sound.play(volume) sound.play(volume)
@ -24,28 +23,29 @@ public class SoundEngine {
music.play() music.play()
} }
} }
private fun loadEffect(name: String): Sound { private fun loadEffect(name: String): Sound {
return loadSound("effects/$name") return loadSound("effects/$name")
} }
private fun loadMusic(name: String): Music { private fun loadMusic(name: String): Music {
var music = musicTracks.get(name) var music = musicTracks.get().get(name)
if (music == null) { if (music == null) {
println("Loading sound $name") println("Loading sound $name")
music = Gdx.audio.newMusic(Gdx.files.internal("sounds/music/$name")) music = Gdx.audio.newMusic(Gdx.files.internal("sounds/music/$name"))
musicTracks[name] = music musicTracks.get()[name] = music
} }
return music!! return music!!
} }
private fun loadSound(name: String): Sound { private fun loadSound(name: String): Sound {
var sound = sounds.get(name) var sound = sounds.get().get(name)
if (sound == null) { if (sound == null) {
println("Loading sound $name") println("Loading sound $name")
sound = Gdx.audio.newSound(Gdx.files.internal("sounds/$name")) sound = Gdx.audio.newSound(Gdx.files.internal("sounds/$name"))
sounds[name] = sound sounds.get()[name] = sound
} }
return sound!! return sound!!

@ -1,6 +1,7 @@
package com.last.commit.map package com.last.commit.map
import com.badlogic.gdx.math.Rectangle import com.badlogic.gdx.math.Rectangle
import com.last.commit.audio.GameSoundEffect
import Position import Position
import GameState import GameState
@ -21,6 +22,7 @@ class Collectible(
override fun interact(otherCollider: Rectangle, state: GameState) { override fun interact(otherCollider: Rectangle, state: GameState) {
println("Interacting with item $name") println("Interacting with item $name")
state.soundEngine.play(GameSoundEffect.GRAB)
state.inventory.add(this.name) state.inventory.add(this.name)
} }

@ -14,6 +14,7 @@ import com.badlogic.gdx.utils.Array
import com.last.commit.Collidable import com.last.commit.Collidable
import com.last.commit.Player import com.last.commit.Player
import com.last.commit.Wall import com.last.commit.Wall
import com.last.commit.audio.GameSoundEffect
import Position import Position
import GameState import GameState
@ -50,6 +51,7 @@ class TimeMap(fileName: String, val state: GameState) {
for (teleporter in teleporters) { for (teleporter in teleporters) {
if (teleporter is RectangleMapObject) { if (teleporter is RectangleMapObject) {
if (teleporter.rectangle.contains(player.getX(), player.getY())) { if (teleporter.rectangle.contains(player.getX(), player.getY())) {
state.soundEngine.play(GameSoundEffect.TIME_TRAVEL)
val targetMap = teleporter.properties.get("target", String::class.java) val targetMap = teleporter.properties.get("target", String::class.java)
System.out.println("Teleporting to targetMap $targetMap") System.out.println("Teleporting to targetMap $targetMap")
map = mapLoader.load("tiled/$targetMap") map = mapLoader.load("tiled/$targetMap")
@ -67,6 +69,7 @@ class TimeMap(fileName: String, val state: GameState) {
fun getPlayerSpawn(): Vector2 { fun getPlayerSpawn(): Vector2 {
val mapLayers = map.layers val mapLayers = map.layers
val spawnPoints = mapLayers["Spawnpoints"].objects val spawnPoints = mapLayers["Spawnpoints"].objects
for (spawnPoint in spawnPoints) { for (spawnPoint in spawnPoints) {
val spawnPointProperties = spawnPoint.properties val spawnPointProperties = spawnPoint.properties
if (spawnPointProperties != null && spawnPointProperties.containsKey("playerSpawn")) { if (spawnPointProperties != null && spawnPointProperties.containsKey("playerSpawn")) {

Loading…
Cancel
Save