class_name BattleScene extends BattleFighterScene const CutsceneBattleAction = preload("res://cutscene/battle/CutsceneBattleAction.gd") enum BattlePosition { LEFT_TOP_BACK, LEFT_TOP_FRONT, LEFT_MIDDLE_BACK, LEFT_MIDDLE_FRONT, LEFT_BOTTOM_BACK, LEFT_BOTTOM_FRONT, RIGHT_TOP_BACK, RIGHT_TOP_FRONT, RIGHT_MIDDLE_BACK, RIGHT_MIDDLE_FRONT, RIGHT_BOTTOM_BACK, RIGHT_BOTTOM_FRONT } var active:bool = false var fighterMap:Dictionary[BattlePosition, BattleFighterScene] = {} @export var actionBox:ActionBox = null @export var fighterTopLeftBack:BattleFighterScene = null: get: return fighterMap.get(BattlePosition.LEFT_TOP_BACK, null) set(value): fighterMap[BattlePosition.LEFT_TOP_BACK] = value @export var fighterTopLeftFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.LEFT_TOP_FRONT, null) set(value): fighterMap[BattlePosition.LEFT_TOP_FRONT] = value @export var fighterMiddleLeftBack:BattleFighterScene: get: return fighterMap.get(BattlePosition.LEFT_MIDDLE_BACK, null) set(value): fighterMap[BattlePosition.LEFT_MIDDLE_BACK] = value @export var fighterMiddleLeftFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.LEFT_MIDDLE_FRONT, null) set(value): fighterMap[BattlePosition.LEFT_MIDDLE_FRONT] = value @export var fighterBottomLeftBack:BattleFighterScene: get: return fighterMap.get(BattlePosition.LEFT_BOTTOM_BACK, null) set(value): fighterMap[BattlePosition.LEFT_BOTTOM_BACK] = value @export var fighterBottomLeftFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.LEFT_BOTTOM_FRONT, null) set(value): fighterMap[BattlePosition.LEFT_BOTTOM_FRONT] = value @export var fighterTopRightBack:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_TOP_BACK, null) set(value): fighterMap[BattlePosition.RIGHT_TOP_BACK] = value @export var fighterTopRightFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_TOP_FRONT, null) set(value): fighterMap[BattlePosition.RIGHT_TOP_FRONT] = value @export var fighterMiddleRightBack:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_MIDDLE_BACK, null) set(value): fighterMap[BattlePosition.RIGHT_MIDDLE_BACK] = value @export var fighterMiddleRightFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_MIDDLE_FRONT, null) set(value): fighterMap[BattlePosition.RIGHT_MIDDLE_FRONT] = value @export var fighterBottomRightBack:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_BOTTOM_BACK, null) set(value): fighterMap[BattlePosition.RIGHT_BOTTOM_BACK] = value @export var fighterBottomRightFront:BattleFighterScene: get: return fighterMap.get(BattlePosition.RIGHT_BOTTOM_FRONT, null) set(value): fighterMap[BattlePosition.RIGHT_BOTTOM_FRONT] = value func _init() ->void: BATTLE.battleScene = self pass func getFigheterAtPosition(battlePos:BattlePosition) -> BattleFighterScene: return fighterMap.get(battlePos, null) func getPositionForFighterScene(fighterScene:BattleFighterScene) -> BattlePosition: for battlePos in fighterMap.keys(): var scene:BattleFighterScene = fighterMap[battlePos] if scene == fighterScene: return battlePos assert(false) return BattlePosition.LEFT_TOP_BACK func getPositionForFighter(fighter:BattleFighter) -> BattlePosition: for battlePos in fighterMap.keys(): var fighterScene:BattleFighterScene = fighterMap[battlePos] if fighterScene.fighter == fighter: return battlePos assert(false) return BattlePosition.LEFT_TOP_BACK func getFighterSceneForFighter(fighter:BattleFighter) -> BattleFighterScene: for battlePos in fighterMap.keys(): var fighterScene:BattleFighterScene = fighterMap[battlePos] if fighterScene.fighter == fighter: return fighterScene return null func startBattle(params:Dictionary) -> void: assert(params.has('fighters')) assert(!active) var cutscene:Cutscene = params.get('cutscene', Cutscene.new()) for battlePos in params['fighters'].keys(): var fighterScene:BattleFighterScene = fighterMap.get(battlePos, null) assert(fighterScene != null) fighterScene.setFighter(params['fighters'][battlePos]) # Initial cutscene elements. In future I may need to make this editable # somehow? cutscene.addCallable({ "function": CutsceneBattleAction.playerDecision }) if !cutscene.running: cutscene.start() active = true