Pre and post conditions
This commit is contained in:
		@@ -58,7 +58,7 @@ class Creature {
 | 
			
		||||
    fun hits(creature : Creature, damage : Damage) =
 | 
			
		||||
            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
 | 
			
		||||
}
 | 
			
		||||
@@ -11,13 +11,22 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
 | 
			
		||||
        return creatures[currentCreature].first
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun resolveTurn() {
 | 
			
		||||
        val activeCreatures = creatures.withIndex()
 | 
			
		||||
    val activeCreatures get() = creatures.withIndex()
 | 
			
		||||
            .filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
 | 
			
		||||
            .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
 | 
			
		||||
        val moves = activeCreatures.map { (_, _) -> Pair(Ignore, 0) }
 | 
			
		||||
        for ((i, c) in activeCreatures) {
 | 
			
		||||
        val moves = activeCreatures.map { i -> Pair(Ignore, nextOpponent(i)) }
 | 
			
		||||
        for (i in activeCreatures) {
 | 
			
		||||
            // Resolve move
 | 
			
		||||
            val (skill, target) = moves[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> {
 | 
			
		||||
@@ -48,4 +64,16 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
 | 
			
		||||
            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
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user