Start integrating forced skills
This commit is contained in:
		@@ -1,5 +1,7 @@
 | 
			
		||||
package me.msoucy.ptures.model
 | 
			
		||||
 | 
			
		||||
import me.msoucy.ptures.view.BattleView
 | 
			
		||||
 | 
			
		||||
class Engine(private vararg val creatures : Pair<Creature, Int>) {
 | 
			
		||||
    init {
 | 
			
		||||
        assert(creatures.isNotEmpty())
 | 
			
		||||
@@ -11,21 +13,31 @@ class Engine(private vararg val creatures : Pair<Creature, Int>) {
 | 
			
		||||
        return creatures[currentCreature].first
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val forcedSkills = mutableMapOf<Creature, Skill>()
 | 
			
		||||
 | 
			
		||||
    val activeCreatures get() = creatures.withIndex()
 | 
			
		||||
            .filter { (_, c) -> !c.first.hasStatus<KnockedOut>() }
 | 
			
		||||
            .sortedBy { (_, c) -> c.first.spd }
 | 
			
		||||
            .map { (i, _) -> i}
 | 
			
		||||
 | 
			
		||||
    fun resolveTurn() {
 | 
			
		||||
    fun resolveTurn(view : BattleView) {
 | 
			
		||||
        forcedSkills.clear()
 | 
			
		||||
        // All preconditions
 | 
			
		||||
        for (i in activeCreatures) {
 | 
			
		||||
            val creature = creatures[i]
 | 
			
		||||
            for (status in creature.first.statuses) {
 | 
			
		||||
                status.onTurnStart(this)
 | 
			
		||||
                status.onTurnStart(this, creature.first)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // Get the moves each creature will use this turn
 | 
			
		||||
        val moves = activeCreatures.map { i -> Pair(Ignore, nextOpponent(i)) }
 | 
			
		||||
        val moves = activeCreatures.map { i ->
 | 
			
		||||
            if (creatures[i].first in forcedSkills) {
 | 
			
		||||
                Pair(forcedSkills[creatures[i].first], nextOpponent(i))
 | 
			
		||||
            } else {
 | 
			
		||||
                TODO("Fill in view here")
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // Resolve each move
 | 
			
		||||
        for (i in activeCreatures) {
 | 
			
		||||
            // Resolve move
 | 
			
		||||
            val (skill, target) = moves[i]
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ package me.msoucy.ptures.model
 | 
			
		||||
 | 
			
		||||
sealed class Status {
 | 
			
		||||
 | 
			
		||||
    open fun onTurnStart(engine : Engine) {
 | 
			
		||||
    open fun onTurnStart(engine : Engine, creature : Creature) {
 | 
			
		||||
        // Do nothing
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package me.msoucy.ptures.view
 | 
			
		||||
 | 
			
		||||
import me.msoucy.ptures.model.Creature
 | 
			
		||||
import me.msoucy.ptures.model.Skill
 | 
			
		||||
import me.msoucy.ptures.model.Skills
 | 
			
		||||
import me.msoucy.ptures.model.VisibleStatus
 | 
			
		||||
 | 
			
		||||
class SkillViewText(val skill : Skill) : SkillView() {
 | 
			
		||||
 
 | 
			
		||||
@@ -2,16 +2,20 @@ package me.msoucy.ptures.view
 | 
			
		||||
 | 
			
		||||
import me.msoucy.ptures.model.Skill
 | 
			
		||||
 | 
			
		||||
abstract class SkillView {
 | 
			
		||||
    abstract fun display()
 | 
			
		||||
    abstract fun displayEnumerated(idx : Int)
 | 
			
		||||
interface SkillView {
 | 
			
		||||
    fun display()
 | 
			
		||||
    fun displayEnumerated(idx : Int)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
abstract class CreatureView {
 | 
			
		||||
interface CreatureView {
 | 
			
		||||
 | 
			
		||||
    abstract val skillChoice : Skill
 | 
			
		||||
    val skillChoice : Skill
 | 
			
		||||
 | 
			
		||||
    abstract fun displayName()
 | 
			
		||||
    abstract fun displaySkills()
 | 
			
		||||
    abstract fun displayStatuses()
 | 
			
		||||
    fun displayName()
 | 
			
		||||
    fun displaySkills()
 | 
			
		||||
    fun displayStatuses()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface BattleView {
 | 
			
		||||
    //
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user