Battle System base

This commit is contained in:
2025-01-09 18:57:17 -06:00
parent 432d58ae0b
commit 9f8e3b34ea
9 changed files with 99 additions and 17 deletions

View File

@@ -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/Systems.gd" id="1_uen2c"]
[ext_resource type="Script" path="res://scripts/System/CutsceneSystem.gd" id="2_sf62c"] [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/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/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/PauseSystem.gd" id="6_hdi8m"]
[ext_resource type="Script" path="res://scripts/System/BattleSystem.gd" id="7_miqgj"]
[node name="Systems" type="Node3D"] [node name="Systems" type="Node3D"]
script = ExtResource("1_uen2c") script = ExtResource("1_uen2c")
@@ -24,3 +25,6 @@ script = ExtResource("5_22p3i")
[node name="Pause" type="Node3D" parent="."] [node name="Pause" type="Node3D" parent="."]
script = ExtResource("6_hdi8m") script = ExtResource("6_hdi8m")
[node name="Battle" type="Node" parent="."]
script = ExtResource("7_miqgj")

48
scripts/Battle/Battle.gd Normal file
View File

@@ -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);

View File

@@ -0,0 +1,10 @@
class_name BattleFighter
enum BattleFighterTeam {
PLAYER,
ENEMY
};
var team:BattleFighterTeam;
var health:int = 100;
var maxHealth:int = 100;

View File

@@ -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);

View File

@@ -14,5 +14,4 @@ func start() -> void:
func end() -> void: func end() -> void:
self.cutsceneNext.setupCutscene(); self.cutsceneNext.setupCutscene();
self.cutsceneNext.start(); self.cutsceneNext.start();
var systems = get_tree().current_scene.get_node("Systems") as Systems; getSystems().CUTSCENE.setCurrentCutscene(self.cutsceneNext);
systems.CUTSCENE.setCurrentCutscene(self.cutsceneNext);

View File

@@ -3,22 +3,15 @@ const OverworldEntity = preload("res://scripts/Entities/OverworldEntity.gd");
const TextboxEvent = preload("res://scripts/Cutscene/Event/VisualNovel/TextboxEvent.gd"); const TextboxEvent = preload("res://scripts/Cutscene/Event/VisualNovel/TextboxEvent.gd");
const PauseEvent = preload("res://scripts/Cutscene/Event/CutscenePauseEvent.gd"); const PauseEvent = preload("res://scripts/Cutscene/Event/CutscenePauseEvent.gd");
const OverworldChangeDirectionEvent = preload("res://scripts/Cutscene/Event/Entity/OverworldChangeDirectionEvent.gd"); const OverworldChangeDirectionEvent = preload("res://scripts/Cutscene/Event/Entity/OverworldChangeDirectionEvent.gd");
const BattleStartEvent = preload("res://scripts/Cutscene/Battle/BattleStartEvent.gd");
var speaker:OverworldEntity; var battle:Battle = null;
var interacted:OverworldEntity;
func _init(speaker:OverworldEntity, interacted:OverworldEntity ) -> void: func _init(speaker:OverworldEntity, interacted:OverworldEntity ) -> void:
self.speaker = speaker; battle = Battle.new();
self.interacted = interacted; pass
func setupCutscene() -> void: func setupCutscene() -> void:
var dirSpeaker = speaker.getDirectionToFace(interacted.position);
var dirInteracted = interacted.getDirectionToFace(speaker.position);
add([ add([
OverworldChangeDirectionEvent.new(speaker, dirSpeaker), BattleStartEvent.new(battle),
OverworldChangeDirectionEvent.new(interacted, dirInteracted),
PauseEvent.new(PauseSystem.PauseType.ENTITY_PAUSED, [ speaker, interacted ]),
TextboxEvent.new("brother moment"),
PauseEvent.new(PauseSystem.PauseType.NOT_PAUSED)
]); ]);

View File

@@ -2,7 +2,10 @@ class_name TestNPCController extends "res://scripts/Entities/OverworldEntity.gd"
const TestCutscene = preload("res://scripts/Cutscene/TestCutscene.gd") const TestCutscene = preload("res://scripts/Cutscene/TestCutscene.gd")
func interact(interactor) -> void: 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: func updateMovement(delta) -> void:
pass pass

View File

@@ -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;

View File

@@ -4,12 +4,14 @@ const CutsceneSystem = preload("res://scripts/System/CutsceneSystem.gd");
const QuestSystem = preload("res://scripts/System/QuestSystem.gd"); const QuestSystem = preload("res://scripts/System/QuestSystem.gd");
const VNSystem = preload("res://scripts/System/VNSystem.gd"); const VNSystem = preload("res://scripts/System/VNSystem.gd");
const PauseSystem = preload("res://scripts/System/PauseSystem.gd"); const PauseSystem = preload("res://scripts/System/PauseSystem.gd");
const BattleSystem = preload("res://scripts/System/BattleSystem.gd");
var ITEM:ItemSystem; var ITEM:ItemSystem;
var CUTSCENE:CutsceneSystem; var CUTSCENE:CutsceneSystem;
var QUEST:QuestSystem; var QUEST:QuestSystem;
var VN:VNSystem; var VN:VNSystem;
var PAUSE:PauseSystem; var PAUSE:PauseSystem;
var BATTLE:BattleSystem;
func _ready(): func _ready():
ITEM = $Item; ITEM = $Item;
@@ -17,6 +19,7 @@ func _ready():
QUEST = $Quest; QUEST = $Quest;
VN = $VN; VN = $VN;
PAUSE = $Pause; PAUSE = $Pause;
BATTLE = $Battle;
func _process(delta): func _process(delta):
pass pass