Skip to content

Commit 4c4a67f

Browse files
committed
feat: add restore velocity option after cinematic finishes
1 parent 1e0de35 commit 4c4a67f

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

engine/engine-paper/src/main/kotlin/com/typewritermc/engine/paper/entry/temporal/TemporalInteraction.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,18 @@ import com.typewritermc.engine.paper.entry.entries.CinematicAction
1212
import com.typewritermc.engine.paper.entry.entries.CinematicEntry
1313
import com.typewritermc.engine.paper.entry.entries.EventTrigger
1414
import com.typewritermc.engine.paper.entry.matches
15-
import com.typewritermc.engine.paper.entry.temporal.TemporalState.*
15+
import com.typewritermc.engine.paper.entry.temporal.TemporalState.ENDING
16+
import com.typewritermc.engine.paper.entry.temporal.TemporalState.PLAYING
17+
import com.typewritermc.engine.paper.entry.temporal.TemporalState.STARTING
1618
import com.typewritermc.engine.paper.entry.triggerFor
1719
import com.typewritermc.engine.paper.events.AsyncCinematicEndEvent
1820
import com.typewritermc.engine.paper.events.AsyncCinematicStartEvent
1921
import com.typewritermc.engine.paper.events.AsyncCinematicTickEvent
2022
import com.typewritermc.engine.paper.interaction.*
23+
import com.typewritermc.engine.paper.utils.GenericPlayerStateProvider
24+
import com.typewritermc.engine.paper.utils.PlayerState
25+
import com.typewritermc.engine.paper.utils.restore
26+
import com.typewritermc.engine.paper.utils.state
2127
import kotlinx.coroutines.Dispatchers
2228
import kotlinx.coroutines.coroutineScope
2329
import kotlinx.coroutines.joinAll
@@ -37,6 +43,7 @@ class TemporalInteraction(
3743
private set
3844
private var playTime = Duration.ofMillis(-1)
3945
val frame: Int get() = (playTime.toMillis() / 50).toInt()
46+
private var savedVelocityState: PlayerState? = null
4047

4148
override val priority by lazy { Query.findPageById(pageId)?.priority ?: 0 }
4249

@@ -54,6 +61,7 @@ class TemporalInteraction(
5461

5562
if (settings.blockChatMessages) player.startBlockingMessages()
5663
if (settings.blockActionBarMessages) player.startBlockingActionBar()
64+
if (settings.restoreVelocity) savedVelocityState = player.state(GenericPlayerStateProvider.VELOCITY)
5765

5866
actions = Query.findWhereFromPage<CinematicEntry>(pageId) {
5967
it.criteria.matches(player, context)
@@ -113,6 +121,7 @@ class TemporalInteraction(
113121
player.chatHistory.resendMessages(player)
114122
}
115123
if (settings.blockActionBarMessages) player.stopBlockingActionBar()
124+
if (settings.restoreVelocity) player.restore(savedVelocityState)
116125

117126
actions.forEach {
118127
try {
@@ -164,6 +173,7 @@ data class TemporalStartTrigger(
164173
data class TemporalSettings(
165174
val blockChatMessages: Boolean = true,
166175
val blockActionBarMessages: Boolean = true,
176+
val restoreVelocity: Boolean = false,
167177
)
168178

169179
data object TemporalStopTrigger : EventTrigger {

engine/engine-paper/src/main/kotlin/com/typewritermc/engine/paper/utils/PlayerState.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.bukkit.inventory.EquipmentSlot
2323
import org.bukkit.inventory.ItemStack
2424
import org.bukkit.potion.PotionEffect
2525
import org.bukkit.potion.PotionEffectType
26+
import org.bukkit.util.Vector
2627

2728
interface PlayerStateProvider {
2829
fun store(player: Player): Any
@@ -45,6 +46,7 @@ enum class GenericPlayerStateProvider(private val store: Player.() -> Any, priva
4546
resetPlayerTime()
4647
WrapperPlayServerTimeUpdate(world.gameTime, playerTime).sendPacketTo(this)
4748
}),
49+
VELOCITY({ velocity }, { velocity = it as Vector }),
4850

4951
// All Players that are visible to the player
5052
VISIBLE_PLAYERS({

extensions/BasicExtension/src/main/kotlin/com/typewritermc/basic/entries/action/CinematicEntry.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,13 @@ class CinematicEntry(
4545
val blockChatMessages: Boolean = true,
4646
@Default("true")
4747
@Help("Whether to block actionbar messages from showing to the player while in the cinematic.")
48-
val blockActionBarMessages: Boolean = true
48+
val blockActionBarMessages: Boolean = true,
49+
@Default("false")
50+
@Help("Whether to restore the player's velocity after the cinematic finishes.")
51+
val restoreVelocity: Boolean = false
4952
) : ActionEntry {
5053
override val eventTriggers: List<EventTrigger>
51-
get() = listOf(TemporalStartTrigger(pageId, super.eventTriggers, TemporalSettings(blockChatMessages, blockActionBarMessages)))
54+
get() = listOf(TemporalStartTrigger(pageId, super.eventTriggers, TemporalSettings(blockChatMessages, blockActionBarMessages, restoreVelocity)))
5255

5356
override fun ActionTrigger.execute() {}
5457
}

0 commit comments

Comments
 (0)