From 9f8e3b34ea7e5c2cd74f49abebe165a1f44400f7 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Thu, 9 Jan 2025 18:57:17 -0600 Subject: [PATCH] Battle System base --- scenes/Systems.tscn | 6 ++- scripts/Battle/Battle.gd | 48 +++++++++++++++++++ scripts/Battle/BattleFighter.gd | 10 ++++ scripts/Cutscene/Battle/BattleStartEvent.gd | 11 +++++ scripts/Cutscene/Event/CutsceneChangeEvent.gd | 3 +- scripts/Cutscene/TestCutscene.gd | 17 ++----- scripts/Entities/TestNPCController.gd | 7 ++- scripts/System/BattleSystem.gd | 11 +++++ scripts/System/Systems.gd | 3 ++ 9 files changed, 99 insertions(+), 17 deletions(-) create mode 100644 scripts/Battle/Battle.gd create mode 100644 scripts/Battle/BattleFighter.gd create mode 100644 scripts/Cutscene/Battle/BattleStartEvent.gd create mode 100644 scripts/System/BattleSystem.gd diff --git a/scenes/Systems.tscn b/scenes/Systems.tscn index 31d6a4b..48cfcc4 100644 --- a/scenes/Systems.tscn +++ b/scenes/Systems.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=7 format=3 uid="uid://iibqlagufwhm"] +[gd_scene load_steps=8 format=3 uid="uid://iibqlagufwhm"] [ext_resource type="Script" path="res://scripts/System/Systems.gd" id="1_uen2c"] [ext_resource type="Script" path="res://scripts/System/CutsceneSystem.gd" id="2_sf62c"] @@ -6,6 +6,7 @@ [ext_resource type="Script" path="res://scripts/System/QuestSystem.gd" id="4_d00wi"] [ext_resource type="Script" path="res://scripts/System/VNSystem.gd" id="5_22p3i"] [ext_resource type="Script" path="res://scripts/System/PauseSystem.gd" id="6_hdi8m"] +[ext_resource type="Script" path="res://scripts/System/BattleSystem.gd" id="7_miqgj"] [node name="Systems" type="Node3D"] script = ExtResource("1_uen2c") @@ -24,3 +25,6 @@ script = ExtResource("5_22p3i") [node name="Pause" type="Node3D" parent="."] script = ExtResource("6_hdi8m") + +[node name="Battle" type="Node" parent="."] +script = ExtResource("7_miqgj") diff --git a/scripts/Battle/Battle.gd b/scripts/Battle/Battle.gd new file mode 100644 index 0000000..bbd5120 --- /dev/null +++ b/scripts/Battle/Battle.gd @@ -0,0 +1,48 @@ +class_name Battle +const BattleFighter = preload("res://scripts/Battle/BattleFighter.gd"); + +enum FighterPosition { + LEFT_TOP = 0, + LEFT_CENTER = 1, + LEFT_BOTTOM = 2, + + CENTER_TOP = 3, + CENTER_CENTER = 4, + CENTER_BOTTOM = 5, + + RIGHT_TOP = 6, + RIGHT_CENTER = 7, + RIGHT_BOTTOM = 8, + + ENEMY_DEFAULT = LEFT_CENTER, + PLAYER_DEFAULT = RIGHT_CENTER, +}; + +var fighters:Array = []; + +func addFighter(fighter:BattleFighter, position:FighterPosition): + if fighters.has(position): + push_error("Fighter already exists at position"); + return + fighters[position] = fighter; + +func moveFighter(fighter:BattleFighter, position:FighterPosition): + if fighters.has(position): + push_error("Fighter already exists at position"); + return + if not fighters.has(fighter): + push_error("Fighter does not exist"); + return + removeFighter(fighter); + addFighter(fighter, position); + +func getFightersOfTeam(team:BattleFighter.BattleFighterTeam): + var result = []; + for fighter in fighters: + if fighter.team != team: + continue + result.append(fighter); + return result; + +func removeFighter(fighter:BattleFighter): + fighters.erase(fighter); \ No newline at end of file diff --git a/scripts/Battle/BattleFighter.gd b/scripts/Battle/BattleFighter.gd new file mode 100644 index 0000000..7c2b9bf --- /dev/null +++ b/scripts/Battle/BattleFighter.gd @@ -0,0 +1,10 @@ +class_name BattleFighter + +enum BattleFighterTeam { + PLAYER, + ENEMY +}; + +var team:BattleFighterTeam; +var health:int = 100; +var maxHealth:int = 100; \ No newline at end of file diff --git a/scripts/Cutscene/Battle/BattleStartEvent.gd b/scripts/Cutscene/Battle/BattleStartEvent.gd new file mode 100644 index 0000000..5946c21 --- /dev/null +++ b/scripts/Cutscene/Battle/BattleStartEvent.gd @@ -0,0 +1,11 @@ +class_name BattleStartEvent extends "res://scripts/Cutscene/CutsceneEvent.gd" + +var battle:Battle; + +func _init(battle:Battle): + super._init(); + self.battle = battle; + +func start() -> void: + super.start(); + getSystems().BATTLE.startBattle(self.battle); \ No newline at end of file diff --git a/scripts/Cutscene/Event/CutsceneChangeEvent.gd b/scripts/Cutscene/Event/CutsceneChangeEvent.gd index 794bda8..d361ac0 100644 --- a/scripts/Cutscene/Event/CutsceneChangeEvent.gd +++ b/scripts/Cutscene/Event/CutsceneChangeEvent.gd @@ -14,5 +14,4 @@ func start() -> void: func end() -> void: self.cutsceneNext.setupCutscene(); self.cutsceneNext.start(); - var systems = get_tree().current_scene.get_node("Systems") as Systems; - systems.CUTSCENE.setCurrentCutscene(self.cutsceneNext); + getSystems().CUTSCENE.setCurrentCutscene(self.cutsceneNext); diff --git a/scripts/Cutscene/TestCutscene.gd b/scripts/Cutscene/TestCutscene.gd index 566ed3f..e84a485 100644 --- a/scripts/Cutscene/TestCutscene.gd +++ b/scripts/Cutscene/TestCutscene.gd @@ -3,22 +3,15 @@ const OverworldEntity = preload("res://scripts/Entities/OverworldEntity.gd"); const TextboxEvent = preload("res://scripts/Cutscene/Event/VisualNovel/TextboxEvent.gd"); const PauseEvent = preload("res://scripts/Cutscene/Event/CutscenePauseEvent.gd"); const OverworldChangeDirectionEvent = preload("res://scripts/Cutscene/Event/Entity/OverworldChangeDirectionEvent.gd"); +const BattleStartEvent = preload("res://scripts/Cutscene/Battle/BattleStartEvent.gd"); -var speaker:OverworldEntity; -var interacted:OverworldEntity; +var battle:Battle = null; func _init(speaker:OverworldEntity, interacted:OverworldEntity ) -> void: - self.speaker = speaker; - self.interacted = interacted; + battle = Battle.new(); + pass func setupCutscene() -> void: - var dirSpeaker = speaker.getDirectionToFace(interacted.position); - var dirInteracted = interacted.getDirectionToFace(speaker.position); - add([ - OverworldChangeDirectionEvent.new(speaker, dirSpeaker), - OverworldChangeDirectionEvent.new(interacted, dirInteracted), - PauseEvent.new(PauseSystem.PauseType.ENTITY_PAUSED, [ speaker, interacted ]), - TextboxEvent.new("brother moment"), - PauseEvent.new(PauseSystem.PauseType.NOT_PAUSED) + BattleStartEvent.new(battle), ]); diff --git a/scripts/Entities/TestNPCController.gd b/scripts/Entities/TestNPCController.gd index edaa5cc..d38c713 100644 --- a/scripts/Entities/TestNPCController.gd +++ b/scripts/Entities/TestNPCController.gd @@ -2,7 +2,10 @@ class_name TestNPCController extends "res://scripts/Entities/OverworldEntity.gd" const TestCutscene = preload("res://scripts/Cutscene/TestCutscene.gd") func interact(interactor) -> void: - getSystems().CUTSCENE.setCurrentCutscene(TestCutscene.new(interactor, self)); + var battle = Battle.new(); + getSystems().BATTLE.startBattle(battle); + # getSystems().CUTSCENE.setCurrentCutscene(TestCutscene.new(interactor, self)); + pass func updateMovement(delta) -> void: - pass + pass \ No newline at end of file diff --git a/scripts/System/BattleSystem.gd b/scripts/System/BattleSystem.gd new file mode 100644 index 0000000..a82c378 --- /dev/null +++ b/scripts/System/BattleSystem.gd @@ -0,0 +1,11 @@ +class_name BattleSystem extends Node +const Battle = preload("res://scripts/Battle/Battle.gd"); + +var battle:Battle = null; + +func getSystems(): + return get_tree().current_scene.get_node("Systems"); + +func startBattle(battle:Battle) -> void: + print("start battle"); + self.battle = battle; \ No newline at end of file diff --git a/scripts/System/Systems.gd b/scripts/System/Systems.gd index a3cdda5..de6bcf6 100644 --- a/scripts/System/Systems.gd +++ b/scripts/System/Systems.gd @@ -4,12 +4,14 @@ const CutsceneSystem = preload("res://scripts/System/CutsceneSystem.gd"); const QuestSystem = preload("res://scripts/System/QuestSystem.gd"); const VNSystem = preload("res://scripts/System/VNSystem.gd"); const PauseSystem = preload("res://scripts/System/PauseSystem.gd"); +const BattleSystem = preload("res://scripts/System/BattleSystem.gd"); var ITEM:ItemSystem; var CUTSCENE:CutsceneSystem; var QUEST:QuestSystem; var VN:VNSystem; var PAUSE:PauseSystem; +var BATTLE:BattleSystem; func _ready(): ITEM = $Item; @@ -17,6 +19,7 @@ func _ready(): QUEST = $Quest; VN = $VN; PAUSE = $Pause; + BATTLE = $Battle; func _process(delta): pass