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

View File

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

View File

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