Android build v1.1.2
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import type { PartyMember, Spell } from '../game'
|
||||
import { applyCastStateUpdate, type CastStateFields } from './combatStateTransitions'
|
||||
import { canCastSpell } from './spellCasting'
|
||||
import { applySpellEffectProfile, type SpellEffectProfile, type SpellTargetPlan } from './spellEffects'
|
||||
|
||||
export function applyPvpSpellCast<TState extends CastStateFields<PartyMember[]>>({
|
||||
current,
|
||||
spell,
|
||||
targetId,
|
||||
resourceCost,
|
||||
targetPlan,
|
||||
profile,
|
||||
setCurrent,
|
||||
emitFloatingHeal,
|
||||
cooldownMultiplier = 1,
|
||||
cooldowns,
|
||||
freeCast,
|
||||
}: {
|
||||
current: TState
|
||||
spell: Spell
|
||||
targetId: string
|
||||
resourceCost: number
|
||||
targetPlan: SpellTargetPlan
|
||||
profile: SpellEffectProfile
|
||||
setCurrent: (next: TState) => void
|
||||
emitFloatingHeal: (memberId: string, value: number) => void
|
||||
cooldownMultiplier?: number
|
||||
cooldowns?: Record<string, number>
|
||||
freeCast?: {
|
||||
enabled: boolean
|
||||
wasReady: boolean
|
||||
}
|
||||
}) {
|
||||
if (!canCastSpell(spell, current.resource, current.cooldowns, resourceCost)) return false
|
||||
const target = current.party.find((member) => member.id === targetId && member.health > 0)
|
||||
if (!target) return false
|
||||
|
||||
const { party: nextParty, floatingHeals } = applySpellEffectProfile({
|
||||
party: current.party,
|
||||
spell,
|
||||
targetId,
|
||||
plan: targetPlan,
|
||||
profile,
|
||||
})
|
||||
floatingHeals.forEach((event) => emitFloatingHeal(event.memberId, event.value))
|
||||
|
||||
const nextState = applyCastStateUpdate({
|
||||
current,
|
||||
party: nextParty,
|
||||
cooldowns,
|
||||
spell,
|
||||
resourceCost,
|
||||
cooldownMultiplier,
|
||||
freeCast,
|
||||
})
|
||||
setCurrent(nextState)
|
||||
return true
|
||||
}
|
||||
Reference in New Issue
Block a user