merge and added settings can now modify soundengine

main
MehdiAyadi 1 year ago
parent 198855360f
commit bd6286bc9f

@ -1,5 +1,7 @@
package com.last.commit;
import com.badlogic.gdx.math.MathUtils
class ColorState {
public var red = 0f
private set;

@ -52,10 +52,13 @@ class Game : Game() {
}
fun createState() {
val settings = GameSettings()
val soundEngine = SoundEngine(settings.sfxVolume, settings.musicVolume)
settings.soundEngin = soundEngine
state = GameState(
Inventory(),
GameSettings(),
SoundEngine(),
settings,
soundEngine,
TimeTravelAssetManager(),
null,
DialogStage(Skin(Gdx.files.internal("ui/uiskin.json")))

@ -36,7 +36,7 @@ class Player(private val textureRegion: TextureRegion, private val gameState: Ga
updateCollider()
if (System.currentTimeMillis() - lastStep > 500) {
gameState.soundEngine.play(GameSoundEffect.STEPS_INDOOR, 0.5f)
gameState.soundEngine.play(GameSoundEffect.STEPS_INDOOR) //0.5F
lastStep = System.currentTimeMillis()
}
}

@ -4,24 +4,34 @@ import com.badlogic.gdx.Gdx
import com.badlogic.gdx.audio.Music
import com.badlogic.gdx.audio.Sound
public class SoundEngine {
public class SoundEngine(private val sfx: Float, private val music: Float) {
var volumeSfx = sfx
var volumeMusic = music
set(newValue) {
field = newValue
resume()
}
private val sounds: ThreadLocal<HashMap<String, Sound>> =
ThreadLocal.withInitial() { HashMap() }
private val musicTracks: ThreadLocal<HashMap<String, Music>> =
ThreadLocal.withInitial() { HashMap() }
lateinit var backgroundMusic: Music
var backgroundMusic: Music
init {
backgroundMusic = loadMusic("world_music.mp3")
}
fun play(gameSound: GameSound, volume: Float = 1f) {
fun play(gameSound: GameSound, ) {
if (gameSound is GameSoundEffect) {
val sound = loadEffect(gameSound.name)
sound.play(volume)
sound.play(volumeSfx)
} else if (gameSound is GameMusic) {
backgroundMusic = loadMusic(gameSound.name)
backgroundMusic.volume = volume
backgroundMusic.setLooping(true)
backgroundMusic.play()
resume()
}
}
@ -30,9 +40,11 @@ public class SoundEngine {
}
fun resume() {
backgroundMusic.play()
backgroundMusic.volume = volumeMusic
if (!backgroundMusic.isPlaying) {
backgroundMusic.play()
}
}
private fun loadEffect(name: String): Sound {
return loadSound("effects/$name")
}

@ -2,24 +2,56 @@ package com.last.commit.config
import com.badlogic.gdx.Input.Keys
import com.badlogic.gdx.math.MathUtils
import com.last.commit.GameState
import com.last.commit.audio.SoundEngine
import java.util.*
class GameSettings {
class GameSettings() {
lateinit var soundEngin : SoundEngine
private val actionKeys: EnumMap<ActionCommand, List<Int>> = EnumMap(ActionCommand::class.java)
private val actionKeysReversed: HashMap<Int, ActionCommand> = hashMapOf()
var musicEnabled: Boolean = true
set(newValue: Boolean) {
field = newValue
soundEngin?.volumeMusic = musicVolume
}
var sfxEnabled: Boolean = true
set(newValue: Boolean) {
field = newValue
soundEngin?.volumeSfx = sfxVolume
}
var musicVolume: Float = 0.5F
get() {
return if (musicEnabled) {
field
} else {
0F
}
}
set(newValue: Float) {
field = MathUtils.clamp(newValue, 1f, 0f)
field = newValue
soundEngin?.volumeMusic = musicVolume
}
var sfxVolume: Float = 0.5F
get() {
return if (sfxEnabled) {
field
} else {
0F
}
}
set(newValue: Float) {
field = MathUtils.clamp(newValue, 1f, 0f)
field = newValue
println("settings volume sfx :$sfxVolume")
soundEngin?.volumeSfx = sfxVolume
soundEngin?. let {
println("soundengine volume sfx :$sfxVolume")
}
}
@ -33,8 +65,6 @@ class GameSettings {
actionKeys[ActionCommand.INTERACT] = listOf(Keys.E)
actionKeys[ActionCommand.JUMP] = listOf(Keys.SPACE)
musicVolume = 0.5F
setReversed(actionKeys)
}

@ -50,7 +50,6 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
val highlightColor = Color(0f, 0f, 1f, 0.5f)
var pause = true
var uiStage: UIStage
val promptStage: PromptStage
@ -66,7 +65,6 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
uiStage = UIStage("sprites/genericItems_spritesheet_colored", gameState)
shapeRenderer.setAutoShapeType(true)
gameState.soundEngine.play(GameMusic.WORLD_MUSIC, 0.25f)
promptStage = PromptStage(Skin(Gdx.files.internal("ui/uiskin.json")))
promptStage.addText("""
You are stranded in time.
@ -99,7 +97,7 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
}
override fun handleKeyInput(action: ActionCommand) {
if (!pause) {
when (action) {
ActionCommand.INTERACT -> {
openDoor()
@ -120,20 +118,21 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
//Gdx.app.exit()
parent.changeScreen(Screens.MAIN_MENU)
}
}
}
override fun handleMouseInput(screenX: Int, screenY: Int, pointer: Int, button: Int) {
if (!pause) {
val mouseCoordinates: Vector2 = toWorldCoordinates(screenX.toFloat(), screenY.toFloat())
val playerDirection: Vector2 = player.getAbsoluteDirection()
map.interactWith(playerDirection.x, playerDirection.y, player.getCollider())
}
}
override fun show() {
// Prepare your screen here.
resume()
}
@ -151,7 +150,7 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
promptStage.clearText()
promptStage.addText("You won!")
promptStage.draw()
} else if (!pause) {
} else {
uiStage.act(delta)
gameState.dialogStage.act(delta)
promptStage.act(delta)
@ -296,21 +295,18 @@ class FirstScreen(private val parent: Game) : TimeTravelScreen() {
override fun pause() {
pause = true
gameState.soundEngine.stop()
}
override fun resume() {
pause = false
gameState.soundEngine.resume();
this.viewport.apply()
this.updateCamera()
// Invoked when your application is resumed after pause.
}
override fun hide() {
pause()
//gameState.soundEngine.stop()
}
override fun dispose() {

@ -3,6 +3,7 @@ package com.last.commit.screen
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.InputProcessor
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.math.MathUtils
import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.Stage
import com.badlogic.gdx.scenes.scene2d.ui.Skin
@ -21,6 +22,7 @@ class MainMenu(val parent: Game) : TimeTravelScreen() {
var table = Table()
val uiSkin: Skin
val state = ColorState()
init {
parent.state.assetManager.finishLoading()
@ -93,13 +95,17 @@ class MainMenu(val parent: Game) : TimeTravelScreen() {
}
val state = ColorState()
override fun render(delta: Float) {
state.step((delta * 1000).toLong())
// Draw your screen here. "delta" is the time since last render in seconds.
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
Gdx.gl.glClearColor(state.red, state.green, state.blue, 1f)
var red = MathUtils.clamp(state.red,0.1F, 0.5F)
var blue = MathUtils.clamp(state.green,0.1F, 0.5F)
var green = MathUtils.clamp(state.blue,0.1F, 0.5F)
Gdx.gl.glClearColor(red, green, blue, 1f)
// tell our stage to do actions and draw itself
stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));

@ -3,15 +3,16 @@ package com.last.commit.screen
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.InputProcessor
import com.badlogic.gdx.graphics.GL20
import com.badlogic.gdx.math.MathUtils
import com.badlogic.gdx.scenes.scene2d.Stage
import com.badlogic.gdx.scenes.scene2d.ui.*
import com.badlogic.gdx.utils.viewport.ScreenViewport
import com.last.commit.ColorState
import com.last.commit.Game
import com.last.commit.config.ActionCommand
class Settings(val parent: Game) : TimeTravelScreen() {
var stage: Stage
val skin: Skin
@ -22,84 +23,96 @@ class Settings(val parent: Game) : TimeTravelScreen() {
lateinit var musicOnOffLabel: Label
lateinit var soundOnOffLabel: Label
var sfxMusicSlider: Slider
var volumeMusicSlider: Slider
var musicCheckbox: CheckBox
var soundEffectsCheckbox: CheckBox
var backButton: Button
val state = ColorState()
val table = Table()
init {
parent.state.assetManager.finishLoading()
stage = Stage(ScreenViewport())
skin = parent.state.assetManager.getUiTexture()
}
override fun handleKeyInput(action: ActionCommand) {
}
override fun handleMouseInput(screenX: Int, screenY: Int, pointer: Int, button: Int) {
stage.touchDown(screenX, screenY, pointer, button)
stage.touchUp(screenX, screenY, pointer, button)
}
override fun getInputProcessors(): Array<InputProcessor> {
return emptyArray()
}
override fun show() {
stage.clear()
// Create a table that fills the screen. Everything else will go inside
// this table.
}
fun renderTable(x: Float, y: Float) {
table.reset()
table.setFillParent(true)
//table.setDebug(true);
stage.addActor(table)
// music volume
val volumeMusicSlider = Slider(0f, 1f, 0.1f, false, skin)
volumeMusicSlider = Slider(0f, 1f, 0.1f, false, skin)
volumeMusicSlider.value = parent.state.settings.musicVolume
volumeMusicSlider.addListener {
println("volume slide ${volumeMusicSlider.value}")
parent.state.settings.musicVolume = volumeMusicSlider.value
// updateVolumeLabel();
false
}
// sound volume
val soundMusicSlider = Slider(0f, 1f, 0.1f, false, skin)
soundMusicSlider.value = parent.state.settings.sfxVolume
soundMusicSlider.addListener {
parent.state.settings.sfxVolume = soundMusicSlider.value
sfxMusicSlider = Slider(0f, 1f, 0.1f, false, skin)
sfxMusicSlider.value = parent.state.settings.sfxVolume
sfxMusicSlider.addListener {
println("volume sfx :${sfxMusicSlider.value}")
parent.state.settings.sfxVolume = sfxMusicSlider.value
// updateVolumeLabel();
false
}
// music on/off
val musicCheckbox = CheckBox(null, skin)
musicCheckbox.isChecked = parent.state.settings.musicEnabled
musicCheckbox = CheckBox(null, skin)
musicCheckbox.isChecked = !parent.state.settings.musicEnabled
musicCheckbox.addListener {
val enabled: Boolean = musicCheckbox.isChecked()
parent.state.settings.musicEnabled = enabled
parent.state.settings.musicEnabled = !enabled
false
}
// sound on/off
val soundEffectsCheckbox = CheckBox(null, skin)
soundEffectsCheckbox.isChecked = parent.state.settings.sfxEnabled
soundEffectsCheckbox = CheckBox(null, skin)
soundEffectsCheckbox.isChecked = !parent.state.settings.sfxEnabled
soundEffectsCheckbox.addListener {
val enabled: Boolean = soundEffectsCheckbox.isChecked()
parent.state.settings.sfxEnabled = enabled
parent.state.settings.sfxEnabled = !enabled
false
}
// return to main screen button
val backButton = TextButton("Back", skin)
backButton = TextButton("Back", skin)
backButton.addListener {
parent.changeScreen(Screens.MAIN_MENU)
false
}
}
override fun handleKeyInput(action: ActionCommand) {
}
override fun handleMouseInput(screenX: Int, screenY: Int, pointer: Int, button: Int) {
stage.touchDown(screenX, screenY, pointer, button)
stage.touchUp(screenX, screenY, pointer, button)
}
override fun getInputProcessors(): Array<InputProcessor> {
return emptyArray()
}
override fun show() {
stage.clear()
}
fun renderTable(x: Float, y: Float) {
table.reset()
table.setFillParent(true)
//table.setDebug(true);
stage.addActor(table)
titleLabel = Label("Preferences", skin)
volumeMusicLabel = Label("Music Volume", skin)
volumeSoundLabel = Label("Sound Volume", skin)
@ -117,7 +130,7 @@ class Settings(val parent: Game) : TimeTravelScreen() {
table.row().size(x, y);
table.row().pad(10F, 0F, 0F, 10F)
table.add(volumeSoundLabel).left()
table.add(soundMusicSlider)
table.add(sfxMusicSlider)
table.row().size(x, y);
table.row().pad(10F, 0F, 0F, 10F)
table.add(soundOnOffLabel).left()
@ -128,9 +141,17 @@ class Settings(val parent: Game) : TimeTravelScreen() {
}
override fun render(delta: Float) {
// clear the screen ready for next set of images to be drawn
Gdx.gl.glClearColor(0f, 0f, 0f, 1f)
state.step((delta * 1000).toLong())
// Draw your screen here. "delta" is the time since last render in seconds.
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT)
var red = MathUtils.clamp(state.red,0.1F, 0.5F)
var blue = MathUtils.clamp(state.green,0.1F, 0.5F)
var green = MathUtils.clamp(state.blue,0.1F, 0.5F)
Gdx.gl.glClearColor(red, green, blue, 1f)
// tell our stage to do actions and draw itself
stage.act(Math.min(Gdx.graphics.deltaTime, 1 / 30f))
@ -158,5 +179,6 @@ class Settings(val parent: Game) : TimeTravelScreen() {
}
override fun dispose() {
stage.dispose();
}
}
Loading…
Cancel
Save