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/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")
|
||||
|
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:
|
||||
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);
|
||||
|
@@ -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),
|
||||
]);
|
||||
|
@@ -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
|
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 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
|
||||
|
Reference in New Issue
Block a user