63 lines
1.8 KiB
GDScript
63 lines
1.8 KiB
GDScript
class_name BattleCutsceneAction
|
|
|
|
static func battleDecisionCallable(_params:Dictionary) -> int:
|
|
print("Battle action executed.")
|
|
return Cutscene.CUTSCENE_CONTINUE
|
|
|
|
|
|
static func getBattleDecisionCallable(decision:BattleDecision) -> Dictionary:
|
|
return {
|
|
"function": battleDecisionCallable,
|
|
"decision": decision
|
|
}
|
|
|
|
static func playerDecisionCallable(_params:Dictionary) -> int:
|
|
var decisions:Array[BattleDecision] = []
|
|
|
|
for fighter:BattleFighter in BATTLE.fighterMap.values():
|
|
if !fighter || !fighter.isPlayerControlled():
|
|
continue
|
|
|
|
# Handle player decision
|
|
BATTLE.battleScene.actionBox.visible = true
|
|
var decision = await BATTLE.battleScene.actionBox.decisionMade
|
|
BATTLE.battleScene.actionBox.visible = false
|
|
if decision == null:
|
|
continue
|
|
decisions.append(decision)
|
|
|
|
# AI decisions
|
|
for fighter:BattleFighter in BATTLE.fighterMap.values():
|
|
if !fighter || fighter.isPlayerControlled():
|
|
continue
|
|
var decision = fighter.getAIDecision()
|
|
if decision == null:
|
|
continue
|
|
decisions.append(decision)
|
|
|
|
# Here I could do something like cutscene specific logic?
|
|
|
|
# Prioritize moves
|
|
decisions.shuffle()# Randomizes for moves that have equal chance of happening
|
|
decisions.sort_custom(func(a:BattleDecision, b:BattleDecision) -> int:
|
|
var priorityA = a.getPriority()
|
|
var priorityB = b.getPriority()
|
|
if priorityA > priorityB:
|
|
return -1
|
|
elif priorityA < priorityB:
|
|
return 1
|
|
else:
|
|
return 0
|
|
)
|
|
|
|
# Turn into cutscene actions.
|
|
for decision in decisions:
|
|
_params['cutscene'].addCallable(BattleCutsceneAction.getBattleDecisionCallable(decision))
|
|
|
|
return Cutscene.CUTSCENE_CONTINUE
|
|
|
|
static func getPlayerDecisionCallable() -> Dictionary:
|
|
return {
|
|
"function": playerDecisionCallable
|
|
}
|