Battle System base
This commit is contained in:
@@ -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
48
scripts/Battle/Battle.gd
Normal 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);
|
10
scripts/Battle/BattleFighter.gd
Normal file
10
scripts/Battle/BattleFighter.gd
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
class_name BattleFighter
|
||||||
|
|
||||||
|
enum BattleFighterTeam {
|
||||||
|
PLAYER,
|
||||||
|
ENEMY
|
||||||
|
};
|
||||||
|
|
||||||
|
var team:BattleFighterTeam;
|
||||||
|
var health:int = 100;
|
||||||
|
var maxHealth:int = 100;
|
11
scripts/Cutscene/Battle/BattleStartEvent.gd
Normal file
11
scripts/Cutscene/Battle/BattleStartEvent.gd
Normal 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);
|
@@ -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);
|
|
||||||
|
@@ -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)
|
|
||||||
]);
|
]);
|
||||||
|
@@ -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
|
11
scripts/System/BattleSystem.gd
Normal file
11
scripts/System/BattleSystem.gd
Normal 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;
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user