lighten AlternatingStateManager

This commit is contained in:
Md. Touhidur Rahman 2025-09-19 23:16:52 +06:00
parent 80253edb1d
commit 62630d53dd
No known key found for this signature in database
GPG Key ID: 431978882FE25058
3 changed files with 20 additions and 36 deletions

View File

@ -1,5 +1,6 @@
package com.unciv.logic package com.unciv.logic
import com.badlogic.gdx.Gdx
import com.unciv.utils.Concurrency import com.unciv.utils.Concurrency
import kotlinx.coroutines.Job import kotlinx.coroutines.Job
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -9,11 +10,10 @@ import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds import kotlin.time.Duration.Companion.seconds
import kotlin.time.ExperimentalTime import kotlin.time.ExperimentalTime
class AlternatingStateManager<State>( class AlternatingStateManager(
private val name: String, private val name: String,
private val state: State, private val originalState: () -> Unit,
private val originalState: (State) -> Unit, private val alternateState: () -> Unit
private val alternateState: (State) -> Unit
) { ) {
private var job: Job? = null private var job: Job? = null
@ -28,15 +28,15 @@ class AlternatingStateManager<State>(
var isAlternateState = true var isAlternateState = true
while (true) { while (true) {
if (isAlternateState) { if (isAlternateState) {
alternateState(state) Gdx.app.postRunnable(alternateState)
isAlternateState = false isAlternateState = false
} else { } else {
originalState(state) Gdx.app.postRunnable(originalState)
isAlternateState = true isAlternateState = true
} }
if (Clock.System.now() - startTime >= duration) { if (Clock.System.now() - startTime >= duration) {
originalState(state) Gdx.app.postRunnable(originalState)
return@run return@run
} }
@ -47,6 +47,6 @@ class AlternatingStateManager<State>(
fun stop() { fun stop() {
job?.cancel() job?.cancel()
originalState(state) Gdx.app.postRunnable(originalState)
} }
} }

View File

@ -1,6 +1,5 @@
package com.unciv.ui.screens.worldscreen.chat package com.unciv.ui.screens.worldscreen.chat
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.utils.Align import com.badlogic.gdx.utils.Align
import com.unciv.UncivGame import com.unciv.UncivGame
@ -30,19 +29,12 @@ class ChatButton(val worldScreen: WorldScreen) : IconTextButton(
val flash = AlternatingStateManager( val flash = AlternatingStateManager(
name = "ChatButton color flash", name = "ChatButton color flash",
state = object { originalState = {
val initialColor = fontColor icon?.color = fontColor
val targetColor = Color.ORANGE label.color = fontColor
}, originalState = { state -> }, alternateState = {
Gdx.app.postRunnable { icon?.color = Color.ORANGE
icon?.color = state.initialColor label.color = Color.ORANGE
label.color = state.initialColor
}
}, alternateState = { state ->
Gdx.app.postRunnable {
icon?.color = state.targetColor
label.color = state.targetColor
}
} }
) )

View File

@ -1,6 +1,5 @@
package com.unciv.ui.screens.worldscreen.status package com.unciv.ui.screens.worldscreen.status
import com.badlogic.gdx.Gdx
import com.badlogic.gdx.graphics.Color import com.badlogic.gdx.graphics.Color
import com.badlogic.gdx.scenes.scene2d.Actor import com.badlogic.gdx.scenes.scene2d.Actor
import com.badlogic.gdx.scenes.scene2d.ui.Button import com.badlogic.gdx.scenes.scene2d.ui.Button
@ -137,19 +136,12 @@ private class TurnIndicator : HorizontalGroup(), Disposable {
val flash = AlternatingStateManager( val flash = AlternatingStateManager(
name = "StatusButton color flash", name = "StatusButton color flash",
state = object { originalState = {
val initialColor = Color.WHITE image.color = Color.WHITE
val targetColor = Color.ORANGE gameAmount.color = Color.WHITE
}, originalState = { state -> }, alternateState = {
Gdx.app.postRunnable { image.color = Color.ORANGE
image.color = state.initialColor gameAmount.color = Color.ORANGE
gameAmount.color = state.initialColor
}
}, alternateState = { state ->
Gdx.app.postRunnable {
image.color = state.targetColor
gameAmount.color = state.targetColor
}
} }
) )