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 {
|
enum BattlePosition {
|
||||||
LEFT_TOP_BACK,
|
LEFT_TOP_BACK,
|
||||||
@@ -13,11 +13,89 @@ enum BattlePosition {
|
|||||||
RIGHT_MIDDLE_BACK,
|
RIGHT_MIDDLE_BACK,
|
||||||
RIGHT_MIDDLE_FRONT,
|
RIGHT_MIDDLE_FRONT,
|
||||||
RIGHT_BOTTOM_BACK,
|
RIGHT_BOTTOM_BACK,
|
||||||
RIGHT_BOTTOM_FRONT,
|
RIGHT_BOTTOM_FRONT
|
||||||
|
|
||||||
# Should have pinned positions for enemies as well?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# @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="."]
|
[node name="Control" type="Control" parent="."]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
@@ -18,4 +33,42 @@ text = "Battle"
|
|||||||
|
|
||||||
[node name="Fighters" type="Node" parent="."]
|
[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:
|
var health:int
|
||||||
assert(stats != null)
|
var maxHealth:int
|
||||||
self.stats = stats
|
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
|
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:
|
func _init(
|
||||||
stats = BattleStats.new()
|
name:String,
|
||||||
|
maxHealth:int = 100,
|
||||||
|
maxMp:int = 50,
|
||||||
|
) -> void:
|
||||||
|
super(maxHealth, maxMp)
|
||||||
|
self.name = name
|
||||||
@@ -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
|
||||||
@@ -10,8 +10,12 @@ func _ready() -> void:
|
|||||||
btnSettings.pressed.connect(onSettingsPressed)
|
btnSettings.pressed.connect(onSettingsPressed)
|
||||||
|
|
||||||
func onNewGamePressed() -> void:
|
func onNewGamePressed() -> void:
|
||||||
SCENE.setScene(SceneSingleton.SceneType.OVERWORLD)
|
#SCENE.setScene(SceneSingleton.SceneType.OVERWORLD)
|
||||||
OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint")
|
#OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint")
|
||||||
|
SCENE.setScene(SceneSingleton.SceneType.BATTLE)
|
||||||
|
BATTLE.startBattle({
|
||||||
|
BattleScene.BattlePosition.LEFT_TOP_BACK: PartySingleton.PARTY_JOHN,
|
||||||
|
})
|
||||||
|
|
||||||
func onSettingsPressed() -> void:
|
func onSettingsPressed() -> void:
|
||||||
print("Settings button pressed")
|
print("Settings button pressed")
|
||||||
|
|||||||
Reference in New Issue
Block a user