Effect.kt

Branches > main > 77b4f5e > files / src / main / kotlin / net / bowmap / stormbow / effect / Effect.kt

package net.bowmap.stormbow.effect

import kotlinx.collections.immutable.*

interface Effect {
}

/// An effect that knows how to run itself.
/// Some effects are to be run by event listeners themselves
interface DefaultEffect : Effect {
  fun execute()
}

fun execute(effects: PersistentList<Effect>) {
  effects.forEach { effect ->
    if (effect is DefaultEffect) {
      effect.execute()
    }
  }
}

fun effects(vararg e: Effect) = persistentListOf(*e)

inline fun <reified T : Effect> find(effects: PersistentList<Effect>): T? {
  return effects.filterIsInstance<T>().firstOrNull()
}

inline fun <reified T : Effect> contains(effects: PersistentList<Effect>): Boolean {
  return effects.any {it is T}
}