Pre and post conditions
This commit is contained in:
parent
a51a6485ef
commit
80a5203c4b
@ -58,7 +58,7 @@ class Creature {
|
|||||||
fun hits(creature : Creature, damage : Damage) =
|
fun hits(creature : Creature, damage : Damage) =
|
||||||
random(100) < damage.accuracy + spd - creature.spd
|
random(100) < damage.accuracy + spd - creature.spd
|
||||||
|
|
||||||
inline fun <reified S : Status> hasStatus() = statuses.filter { it is S }.isNotEmpty()
|
inline fun <reified S : Status> hasStatus() = statuses.filterIsInstance<S>().isNotEmpty()
|
||||||
|
|
||||||
private fun statFormula(gene : Int, growth : Int) = (2 * gene + growth / 4) * level / 100 + 5
|
private fun statFormula(gene : Int, growth : Int) = (2 * gene + growth / 4) * level / 100 + 5
|
||||||
}
|
}
|
@ -11,13 +11,22 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
|
|||||||
return creatures[currentCreature].first
|
return creatures[currentCreature].first
|
||||||
}
|
}
|
||||||
|
|
||||||
fun resolveTurn() {
|
val activeCreatures get() = creatures.withIndex()
|
||||||
val activeCreatures = creatures.withIndex()
|
|
||||||
.filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
|
.filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
|
||||||
.sortedBy { (_, c) -> c.first.spd }
|
.sortedBy { (_, c) -> c.first.spd }
|
||||||
|
.map { (i, _) -> i}
|
||||||
|
|
||||||
|
fun resolveTurn() {
|
||||||
|
// All preconditions
|
||||||
|
for (i in activeCreatures) {
|
||||||
|
val creature = creatures[i]
|
||||||
|
for (status in creature.first.statuses) {
|
||||||
|
status.onTurnStart(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
// Get the moves each creature will use this turn
|
// Get the moves each creature will use this turn
|
||||||
val moves = activeCreatures.map { (_, _) -> Pair(Ignore, 0) }
|
val moves = activeCreatures.map { i -> Pair(Ignore, nextOpponent(i)) }
|
||||||
for ((i, c) in activeCreatures) {
|
for (i in activeCreatures) {
|
||||||
// Resolve move
|
// Resolve move
|
||||||
val (skill, target) = moves[i]
|
val (skill, target) = moves[i]
|
||||||
currentCreature = i
|
currentCreature = i
|
||||||
@ -37,6 +46,13 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// All post conditions
|
||||||
|
for (i in activeCreatures) {
|
||||||
|
val creature = creatures[i]
|
||||||
|
for (status in creature.first.statuses) {
|
||||||
|
status.onTurnEnd(this)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getTargetList(target : Target, selected : Int) : List<Int> {
|
private fun getTargetList(target : Target, selected : Int) : List<Int> {
|
||||||
@ -48,4 +64,16 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
|
|||||||
Target.All -> creatures.indices.toList()
|
Target.All -> creatures.indices.toList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun nextOpponent(idx : Int) : Int {
|
||||||
|
var nextIdx = idx + 1
|
||||||
|
while (nextIdx != idx) {
|
||||||
|
if (creatures[nextIdx].second != creatures[idx].second) {
|
||||||
|
return nextIdx
|
||||||
|
}
|
||||||
|
nextIdx = (nextIdx + 1) % creatures.size
|
||||||
|
}
|
||||||
|
// There are no opponents... so use the "none" index
|
||||||
|
return -1
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user