Skip to content

Commit

Permalink
Add slider tick fade out animation with Hidden mod
Browse files Browse the repository at this point in the history
  • Loading branch information
Rian8337 committed Jan 23, 2025
1 parent 5e25c07 commit b78bb67
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions src/com/reco1l/osu/hitobjects/SliderTicks.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import com.reco1l.andengine.sprite.*
import com.reco1l.framework.*
import com.rian.osu.beatmap.hitobject.*
import com.rian.osu.beatmap.hitobject.sliderobject.*
import kotlin.math.min
import ru.nsu.ccfit.zuev.osu.*
import ru.nsu.ccfit.zuev.osu.game.GameHelper

class SliderTickContainer : Container() {
private var slider: Slider? = null
Expand Down Expand Up @@ -85,7 +87,10 @@ class SliderTickSprite : ExtendedSprite() {
* @param tick The [SliderTick] represented by this [SliderTickSprite].
*/
fun init(currentTimeSec: Double, tick: SliderTick) {
val fadeInStartTime = (tick.startTime - tick.timePreempt) / 1000
val startTime = (tick.startTime / 1000).toFloat()
val timePreempt = (tick.timePreempt / 1000).toFloat()

val fadeInStartTime = startTime - timePreempt

clearEntityModifiers()

Expand All @@ -94,13 +99,25 @@ class SliderTickSprite : ExtendedSprite() {

registerEntityModifier(
Modifiers.sequence(null,
Modifiers.delay((fadeInStartTime - currentTimeSec).toFloat()),
Modifiers.delay(fadeInStartTime - currentTimeSec.toFloat()),
Modifiers.parallel(null,
Modifiers.scale(ANIM_DURATION * 4, 0.5f, 1f, easing = Easing.OutElasticHalf),
Modifiers.fadeIn(ANIM_DURATION)
)
)
)

if (GameHelper.isHidden()) {
val fadeOutDuration = min(timePreempt - ANIM_DURATION, 1f)
val fadeOutStartTime = startTime - fadeOutDuration

registerEntityModifier(
Modifiers.sequence(null,
Modifiers.delay(fadeOutStartTime - currentTimeSec.toFloat()),
Modifiers.fadeOut(fadeOutDuration)
)
)
}
}

/**
Expand All @@ -111,7 +128,7 @@ class SliderTickSprite : ExtendedSprite() {
fun onHit(isSuccessful: Boolean) {
clearEntityModifiers()

registerEntityModifier(Modifiers.fadeOut(ANIM_DURATION, easing = Easing.OutQuint))
registerEntityModifier(Modifiers.alpha(ANIM_DURATION, alpha, 0f, easing = Easing.OutQuint))

if (isSuccessful) {
registerEntityModifier(Modifiers.scale(ANIM_DURATION, 1f, 1.5f, easing = Easing.Out))
Expand Down

0 comments on commit b78bb67

Please sign in to comment.