Party progress
This commit is contained in:
@@ -1 +1,10 @@
|
||||
class_name BattleSingleton extends Node
|
||||
class_name BattleSingleton extends Node
|
||||
|
||||
var battleScene:BattleScene = null
|
||||
|
||||
func startBattle(
|
||||
fighters:Dictionary[BattleScene.BattlePosition, BattleFighter]
|
||||
) -> void:
|
||||
assert(battleScene != null)
|
||||
battleScene.startBatle(fighters
|
||||
)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
class_name BattleScene extends Node3D
|
||||
class_name BattleScene extends BattleFighterScene
|
||||
|
||||
enum BattlePosition {
|
||||
LEFT_TOP_BACK,
|
||||
@@ -13,11 +13,89 @@ enum BattlePosition {
|
||||
RIGHT_MIDDLE_BACK,
|
||||
RIGHT_MIDDLE_FRONT,
|
||||
RIGHT_BOTTOM_BACK,
|
||||
RIGHT_BOTTOM_FRONT,
|
||||
|
||||
# Should have pinned positions for enemies as well?
|
||||
RIGHT_BOTTOM_FRONT
|
||||
}
|
||||
|
||||
# @export var fighters:Node3D = null
|
||||
var fighterMap:Dictionary[BattlePosition, BattleFighterScene] = {}
|
||||
|
||||
# func start(
|
||||
@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 startBatle(fighters:Dictionary[BattlePosition, BattleFighter]) -> void:
|
||||
for position in fighters.keys():
|
||||
var fighterScene:BattleFighterScene = fighterMap.get(position, null)
|
||||
assert(fighterScene != null)
|
||||
fighterScene.setFighter(fighters[position])
|
||||
|
||||
@@ -1,8 +1,23 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://dy54m7dvjgqta"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://dy54m7dvjgqta"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cf4c61ij6elir" path="res://battle/fighter/BattleFighter.tscn" id="1_abr1f"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1xyb0hdf1yeh" path="res://battle/fighter/BattleFighterScene.tscn" id="1_abr1f"]
|
||||
[ext_resource type="Script" uid="uid://dihfp05x6pktn" path="res://battle/BattleScene.gd" id="1_acaen"]
|
||||
|
||||
[node name="BattleScene" type="Node3D"]
|
||||
[node name="BattleScene" type="Node3D" node_paths=PackedStringArray("fighterTopLeftBack", "fighterTopLeftFront", "fighterMiddleLeftBack", "fighterMiddleLeftFront", "fighterBottomLeftBack", "fighterBottomLeftFront", "fighterTopRightBack", "fighterTopRightFront", "fighterMiddleRightBack", "fighterMiddleRightFront", "fighterBottomRightBack", "fighterBottomRightFront")]
|
||||
script = ExtResource("1_acaen")
|
||||
fighterTopLeftBack = NodePath("Fighters/LeftTopBack")
|
||||
fighterTopLeftFront = NodePath("Fighters/LeftTopFront")
|
||||
fighterMiddleLeftBack = NodePath("Fighters/LeftMiddleBack")
|
||||
fighterMiddleLeftFront = NodePath("Fighters/LeftMiddleFront")
|
||||
fighterBottomLeftBack = NodePath("Fighters/LeftBottomBack")
|
||||
fighterBottomLeftFront = NodePath("Fighters/LeftBottomFront")
|
||||
fighterTopRightBack = NodePath("Fighters/RightTopBack")
|
||||
fighterTopRightFront = NodePath("Fighters/RightTopFront")
|
||||
fighterMiddleRightBack = NodePath("Fighters/RightMiddleBack")
|
||||
fighterMiddleRightFront = NodePath("Fighters/RightMiddleFront")
|
||||
fighterBottomRightBack = NodePath("Fighters/RightBottomBack")
|
||||
fighterBottomRightFront = NodePath("Fighters/RightBottomFront")
|
||||
metadata/_custom_type_script = "uid://dihfp05x6pktn"
|
||||
|
||||
[node name="Control" type="Control" parent="."]
|
||||
layout_mode = 3
|
||||
@@ -18,4 +33,42 @@ text = "Battle"
|
||||
|
||||
[node name="Fighters" type="Node" parent="."]
|
||||
|
||||
[node name="BattleFighter" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
[node name="LeftTopBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 3, 0)
|
||||
|
||||
[node name="LeftTopFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, 0)
|
||||
|
||||
[node name="LeftMiddleBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0, 0)
|
||||
|
||||
[node name="LeftMiddleFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.754, 0, 0)
|
||||
|
||||
[node name="LeftBottomBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -3, 0)
|
||||
|
||||
[node name="LeftBottomFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, -3, 0)
|
||||
|
||||
[node name="RightTopFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 0)
|
||||
|
||||
[node name="RightTopBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 3, 0)
|
||||
|
||||
[node name="RightMiddleFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0)
|
||||
|
||||
[node name="RightMiddleBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 0)
|
||||
|
||||
[node name="RightBottomFront" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -3, 0)
|
||||
|
||||
[node name="RightBottomBack" parent="Fighters" instance=ExtResource("1_abr1f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -3, 0)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6.9021)
|
||||
current = true
|
||||
|
||||
@@ -1,49 +0,0 @@
|
||||
class_name BattleStats
|
||||
|
||||
# enum Type {
|
||||
# NEUTRAL,
|
||||
# FIRE,
|
||||
# ICE,
|
||||
# }
|
||||
|
||||
enum Status {
|
||||
NORMAL,
|
||||
DEAD,
|
||||
}
|
||||
|
||||
var health:int = 100
|
||||
var maxHealth:int = 100
|
||||
var mp:int = 50
|
||||
var maxMp:int = 50
|
||||
# var type:Type = Type.NEUTRAL
|
||||
var status:Status = Status.NORMAL
|
||||
|
||||
func damage(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
if status == Status.DEAD:
|
||||
return
|
||||
health = max(health - amount, 0)
|
||||
if health == 0:
|
||||
status = Status.DEAD
|
||||
|
||||
func heal(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
if status == Status.DEAD:
|
||||
return
|
||||
health = min(health + amount, maxHealth)
|
||||
|
||||
func revive(health:int) -> void:
|
||||
assert(health > 0)
|
||||
if status != Status.DEAD:
|
||||
return
|
||||
health = min(health, maxHealth)
|
||||
status = Status.NORMAL
|
||||
self.health = health
|
||||
|
||||
func mpConsume(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
mp = max(mp - amount, 0)
|
||||
|
||||
func mpRestore(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
mp = min(mp + amount, maxMp)
|
||||
@@ -1,7 +1,63 @@
|
||||
class_name BattleFighter extends Node3D
|
||||
class_name BattleFighter
|
||||
|
||||
var stats:BattleStats = null
|
||||
enum Status {
|
||||
NORMAL,
|
||||
DEAD,
|
||||
}
|
||||
|
||||
func setup(stats:BattleStats) -> void:
|
||||
assert(stats != null)
|
||||
self.stats = stats
|
||||
var health:int
|
||||
var maxHealth:int
|
||||
var mp:int
|
||||
var maxMp:int
|
||||
var status:Status = Status.NORMAL
|
||||
|
||||
var attack:int = 10
|
||||
var defense:int = 5
|
||||
var speed:int = 5
|
||||
var magic:int = 5
|
||||
var luck:int = 1
|
||||
|
||||
func _init(
|
||||
maxHealth:int = 100,
|
||||
maxMp:int = 50,
|
||||
) -> void:
|
||||
self.maxHealth = maxHealth
|
||||
self.health = maxHealth
|
||||
self.maxMp = maxMp
|
||||
self.mp = maxMp
|
||||
|
||||
func damage(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
if status == Status.DEAD:
|
||||
return
|
||||
health = max(health - amount, 0)
|
||||
if health == 0:
|
||||
status = Status.DEAD
|
||||
|
||||
func heal(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
if status == Status.DEAD:
|
||||
return
|
||||
health = min(health + amount, maxHealth)
|
||||
|
||||
func revive(health:int) -> void:
|
||||
assert(health > 0)
|
||||
if status != Status.DEAD:
|
||||
return
|
||||
health = min(health, maxHealth)
|
||||
status = Status.NORMAL
|
||||
self.health = health
|
||||
|
||||
func mpConsume(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
mp = max(mp - amount, 0)
|
||||
|
||||
func mpRestore(amount:int) -> void:
|
||||
assert(amount > 0)
|
||||
mp = min(mp + amount, maxMp)
|
||||
|
||||
func isCrit() -> bool:
|
||||
# 10% chance of a crit
|
||||
var chance = 10 + min(luck * 5, 60)
|
||||
var roll = randi() % 100
|
||||
return roll < chance
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cf4c61ij6elir"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ck7wheiv8wptn" path="res://battle/fighter/BattleFighter.gd" id="1_xm54w"]
|
||||
|
||||
[node name="BattleFighter" type="Node3D"]
|
||||
script = ExtResource("1_xm54w")
|
||||
metadata/_custom_type_script = "uid://ck7wheiv8wptn"
|
||||
15
battle/fighter/BattleFighterScene.gd
Normal file
15
battle/fighter/BattleFighterScene.gd
Normal file
@@ -0,0 +1,15 @@
|
||||
class_name BattleFighterScene extends Node3D
|
||||
|
||||
var fighter:BattleFighter
|
||||
|
||||
func _ready() -> void:
|
||||
self.visible = false
|
||||
if fighter:
|
||||
setFighter(fighter)
|
||||
|
||||
func setFighter(fighter:BattleFighter) -> void:
|
||||
print("Setting fighter: %s" % fighter)
|
||||
# Set up the visual representation of the fighter here
|
||||
self.fighter = fighter
|
||||
self.visible = true
|
||||
pass
|
||||
1
battle/fighter/BattleFighterScene.gd.uid
Normal file
1
battle/fighter/BattleFighterScene.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bgycdhsouwhwt
|
||||
16
battle/fighter/BattleFighterScene.tscn
Normal file
16
battle/fighter/BattleFighterScene.tscn
Normal file
@@ -0,0 +1,16 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://d1xyb0hdf1yeh"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bgycdhsouwhwt" path="res://battle/fighter/BattleFighterScene.gd" id="1_veb1i"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_veb1i"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e55p4"]
|
||||
shading_mode = 0
|
||||
|
||||
[node name="BattleFighterScene" type="Node3D"]
|
||||
script = ExtResource("1_veb1i")
|
||||
metadata/_custom_type_script = "uid://bgycdhsouwhwt"
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_veb1i")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_e55p4")
|
||||
@@ -1,3 +1,8 @@
|
||||
class_name PartySingleton extends Node
|
||||
|
||||
static var PARTY_JOHN = PartyMember.new()
|
||||
static var PARTY_JOHN = PartyMember.new("John")
|
||||
|
||||
static func getFullParty() -> Array[PartyMember]:
|
||||
return [
|
||||
PARTY_JOHN
|
||||
]
|
||||
@@ -1,6 +1,11 @@
|
||||
class_name PartyMember
|
||||
class_name PartyMember extends BattleFighter
|
||||
|
||||
var stats:BattleStats
|
||||
var name:String
|
||||
|
||||
func _init() -> void:
|
||||
stats = BattleStats.new()
|
||||
func _init(
|
||||
name:String,
|
||||
maxHealth:int = 100,
|
||||
maxMp:int = 50,
|
||||
) -> void:
|
||||
super(maxHealth, maxMp)
|
||||
self.name = name
|
||||
10
save/Save.gd
10
save/Save.gd
@@ -1 +1,9 @@
|
||||
class_name SaveSingleton extends Node
|
||||
class_name SaveSingleton extends Node
|
||||
|
||||
func load(data:Dictionary) -> void:
|
||||
pass
|
||||
|
||||
func save() -> Dictionary:
|
||||
var data:Dictionary = {}
|
||||
|
||||
return data
|
||||
@@ -55,4 +55,4 @@ func onSceneChange(newScene:SceneSingleton.SceneType) -> void:
|
||||
removeAndHide(initial)
|
||||
removeAndHide(overworld)
|
||||
removeAndHide(battle)
|
||||
removeAndHide(cooking)
|
||||
removeAndHide(cooking)
|
||||
|
||||
@@ -28,4 +28,4 @@ class_name PauseSingleton extends Node
|
||||
# # UI.PAUSE.close()
|
||||
# # else:
|
||||
# # UI.PAUSE.open()
|
||||
# pass
|
||||
# pass
|
||||
|
||||
@@ -10,8 +10,12 @@ func _ready() -> void:
|
||||
btnSettings.pressed.connect(onSettingsPressed)
|
||||
|
||||
func onNewGamePressed() -> void:
|
||||
SCENE.setScene(SceneSingleton.SceneType.OVERWORLD)
|
||||
OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint")
|
||||
#SCENE.setScene(SceneSingleton.SceneType.OVERWORLD)
|
||||
#OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint")
|
||||
SCENE.setScene(SceneSingleton.SceneType.BATTLE)
|
||||
BATTLE.startBattle({
|
||||
BattleScene.BattlePosition.LEFT_TOP_BACK: PartySingleton.PARTY_JOHN,
|
||||
})
|
||||
|
||||
func onSettingsPressed() -> void:
|
||||
print("Settings button pressed")
|
||||
|
||||
Reference in New Issue
Block a user