Pre and post conditions
This commit is contained in:
		@@ -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
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    val activeCreatures get() = creatures.withIndex()
 | 
				
			||||||
 | 
					            .filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
 | 
				
			||||||
 | 
					            .sortedBy { (_, c) -> c.first.spd }
 | 
				
			||||||
 | 
					            .map { (i, _) -> i}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun resolveTurn() {
 | 
					    fun resolveTurn() {
 | 
				
			||||||
        val activeCreatures = creatures.withIndex()
 | 
					        // All preconditions
 | 
				
			||||||
                .filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
 | 
					        for (i in activeCreatures) {
 | 
				
			||||||
                .sortedBy { (_, c) -> c.first.spd }
 | 
					            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
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user