Save file functionality
This commit is contained in:
248
Game.gd
248
Game.gd
@@ -1,248 +0,0 @@
|
||||
extends Control
|
||||
|
||||
var score = 0
|
||||
var clickAdd = 1
|
||||
var scorePerSec = 1
|
||||
var scoreMultiplier = 1
|
||||
|
||||
#Click Upgrades Costs
|
||||
var clickUpgradeReq1 = 10
|
||||
var clickUpgradeReq10 = 100
|
||||
var clickUpgradeReq20 = 1000
|
||||
var clickUpgradeReq40 = 10000
|
||||
var clickUpgradeReq60 = 100000
|
||||
var clickUpgradeReq80 = 1000000
|
||||
var clickUpgradeReq100 = 10000000
|
||||
var clickUpgradeReq200 = 100000000
|
||||
var clickUpgradeReq400 = 1000000000
|
||||
|
||||
|
||||
# Click Upgrades Amount
|
||||
var clickUpgradeAmt1 = 1
|
||||
var clickUpgradeAmt10 = 10
|
||||
var clickUpgradeAmt20 = 20
|
||||
var clickUpgradeAmt40 = 40
|
||||
var clickUpgradeAmt60 = 60
|
||||
var clickUpgradeAmt80 = 80
|
||||
var clickUpgradeAmt100 = 100
|
||||
var clickUpgradeAmt200 = 200
|
||||
var clickUpgradeAmt400 = 400
|
||||
|
||||
|
||||
# Passive Upgrades Costs
|
||||
var passiveUpgradeReq2 = 100
|
||||
var passiveUpgradeReq10 = 1000
|
||||
var passiveUpgradeReq20 = 10000
|
||||
var passiveUpgradeReq50 = 100000
|
||||
var passiveUpgradeReq100 = 1000000
|
||||
var passiveUpgradeReq200 = 10000000
|
||||
var passiveUpgradeReq500 = 100000000
|
||||
var passiveUpgradeReq1000 = 1000000000
|
||||
var passiveUpgradeReq10000 = 10000000000
|
||||
|
||||
# Passive Upgrades Amount
|
||||
var passiveUpgradeAmt2 = 2
|
||||
var passiveUpgradeAmt10 = 10
|
||||
var passiveUpgradeAmt20 = 20
|
||||
var passiveUpgradeAmt50 = 50
|
||||
var passiveUpgradeAmt100 = 100
|
||||
var passiveUpgradeAmt200 = 200
|
||||
var passiveUpgradeAmt500 = 500
|
||||
var passiveUpgradeAmt1000 = 1000
|
||||
var passiveUpgradeAmt10000 = 10000
|
||||
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
$ClickUpgrades.get_popup().connect("id_pressed",clickUpgrade)
|
||||
$PassiveUpgrades.get_popup().connect("id_pressed",passiveUpgrade)
|
||||
$Timer.connect("timeout", _on_Timer_timeout)
|
||||
#Code for the Click Me Button (deprecated)
|
||||
#$Click.pressed.connect(self._on_button_pressed)
|
||||
|
||||
#Prints all input events, only for debugging
|
||||
#func _input(event):
|
||||
#print(event.as_text())
|
||||
|
||||
func _on_Timer_timeout():
|
||||
score += scorePerSec * scoreMultiplier
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
#Displays normal numbers until commas are needed
|
||||
if score > 999:
|
||||
$Score.text = str(scoreFormat(score))
|
||||
else:
|
||||
$Score.text = str(score) #Changes the score number
|
||||
|
||||
#This checks any input that comes in
|
||||
func _input(event):
|
||||
#Function to record every left click as a "Click" to add to the score
|
||||
if event.is_action_pressed("left_mouse"):
|
||||
_on_button_pressed()
|
||||
|
||||
#Formats the score string so commas are inserted
|
||||
func scoreFormat(score):
|
||||
# Convert value to string.
|
||||
var str_value: String = str(score)
|
||||
|
||||
# Loop backward starting at the last 3 digits,
|
||||
# add comma then, repeat every 3rd step.
|
||||
for i in range(str_value.length()-3, 0, -3):
|
||||
str_value = str_value.insert(i, ",")
|
||||
score = str_value
|
||||
return score
|
||||
|
||||
func _on_button_pressed():
|
||||
score += clickAdd * scoreMultiplier
|
||||
|
||||
func clickUpgrade(id):
|
||||
match id:
|
||||
0:
|
||||
if score >= clickUpgradeReq1:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq1
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt1
|
||||
else:
|
||||
print("not enough score")
|
||||
1:
|
||||
if score >= clickUpgradeReq10:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq10
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt10
|
||||
else:
|
||||
print("not enough score")
|
||||
2:
|
||||
if score >= clickUpgradeReq20:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq20
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt20
|
||||
else:
|
||||
print("not enough score")
|
||||
3:
|
||||
if score >= clickUpgradeReq40:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq40
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt40
|
||||
else:
|
||||
print("not enough score")
|
||||
4:
|
||||
if score >= clickUpgradeReq60:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq60
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt60
|
||||
else:
|
||||
print("not enough score")
|
||||
5:
|
||||
if score >= clickUpgradeReq80:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq80
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt80
|
||||
else:
|
||||
print("not enough score")
|
||||
6:
|
||||
if score >= clickUpgradeReq100:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq100
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt100
|
||||
else:
|
||||
print("not enough score")
|
||||
7:
|
||||
if score >= clickUpgradeReq200:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq200
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt200
|
||||
else:
|
||||
print("not enough score")
|
||||
8:
|
||||
if score >= clickUpgradeReq400:
|
||||
print ("Score sufficient")
|
||||
score -=clickUpgradeReq400
|
||||
$ClickUpgrades.get_popup().set_item_disabled(id, true)
|
||||
clickAdd += clickUpgradeAmt400
|
||||
else:
|
||||
print("not enough score")
|
||||
|
||||
func passiveUpgrade(id):
|
||||
match id:
|
||||
0:
|
||||
if score >= passiveUpgradeReq2:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq2
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt2
|
||||
else:
|
||||
print("not enough score")
|
||||
1:
|
||||
if score >= passiveUpgradeReq10:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq10
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt10
|
||||
else:
|
||||
print("not enough score")
|
||||
2:
|
||||
if score >= passiveUpgradeReq20:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq20
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt20
|
||||
else:
|
||||
print("not enough score")
|
||||
3:
|
||||
if score >= passiveUpgradeReq50:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq50
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt50
|
||||
else:
|
||||
print("not enough score")
|
||||
4:
|
||||
if score >= passiveUpgradeReq100:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq100
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt100
|
||||
else:
|
||||
print("not enough score")
|
||||
5:
|
||||
if score >= passiveUpgradeReq200:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq200
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt200
|
||||
else:
|
||||
print("not enough score")
|
||||
6:
|
||||
if score >= passiveUpgradeReq500:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq500
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt500
|
||||
else:
|
||||
print("not enough score")
|
||||
7:
|
||||
if score >= passiveUpgradeReq1000:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq1000
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt1000
|
||||
else:
|
||||
print("not enough score")
|
||||
8:
|
||||
if score >= passiveUpgradeReq10000:
|
||||
print ("Score sufficient")
|
||||
score -=passiveUpgradeReq10000
|
||||
$PassiveUpgrades.get_popup().set_item_disabled(id, true)
|
||||
scorePerSec = passiveUpgradeAmt10000
|
||||
else:
|
||||
print("not enough score")
|
||||
182
Game.tscn
182
Game.tscn
@@ -1,182 +0,0 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://xh0p6v5ir05f"]
|
||||
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_fof5y"]
|
||||
[ext_resource type="Script" path="res://UI.gd" id="1_rdmp6"]
|
||||
|
||||
[node name="Root" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_fof5y")
|
||||
|
||||
[node name="Header" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="UI" type="Control" parent="Header"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 40.0
|
||||
|
||||
[node name="PanelContainer" type="GridContainer" parent="Header/UI"]
|
||||
layout_mode = 0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 40.0
|
||||
columns = 5
|
||||
script = ExtResource("1_rdmp6")
|
||||
|
||||
[node name="ScoreLabel" type="Label" parent="Header/UI/PanelContainer"]
|
||||
layout_mode = 2
|
||||
text = "Score:"
|
||||
|
||||
[node name="Score" type="Label" parent="Header/UI/PanelContainer"]
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="Click" type="Button" parent="Header/UI/PanelContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
shortcut_in_tooltip = false
|
||||
text = "Click Me"
|
||||
flat = true
|
||||
|
||||
[node name="Timer" type="Timer" parent="Header/UI/PanelContainer"]
|
||||
autostart = true
|
||||
|
||||
[node name="ClickUpgrades" type="MenuButton" parent="Header/UI/PanelContainer"]
|
||||
layout_mode = 2
|
||||
text = "Click Upgrades"
|
||||
item_count = 9
|
||||
popup/item_0/text = "+1 Cost:10"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "+10 Cost: 100"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "+20 Cost:1,000"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "+40 Cost: 10,000"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "+60 Cost: 100,000"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "+80 Cost: 1,000,000"
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/text = "+100 Cost: 10,000,000"
|
||||
popup/item_6/id = 6
|
||||
popup/item_7/text = "+200 Cost: 100,000,000"
|
||||
popup/item_7/id = 7
|
||||
popup/item_8/text = "+400 Cost: 1,000,000,000"
|
||||
popup/item_8/id = 8
|
||||
|
||||
[node name="PassiveUpgrades" type="MenuButton" parent="Header/UI/PanelContainer"]
|
||||
layout_mode = 2
|
||||
text = "Passive Upgrades"
|
||||
item_count = 9
|
||||
popup/item_0/text = "2/s Cost: 100"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "10/s Cost: 1,000"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "20/s Cost: 10,000"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "50/s Cost: 100,000"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "100/s Cost:1,000,000"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "200/s Cost: 10,000,000"
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/text = "500/s Cost: 100,000,000"
|
||||
popup/item_6/id = 6
|
||||
popup/item_7/text = "1,000/s Cost: 1,000,000,000"
|
||||
popup/item_7/id = 7
|
||||
popup/item_8/text = "10,000/s Cost: 10,000,000,000"
|
||||
popup/item_8/id = 8
|
||||
|
||||
[node name="TeamButton" type="Button" parent="Header/UI/PanelContainer"]
|
||||
layout_mode = 2
|
||||
text = "Team"
|
||||
flat = true
|
||||
alignment = 0
|
||||
|
||||
[node name="Team" type="Panel" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 2.0
|
||||
offset_top = 40.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 648.0
|
||||
|
||||
[node name="GridContainer" type="GridContainer" parent="Team"]
|
||||
layout_mode = 0
|
||||
offset_left = 63.0
|
||||
offset_top = 109.0
|
||||
offset_right = 1150.0
|
||||
offset_bottom = 609.0
|
||||
columns = 5
|
||||
|
||||
[node name="TeamMember1" type="Button" parent="Team/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Add Team Here++++++
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
"
|
||||
|
||||
[node name="TeamMember2" type="Button" parent="Team/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Add Team Here++++++"
|
||||
|
||||
[node name="TeamMember3" type="Button" parent="Team/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Add Team Here++++++"
|
||||
|
||||
[node name="TeamMember4" type="Button" parent="Team/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Add Team Here++++++"
|
||||
|
||||
[node name="TeamMember5" type="Button" parent="Team/GridContainer"]
|
||||
layout_mode = 2
|
||||
text = "Add Team Here++++++"
|
||||
|
||||
[node name="MemberInventory" type="ColorRect" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 2.0
|
||||
offset_top = 40.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 649.0
|
||||
color = Color(0.219501, 0.219501, 0.219501, 1)
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="MemberInventory"]
|
||||
layout_mode = 0
|
||||
offset_right = 1150.0
|
||||
offset_bottom = 608.0
|
||||
|
||||
[node name="user Int" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="MemberInterface" type="Control" parent="user Int"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 0
|
||||
offset_left = 21.2617
|
||||
offset_top = 125.673
|
||||
offset_right = 61.2617
|
||||
offset_bottom = 165.673
|
||||
|
||||
[node name="MemberInventory" type="PanelContainer" parent="user Int/MemberInterface"]
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
20
Global.gd
20
Global.gd
@@ -26,9 +26,9 @@ var damagePerSecMember1: int = 0
|
||||
var damagePerClickMember1: int = 0
|
||||
var damageMultiplierMember1: int = 1
|
||||
##Textures
|
||||
var texture_member1 : Texture = null
|
||||
var texture_member1 = ""
|
||||
# Function to set texture for member 1
|
||||
func set_texture1(texture: Texture):
|
||||
func set_texture1(texture: String):
|
||||
texture_member1 = texture
|
||||
|
||||
# Function to get texture for member 1
|
||||
@@ -41,9 +41,9 @@ var damagePerSecMember2: int = 0
|
||||
var damagePerClickMember2: int = 0
|
||||
var damageMultiplierMember2: int = 1
|
||||
|
||||
var texture_member2 : Texture = null
|
||||
var texture_member2 = ""
|
||||
# Function to set texture for member 2
|
||||
func set_texture2(texture: Texture):
|
||||
func set_texture2(texture: String):
|
||||
texture_member2 = texture
|
||||
|
||||
# Function to get texture for member 2
|
||||
@@ -56,9 +56,9 @@ var damagePerSecMember3: int = 0
|
||||
var damagePerClickMember3: int = 0
|
||||
var damageMultiplierMember3: int = 1
|
||||
|
||||
var texture_member3 : Texture = null
|
||||
var texture_member3 = ""
|
||||
# Function to set texture for member 3
|
||||
func set_texture3(texture: Texture):
|
||||
func set_texture3(texture: String):
|
||||
texture_member3 = texture
|
||||
|
||||
# Function to get texture for member 3
|
||||
@@ -70,9 +70,9 @@ func get_texture3() -> Texture:
|
||||
var damagePerSecMember4: int = 0
|
||||
var damagePerClickMember4: int = 0
|
||||
var damageMultiplierMember4: int = 1
|
||||
var texture_member4 : Texture = null
|
||||
var texture_member4 = ""
|
||||
# Function to set texture for member 4
|
||||
func set_texture4(texture: Texture):
|
||||
func set_texture4(texture: String):
|
||||
texture_member4 = texture
|
||||
|
||||
# Function to get texture for member 4
|
||||
@@ -84,9 +84,9 @@ func get_texture4() -> Texture:
|
||||
var damagePerSecMember5: int = 0
|
||||
var damagePerClickMember5: int = 0
|
||||
var damageMultiplierMember5: int = 1
|
||||
var texture_member5 : Texture = null
|
||||
var texture_member5 = ""
|
||||
# Function to set texture for member 5
|
||||
func set_texture5(texture: Texture):
|
||||
func set_texture5(texture: String):
|
||||
texture_member5 = texture
|
||||
|
||||
# Function to get texture for member 5
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
[gd_resource type="Resource" script_class="InventoryData" load_steps=7 format=3 uid="uid://cvuvn1voknqbj"]
|
||||
|
||||
[ext_resource type="Script" path="res://MemberInventory/Inventory_Data.gd" id="1_pvibr"]
|
||||
[ext_resource type="Resource" path="res://Member/Members/apple.tres" id="2_aboym"]
|
||||
[ext_resource type="Script" path="res://MemberInventory/Slot_Data.gd" id="3_22rk4"]
|
||||
[ext_resource type="Resource" path="res://Member/Members/blue_book.tres" id="4_fg6vr"]
|
||||
|
||||
[sub_resource type="Resource" id="Resource_vnpe5"]
|
||||
script = ExtResource("3_22rk4")
|
||||
memberData = ExtResource("2_aboym")
|
||||
quantity = 11
|
||||
|
||||
[sub_resource type="Resource" id="Resource_cm5vi"]
|
||||
script = ExtResource("3_22rk4")
|
||||
memberData = ExtResource("4_fg6vr")
|
||||
quantity = 5
|
||||
|
||||
[resource]
|
||||
script = ExtResource("1_pvibr")
|
||||
slot_datas = Array[ExtResource("3_22rk4")]([null, null, SubResource("Resource_vnpe5"), null, null, null, SubResource("Resource_cm5vi"), null, null, null, null, null, null, null, null, null, null, null])
|
||||
@@ -1,611 +0,0 @@
|
||||
extends Node
|
||||
const Rarity = {
|
||||
"COMMON":0.8,
|
||||
"UNCOMMON": 0.4,
|
||||
"RARE": 0.2,
|
||||
"SUPERRARE": 0.1,
|
||||
"LEGENDARY": 0.05
|
||||
}
|
||||
|
||||
var members = {
|
||||
"squire": {
|
||||
"name": "Squire",
|
||||
"description": "Someone who does things for someone else, not very impressive.",
|
||||
"perSec": 1,
|
||||
"clickAdd": 1,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": true,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Squire.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"archer": {
|
||||
"name": "Archer",
|
||||
"description": "Better at accurate clicks than consistent damage",
|
||||
"perSec": 2,
|
||||
"clickAdd": 2,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Archer.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"mage": {
|
||||
"name": "Mage",
|
||||
"description": "A good mix of DPS and click power",
|
||||
"perSec": 3,
|
||||
"clickAdd": 3,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Mage.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"warrior": {
|
||||
"name": "Warrior",
|
||||
"description": "Strong and brave fighter",
|
||||
"perSec": 4,
|
||||
"clickAdd": 4,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Warrior.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"healer": {
|
||||
"name": "Healer",
|
||||
"description": "Skilled in healing magic",
|
||||
"perSec": 5,
|
||||
"clickAdd": 5,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Healer.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"knight": {
|
||||
"name": "Knight",
|
||||
"description": "Valiant defender of the realm",
|
||||
"perSec": 6,
|
||||
"clickAdd": 6,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Knight.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"assassin": {
|
||||
"name": "Assassin",
|
||||
"description": "Expert in stealth and quick kills",
|
||||
"perSec": 7,
|
||||
"clickAdd": 7,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Assassin.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"paladin": {
|
||||
"name": "Paladin",
|
||||
"description": "Holy warrior with healing abilities",
|
||||
"perSec": 8,
|
||||
"clickAdd": 8,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Paladin.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"ranger": {
|
||||
"name": "Ranger",
|
||||
"description": "Skilled in ranged combat and survival",
|
||||
"perSec": 9,
|
||||
"clickAdd": 9,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Ranger.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"bard": {
|
||||
"name": "Bard",
|
||||
"description": "Musical magician with supportive abilities",
|
||||
"perSec": 10,
|
||||
"clickAdd": 10,
|
||||
"scoreMultiplier": 1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Bard.png",
|
||||
"tier": 1,
|
||||
"rarity": Rarity.COMMON
|
||||
},
|
||||
"crusader": {
|
||||
"name": "Crusader",
|
||||
"description": "Devout warrior on a holy quest",
|
||||
"perSec": 11,
|
||||
"clickAdd": 11,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Crusader.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"druid": {
|
||||
"name": "Druid",
|
||||
"description": "Nature mage with control over the elements",
|
||||
"perSec": 12,
|
||||
"clickAdd": 12,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Druid.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"samurai": {
|
||||
"name": "Samurai",
|
||||
"description": "Noble warrior with unmatched skill",
|
||||
"perSec": 13,
|
||||
"clickAdd": 13,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Samurai.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"ninja": {
|
||||
"name": "Ninja",
|
||||
"description": "Stealthy assassin with deadly precision",
|
||||
"perSec": 14,
|
||||
"clickAdd": 14,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Ninja.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"summoner": {
|
||||
"name": "Summoner",
|
||||
"description": "Mage with the ability to summon creatures",
|
||||
"perSec": 15,
|
||||
"clickAdd": 15,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Summoner.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"shaman": {
|
||||
"name": "Shaman",
|
||||
"description": "Spiritual healer and magic user",
|
||||
"perSec": 16,
|
||||
"clickAdd": 16,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Shaman.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"necromancer": {
|
||||
"name": "Necromancer",
|
||||
"description": "Dark mage with control over the dead",
|
||||
"perSec": 17,
|
||||
"clickAdd": 17,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Necromancer.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"berserker": {
|
||||
"name": "Berserker",
|
||||
"description": "Fierce warrior with unstoppable rage",
|
||||
"perSec": 18,
|
||||
"clickAdd": 18,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Berserker.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"monk": {
|
||||
"name": "Monk",
|
||||
"description": "Master of martial arts and inner peace",
|
||||
"perSec": 19,
|
||||
"clickAdd": 19,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Monk.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"alchemist": {
|
||||
"name": "Alchemist",
|
||||
"description": "Skilled in the art of potion-making",
|
||||
"perSec": 20,
|
||||
"clickAdd": 20,
|
||||
"scoreMultiplier": 1.1,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Alchemist.png",
|
||||
"tier": 2,
|
||||
"rarity": Rarity.UNCOMMON
|
||||
},
|
||||
"barbarian": {
|
||||
"name": "Barbarian",
|
||||
"description": "Savage warrior with immense strength",
|
||||
"perSec": 21,
|
||||
"clickAdd": 21,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Barbarian.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"illusionist": {
|
||||
"name": "Illusionist",
|
||||
"description": "Mage with mastery over illusions",
|
||||
"perSec": 22,
|
||||
"clickAdd": 22,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Illusionist.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"warlock": {
|
||||
"name": "Warlock",
|
||||
"description": "Dark mage with forbidden knowledge",
|
||||
"perSec": 23,
|
||||
"clickAdd": 23,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Warlock.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"pirate": {
|
||||
"name": "Pirate",
|
||||
"description": "Swashbuckling rogue of the seas",
|
||||
"perSec": 24,
|
||||
"clickAdd": 24,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Pirate.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"gladiator": {
|
||||
"name": "Gladiator",
|
||||
"description": "Champion of the arena",
|
||||
"perSec": 25,
|
||||
"clickAdd": 25,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Gladiator.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"rune_master": {
|
||||
"name": "Rune Master",
|
||||
"description": "Mage with mastery over runic magic",
|
||||
"perSec": 26,
|
||||
"clickAdd": 26,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Rune_Master.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"beastmaster": {
|
||||
"name": "Beastmaster",
|
||||
"description": "Warrior with control over beasts",
|
||||
"perSec": 27,
|
||||
"clickAdd": 27,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Beastmaster.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"elementalist": {
|
||||
"name": "Elementalist",
|
||||
"description": "Mage with control over the elements",
|
||||
"perSec": 28,
|
||||
"clickAdd": 28,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Elementalist.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"shadow_knight": {
|
||||
"name": "Shadow Knight",
|
||||
"description": "Dark warrior with control over shadows",
|
||||
"perSec": 29,
|
||||
"clickAdd": 29,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Shadow_Knight.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"archmage": {
|
||||
"name": "Archmage",
|
||||
"description": "Supreme master of magical arts",
|
||||
"perSec": 30,
|
||||
"clickAdd": 30,
|
||||
"scoreMultiplier": 1.2,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Archmage.png",
|
||||
"tier": 3,
|
||||
"rarity": Rarity.RARE
|
||||
},
|
||||
"dark_paladin": {
|
||||
"name": "Dark Paladin",
|
||||
"description": "Corrupted knight with dark powers",
|
||||
"perSec": 31,
|
||||
"clickAdd": 31,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Dark_Paladin.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"demon_hunter": {
|
||||
"name": "Demon Hunter",
|
||||
"description": "Expert in slaying demonic creatures",
|
||||
"perSec": 32,
|
||||
"clickAdd": 32,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Demon_Hunter.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"spirit_guardian": {
|
||||
"name": "Spirit Guardian",
|
||||
"description": "Protector of the spiritual realm",
|
||||
"perSec": 33,
|
||||
"clickAdd": 33,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Spirit_Guardian.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"phoenix": {
|
||||
"name": "Phoenix",
|
||||
"description": "Immortal bird of fire and rebirth",
|
||||
"perSec": 34,
|
||||
"clickAdd": 34,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Phoenix.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"dragon_rider": {
|
||||
"name": "Dragon Rider",
|
||||
"description": "Warrior who rides a mighty dragon",
|
||||
"perSec": 35,
|
||||
"clickAdd": 35,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Dragon_Rider.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"soul_reaper": {
|
||||
"name": "Soul Reaper",
|
||||
"description": "Harvester of souls from the afterlife",
|
||||
"perSec": 36,
|
||||
"clickAdd": 36,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Soul_Reaper.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"stormcaller": {
|
||||
"name": "Stormcaller",
|
||||
"description": "Mage with control over storms",
|
||||
"perSec": 37,
|
||||
"clickAdd": 37,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Stormcaller.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"blade_dancer": {
|
||||
"name": "Blade Dancer",
|
||||
"description": "Agile warrior with deadly precision",
|
||||
"perSec": 38,
|
||||
"clickAdd": 38,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Blade_Dancer.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"celestial_mage": {
|
||||
"name": "Celestial Mage",
|
||||
"description": "Mage with power over celestial bodies",
|
||||
"perSec": 39,
|
||||
"clickAdd": 39,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Celestial_Mage.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"void_walker": {
|
||||
"name": "Void Walker",
|
||||
"description": "Mage with control over void magic",
|
||||
"perSec": 40,
|
||||
"clickAdd": 40,
|
||||
"scoreMultiplier": 1.3,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Void_Walker.png",
|
||||
"tier": 4,
|
||||
"rarity": Rarity.SUPERRARE
|
||||
},
|
||||
"eternal_knight": {
|
||||
"name": "Eternal Knight",
|
||||
"description": "Immortal protector of the realm",
|
||||
"perSec": 41,
|
||||
"clickAdd": 41,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Eternal_Knight.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"chaos_warrior": {
|
||||
"name": "Chaos Warrior",
|
||||
"description": "Warrior with control over chaos",
|
||||
"perSec": 42,
|
||||
"clickAdd": 42,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Chaos_Warrior.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"starfall_mage": {
|
||||
"name": "Starfall Mage",
|
||||
"description": "Mage with control over falling stars",
|
||||
"perSec": 43,
|
||||
"clickAdd": 43,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Starfall_Mage.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"abyssal_warlock": {
|
||||
"name": "Abyssal Warlock",
|
||||
"description": "Dark mage with control over the abyss",
|
||||
"perSec": 44,
|
||||
"clickAdd": 44,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Abyssal_Warlock.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"lunar_knight": {
|
||||
"name": "Lunar Knight",
|
||||
"description": "Warrior with power over the moon",
|
||||
"perSec": 45,
|
||||
"clickAdd": 45,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Lunar_Knight.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"cosmic_mage": {
|
||||
"name": "Cosmic Mage",
|
||||
"description": "Mage with control over cosmic energy",
|
||||
"perSec": 46,
|
||||
"clickAdd": 46,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Cosmic_Mage.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"shadow_assassin": {
|
||||
"name": "Shadow Assassin",
|
||||
"description": "Master assassin with control over shadows",
|
||||
"perSec": 47,
|
||||
"clickAdd": 47,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Shadow_Assassin.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"firelord": {
|
||||
"name": "Firelord",
|
||||
"description": "Mage with mastery over fire",
|
||||
"perSec": 48,
|
||||
"clickAdd": 48,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Firelord.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"ice_queen": {
|
||||
"name": "Ice Queen",
|
||||
"description": "Mage with mastery over ice",
|
||||
"perSec": 49,
|
||||
"clickAdd": 49,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Ice_Queen.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
},
|
||||
"celeste_the_starcaller": {
|
||||
"name": "Celeste the Starcaller",
|
||||
"description": "Mage with control over stars",
|
||||
"perSec": 50,
|
||||
"clickAdd": 50,
|
||||
"scoreMultiplier": 1.4,
|
||||
"isObtained": false,
|
||||
"memberAmount": 1,
|
||||
"texturePath": "res://Images/Members/Celeste_the_Starcaller.png",
|
||||
"tier": 5,
|
||||
"rarity": Rarity.LEGENDARY
|
||||
}
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
extends Resource
|
||||
class_name InventoryData
|
||||
|
||||
@export var slot_datas: Array[Slot_Data]
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
extends Resource
|
||||
class_name Slot_Data
|
||||
|
||||
const MAX_STACK_SIZE: int = 99
|
||||
|
||||
@export var memberData: Member_Data
|
||||
@export_range(1, MAX_STACK_SIZE) var quantity: int = 1: set = set_quantity
|
||||
|
||||
func set_quantity(value: int) -> void:
|
||||
quantity = value
|
||||
if quantity > 1 and not memberData.stackable:
|
||||
quantity = 1
|
||||
push_error("%s is not stackable, setting quantity to 1" % memberData.name)
|
||||
|
||||
33
Root.gd
33
Root.gd
@@ -8,39 +8,6 @@ func _ready():
|
||||
|
||||
pass
|
||||
#User Data copy if needed
|
||||
var files_to_copy = [
|
||||
"MemberDatabase/memberData.json",
|
||||
"Boss/bossData.json"
|
||||
]
|
||||
|
||||
var user_directory = OS.get_user_data_dir()
|
||||
|
||||
|
||||
func copy_file_if_not_exists(file_name: String):
|
||||
var user_file_path = "user://" + file_name
|
||||
if not FileAccess.file_exists(user_file_path):
|
||||
var res_file_path = "res://" + file_name
|
||||
if FileAccess.file_exists(res_file_path):
|
||||
var file = FileAccess.open(res_file_path, FileAccess.READ)
|
||||
if file:
|
||||
var data = file.get_as_text()
|
||||
file.close()
|
||||
|
||||
# Write to user:// directory
|
||||
var user_file = FileAccess.open(user_file_path, FileAccess.WRITE)
|
||||
if user_file:
|
||||
user_file.store_string(data)
|
||||
user_file.close()
|
||||
print("Copied ", file_name, " to user:// directory.")
|
||||
else:
|
||||
print("Failed to open destination file: ", user_file_path)
|
||||
user_file.get_open_error()
|
||||
else:
|
||||
print("Failed to open source file: ", res_file_path)
|
||||
else:
|
||||
print("Source file ", res_file_path, " not found.")
|
||||
else:
|
||||
print("File ", user_file_path, " already exists.")
|
||||
|
||||
|
||||
|
||||
|
||||
26
Save/saveData.json
Normal file
26
Save/saveData.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"damagePerClick": 1,
|
||||
"damagePerSec": 1,
|
||||
"damageMultiplier": 1,
|
||||
"totalDamage": 0,
|
||||
"damagePerSecMember1": 0,
|
||||
"damagePerClickMember1": 0,
|
||||
"damageMultiplierMember1": 1,
|
||||
"textureMember1": "",
|
||||
"damagePerSecMember2": 0,
|
||||
"damagePerClickMember2": 0,
|
||||
"damageMultiplierMember2": 1,
|
||||
"textureMember2": "",
|
||||
"damagePerSecMember3": 0,
|
||||
"damagePerClickMember3": 0,
|
||||
"damageMultiplierMember3": 1,
|
||||
"textureMember3": "",
|
||||
"damagePerSecMember4": 0,
|
||||
"damagePerClickMember4": 0,
|
||||
"damageMultiplierMember4": 1,
|
||||
"textureMember4": "",
|
||||
"damagePerSecMember5": 0,
|
||||
"damagePerClickMember5": 0,
|
||||
"damageMultiplierMember5": 1,
|
||||
"textureMember5": ""
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://xh0p6v5ir05f"]
|
||||
[gd_scene load_steps=6 format=3 uid="uid://xh0p6v5ir05f"]
|
||||
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_dtx5s"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_g0muc"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="3_q5rri"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_7wp2t"]
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_lggo0"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="2_o6t6l"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_1o3gu"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_3csg5"]
|
||||
[ext_resource type="Script" path="res://Scenes/saveTimer.gd" id="5_85eop"]
|
||||
|
||||
[node name="Root" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -14,7 +15,7 @@ offset_right = 768.0
|
||||
offset_bottom = 432.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_dtx5s")
|
||||
script = ExtResource("1_lggo0")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
anchors_preset = 0
|
||||
@@ -27,17 +28,17 @@ offset_bottom = 1080.0
|
||||
offset_left = 3.0
|
||||
offset_right = 395.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("3_q5rri")
|
||||
script = ExtResource("2_o6t6l")
|
||||
|
||||
[node name="ScoreLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="ScoreLabel" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "Score:"
|
||||
|
||||
[node name="Score" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="Score" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="Timer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
[node name="Timer" type="Timer" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
autostart = true
|
||||
|
||||
[node name="ClickUpgrades" type="MenuButton" parent="UI/CanvasLayer/Header"]
|
||||
@@ -93,37 +94,42 @@ layout_mode = 2
|
||||
text = "Team"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("3_g0muc")
|
||||
script = ExtResource("3_1o3gu")
|
||||
|
||||
[node name="Bossbutton" type="Button" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
text = "Bosses"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("4_7wp2t")
|
||||
script = ExtResource("4_3csg5")
|
||||
|
||||
[node name="ClickAddLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="ClickAddLabel" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "ClickAdd:"
|
||||
|
||||
[node name="ClickAdd" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="ClickAdd" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="PerSecLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="PerSecLabel" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "PerSec:
|
||||
"
|
||||
|
||||
[node name="PerSec" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="PerSec" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="MultiplierLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="MultiplierLabel" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "Multiplier:
|
||||
"
|
||||
|
||||
[node name="Multiplier" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
[node name="Multiplier" type="Label" parent="UI/CanvasLayer/Header" groups=["Persist"]]
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="saveTimer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
script = ExtResource("5_85eop")
|
||||
@@ -1,12 +1,13 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://2xiybbxvsdwi"]
|
||||
[gd_scene load_steps=9 format=3 uid="uid://2xiybbxvsdwi"]
|
||||
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_dq55c"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="2_e5bkm"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_2wxqa"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_0lt4t"]
|
||||
[ext_resource type="Script" path="res://User Interface/BossGrid.gd" id="5_1d3gb"]
|
||||
[ext_resource type="Script" path="res://User Interface/Boss1.gd" id="6_pp6ep"]
|
||||
[ext_resource type="Script" path="res://User Interface/CharacterRoll.gd" id="7_7lppr"]
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_woypb"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="2_0hr4q"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_e754c"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_sjkwo"]
|
||||
[ext_resource type="Script" path="res://User Interface/BossGrid.gd" id="5_8idyi"]
|
||||
[ext_resource type="Script" path="res://Scenes/saveTimer.gd" id="5_wpe6x"]
|
||||
[ext_resource type="Script" path="res://User Interface/Boss1.gd" id="6_ea00f"]
|
||||
[ext_resource type="Script" path="res://User Interface/CharacterRoll.gd" id="7_jle1x"]
|
||||
|
||||
[node name="Root" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -17,7 +18,7 @@ offset_right = 768.0
|
||||
offset_bottom = 432.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_dq55c")
|
||||
script = ExtResource("1_woypb")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
anchors_preset = 0
|
||||
@@ -30,7 +31,7 @@ offset_bottom = 1080.0
|
||||
offset_left = 3.0
|
||||
offset_right = 395.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2_e5bkm")
|
||||
script = ExtResource("2_0hr4q")
|
||||
|
||||
[node name="ScoreLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -96,14 +97,14 @@ layout_mode = 2
|
||||
text = "Team"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("3_2wxqa")
|
||||
script = ExtResource("3_e754c")
|
||||
|
||||
[node name="Bossbutton" type="Button" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
text = "Bosses"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("4_0lt4t")
|
||||
script = ExtResource("4_sjkwo")
|
||||
|
||||
[node name="ClickAddLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -131,6 +132,11 @@ text = "Multiplier:
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="saveTimer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
script = ExtResource("5_wpe6x")
|
||||
|
||||
[node name="BossFights" type="PanelContainer" parent="UI"]
|
||||
layout_mode = 0
|
||||
offset_left = 857.0
|
||||
@@ -140,13 +146,13 @@ offset_bottom = 422.0
|
||||
|
||||
[node name="BossGrid" type="GridContainer" parent="UI/BossFights"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("5_1d3gb")
|
||||
script = ExtResource("5_8idyi")
|
||||
|
||||
[node name="Boss1" type="TextureButton" parent="UI/BossFights/BossGrid"]
|
||||
layout_mode = 2
|
||||
script = ExtResource("6_pp6ep")
|
||||
script = ExtResource("6_ea00f")
|
||||
|
||||
[node name="CharacterRoll" type="PanelContainer" parent="UI/BossFights/BossGrid"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
script = ExtResource("7_7lppr")
|
||||
script = ExtResource("7_jle1x")
|
||||
123
Scenes/saveTimer.gd
Normal file
123
Scenes/saveTimer.gd
Normal file
@@ -0,0 +1,123 @@
|
||||
extends Timer
|
||||
|
||||
var save_data = {}
|
||||
|
||||
|
||||
func saveGame():
|
||||
#var save_game = FileAccess.open("user://Save/savegame.save", FileAccess.WRITE)
|
||||
#var save_nodes = get_tree().get_nodes_in_group("Persist")
|
||||
#for node in save_nodes:
|
||||
#if node.scene_file_path.is_empty():
|
||||
#print("persistent node '%s' is not an instanced scene, skipped" % node.name)
|
||||
#continue
|
||||
#
|
||||
## Check the node has a save function.
|
||||
#if !node.has_method("save"):
|
||||
#print("persistent node '%s' is missing a save() function, skipped" % node.name)
|
||||
#continue
|
||||
#
|
||||
## Call the node's save function.
|
||||
#var node_data = node.call("save")
|
||||
#
|
||||
## JSON provides a static method to serialized JSON string.
|
||||
#var json_string = JSON.stringify(node_data)
|
||||
#
|
||||
## Store the save dictionary as a new line in the save file.
|
||||
#save_game.store_line(json_string)
|
||||
|
||||
#func save():
|
||||
#var save_dict = {
|
||||
#"filename" : get_scene_file_path(),
|
||||
#"parent" : get_parent().get_path(),
|
||||
#"damagePerClick" : Global.globalDamagePerClick,
|
||||
#"damagePerSec" : Global.globalDamagePerSec,
|
||||
#"damageMultiplier" : Global.globalDamageMultiplier,
|
||||
#"totalDamage" : Global.globalDamage
|
||||
#}
|
||||
|
||||
var file_path = "user://Save/saveData.json"
|
||||
var file = FileAccess.open(file_path, FileAccess.WRITE)
|
||||
if file:
|
||||
var json_text = JSON.stringify(save_data)
|
||||
file.store_string(json_text)
|
||||
file.close()
|
||||
print("Game Data Saved")
|
||||
else:
|
||||
print("Failed to open file: ", file_path)
|
||||
|
||||
func load_save_data():
|
||||
|
||||
#If using json
|
||||
var file = FileAccess.open("user://Save/saveData.json", FileAccess.READ)
|
||||
#var file = FileAccess.open("user://memberData.json", FileAccess.READ)
|
||||
if file:
|
||||
var json_text = file.get_as_text()
|
||||
#print (json_text)
|
||||
file.close()
|
||||
|
||||
var json = JSON.new()
|
||||
var json_result = json.parse(json_text)
|
||||
#print (json_result)
|
||||
|
||||
if json_result == OK:
|
||||
save_data = json.get_data()
|
||||
print("Save data loaded successfully.")
|
||||
#print(character_data)
|
||||
else:
|
||||
print("Failed to parse JSON: ", json_result.error_string)
|
||||
else:
|
||||
print("Save data file not found.")
|
||||
|
||||
|
||||
func _ready():
|
||||
# Initialize data or load from file if necessary
|
||||
#$saveTimer.connect("timeout", _on_Timer_timeout)
|
||||
connect("timeout", _on_Timer_timeout)
|
||||
#var current_scene = get_tree().current_scene
|
||||
#if current_scene:
|
||||
## Verify the saveTimer node exists in the current scene
|
||||
#var timer_node = current_scene.get_node("saveTimer") # Adjust the path as necessary
|
||||
#if timer_node:
|
||||
#print("Timer node found: ", timer_node)
|
||||
#timer_node.connect("timeout", _on_Timer_timeout)
|
||||
#timer_node.start()
|
||||
#else:
|
||||
#print("saveTimer node not found")
|
||||
#else:
|
||||
#print("Current scene not found")
|
||||
|
||||
func _on_Timer_timeout():
|
||||
load_save_data()
|
||||
save_data["damagePerClick"] = Global.globalDamagePerClick
|
||||
save_data["damagePerSec"] = Global.globalDamagePerSec
|
||||
save_data["damageMultiplier"] = Global.globalDamageMultiplier
|
||||
save_data["totalDamage"] = Global.globalDamage
|
||||
save_data["damagePerSecMember1"] = Global.damagePerSecMember1
|
||||
save_data["damagePerClickMember1"] = Global.damagePerClickMember1
|
||||
save_data["damageMultiplierMember1"] = Global.damageMultiplierMember1
|
||||
if Global.texture_member1:
|
||||
save_data["textureMember1"] = Global.texture_member1
|
||||
save_data["damagePerSecMember2"] = Global.damagePerSecMember2
|
||||
save_data["damagePerClickMember2"] = Global.damagePerClickMember2
|
||||
save_data["damageMultiplierMember2"] = Global.damageMultiplierMember2
|
||||
if Global.texture_member2:
|
||||
save_data["textureMember2"] = Global.texture_member2
|
||||
save_data["damagePerSecMember3"] = Global.damagePerSecMember3
|
||||
save_data["damagePerClickMember3"] = Global.damagePerClickMember3
|
||||
save_data["damageMultiplierMember3"] = Global.damageMultiplierMember3
|
||||
if Global.texture_member3:
|
||||
save_data["textureMember3"] = Global.texture_member3
|
||||
save_data["damagePerSecMember4"] = Global.damagePerSecMember4
|
||||
save_data["damagePerClickMember4"] = Global.damagePerClickMember4
|
||||
save_data["damageMultiplierMember4"] = Global.damageMultiplierMember4
|
||||
if Global.texture_member4:
|
||||
save_data["textureMember4"] = Global.texture_member4
|
||||
save_data["damagePerSecMember5"] = Global.damagePerSecMember5
|
||||
save_data["damagePerClickMember5"] = Global.damagePerClickMember5
|
||||
save_data["damageMultiplierMember5"] = Global.damageMultiplierMember5
|
||||
if Global.texture_member5:
|
||||
save_data["textureMember5"] = Global.texture_member5
|
||||
saveGame()
|
||||
func _process(delta):
|
||||
|
||||
pass
|
||||
16
Scenes/savemanager.tscn
Normal file
16
Scenes/savemanager.tscn
Normal file
@@ -0,0 +1,16 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b70r8ttk10fgd"]
|
||||
|
||||
[ext_resource type="Script" path="res://Scenes/saveTimer.gd" id="1_5di46"]
|
||||
|
||||
[node name="saveManager" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="saveTimer" type="Timer" parent="."]
|
||||
wait_time = 60.0
|
||||
autostart = true
|
||||
script = ExtResource("1_5di46")
|
||||
@@ -1,15 +1,15 @@
|
||||
[gd_scene load_steps=11 format=3 uid="uid://blwuy4v4qqyna"]
|
||||
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="1_ldil2"]
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_mv0o0"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="2_nwe87"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="3_c1mhp"]
|
||||
[ext_resource type="Script" path="res://User Interface/AspectRatioContainer.gd" id="4_eqraq"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member1.gd" id="5_574fx"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member2.gd" id="6_a2aw7"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member3.gd" id="7_o40hd"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member4.gd" id="8_0l7ds"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member5.gd" id="9_yaflp"]
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_6ykb6"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="2_63y2i"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_yy4wh"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_nmd48"]
|
||||
[ext_resource type="Script" path="res://Scenes/saveTimer.gd" id="5_6vp5u"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member1.gd" id="6_dqecs"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member2.gd" id="7_ddddf"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member3.gd" id="8_d2bof"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member4.gd" id="9_2ploj"]
|
||||
[ext_resource type="Script" path="res://User Interface/Member5.gd" id="10_vu24c"]
|
||||
|
||||
[node name="Root" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -18,7 +18,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_mv0o0")
|
||||
script = ExtResource("1_6ykb6")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
layout_mode = 3
|
||||
@@ -32,7 +32,7 @@ offset_bottom = 1080.0
|
||||
offset_left = 3.0
|
||||
offset_right = 395.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("1_ldil2")
|
||||
script = ExtResource("2_63y2i")
|
||||
|
||||
[node name="ScoreLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -45,67 +45,19 @@ text = "0"
|
||||
[node name="Timer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
autostart = true
|
||||
|
||||
[node name="ClickUpgrades" type="MenuButton" parent="UI/CanvasLayer/Header"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
text = "Click Upgrades"
|
||||
item_count = 9
|
||||
popup/item_0/text = "+1 Cost:10"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "+10 Cost: 100"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "+20 Cost:1,000"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "+40 Cost: 10,000"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "+60 Cost: 100,000"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "+80 Cost: 1,000,000"
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/text = "+100 Cost: 10,000,000"
|
||||
popup/item_6/id = 6
|
||||
popup/item_7/text = "+200 Cost: 100,000,000"
|
||||
popup/item_7/id = 7
|
||||
popup/item_8/text = "+400 Cost: 1,000,000,000"
|
||||
popup/item_8/id = 8
|
||||
|
||||
[node name="PassiveUpgrades" type="MenuButton" parent="UI/CanvasLayer/Header"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
text = "Passive Upgrades"
|
||||
item_count = 9
|
||||
popup/item_0/text = "2/s Cost: 100"
|
||||
popup/item_0/id = 0
|
||||
popup/item_1/text = "10/s Cost: 1,000"
|
||||
popup/item_1/id = 1
|
||||
popup/item_2/text = "20/s Cost: 10,000"
|
||||
popup/item_2/id = 2
|
||||
popup/item_3/text = "50/s Cost: 100,000"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "100/s Cost:1,000,000"
|
||||
popup/item_4/id = 4
|
||||
popup/item_5/text = "200/s Cost: 10,000,000"
|
||||
popup/item_5/id = 5
|
||||
popup/item_6/text = "500/s Cost: 100,000,000"
|
||||
popup/item_6/id = 6
|
||||
popup/item_7/text = "1,000/s Cost: 1,000,000,000"
|
||||
popup/item_7/id = 7
|
||||
popup/item_8/text = "10,000/s Cost: 10,000,000,000"
|
||||
popup/item_8/id = 8
|
||||
|
||||
[node name="TeamButton" type="Button" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
text = "Team"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("2_nwe87")
|
||||
script = ExtResource("3_yy4wh")
|
||||
|
||||
[node name="Bossbutton" type="Button" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
text = "Bosses"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("3_c1mhp")
|
||||
script = ExtResource("4_nmd48")
|
||||
|
||||
[node name="ClickAddLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -133,55 +85,59 @@ text = "Multiplier:
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="saveTimer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
script = ExtResource("5_6vp5u")
|
||||
|
||||
[node name="AspectRatioContainer" type="AspectRatioContainer" parent="UI"]
|
||||
layout_mode = 0
|
||||
offset_left = -2.60654
|
||||
offset_top = 271.396
|
||||
offset_right = 1917.39
|
||||
offset_bottom = 800.396
|
||||
script = ExtResource("4_eqraq")
|
||||
offset_left = -3.0
|
||||
offset_top = 40.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 648.0
|
||||
|
||||
[node name="TeamScreen" type="HBoxContainer" parent="UI/AspectRatioContainer"]
|
||||
visibility_layer = 2
|
||||
layout_mode = 2
|
||||
alignment = 1
|
||||
|
||||
[node name="Member1" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
[node name="Member1" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen" groups=["Persist"]]
|
||||
custom_minimum_size = Vector2(200, 10)
|
||||
layout_mode = 2
|
||||
script = ExtResource("5_574fx")
|
||||
script = ExtResource("6_dqecs")
|
||||
|
||||
[node name="VSeparator" type="VSeparator" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Member2" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
[node name="Member2" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen" groups=["Persist"]]
|
||||
custom_minimum_size = Vector2(200, 10)
|
||||
layout_mode = 2
|
||||
script = ExtResource("6_a2aw7")
|
||||
script = ExtResource("7_ddddf")
|
||||
|
||||
[node name="VSeparator2" type="VSeparator" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Member3" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
[node name="Member3" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen" groups=["Persist"]]
|
||||
custom_minimum_size = Vector2(200, 10)
|
||||
layout_mode = 2
|
||||
script = ExtResource("7_o40hd")
|
||||
script = ExtResource("8_d2bof")
|
||||
|
||||
[node name="VSeparator3" type="VSeparator" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Member4" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
[node name="Member4" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen" groups=["Persist"]]
|
||||
custom_minimum_size = Vector2(200, 10)
|
||||
layout_mode = 2
|
||||
script = ExtResource("8_0l7ds")
|
||||
script = ExtResource("9_2ploj")
|
||||
|
||||
[node name="VSeparator4" type="VSeparator" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Member5" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
[node name="Member5" type="TextureButton" parent="UI/AspectRatioContainer/TeamScreen" groups=["Persist"]]
|
||||
custom_minimum_size = Vector2(200, 10)
|
||||
layout_mode = 2
|
||||
script = ExtResource("9_yaflp")
|
||||
script = ExtResource("10_vu24c")
|
||||
|
||||
[node name="Label" type="Label" parent="UI/AspectRatioContainer/TeamScreen"]
|
||||
visible = false
|
||||
@@ -1,11 +1,12 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://jleorcxdlvge"]
|
||||
[gd_scene load_steps=8 format=3 uid="uid://jleorcxdlvge"]
|
||||
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_8y42b"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="2_mowpw"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="3_oxquv"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="4_l25dw"]
|
||||
[ext_resource type="Script" path="res://TeamSelection.gd" id="5_3rdmh"]
|
||||
[ext_resource type="Script" path="res://MemberDatabase/MemberDatabase.gd" id="6_ukmgy"]
|
||||
[ext_resource type="Script" path="res://Root.gd" id="1_4wos3"]
|
||||
[ext_resource type="Script" path="res://MemberDatabase/MemberDatabase.gd" id="2_d1pbg"]
|
||||
[ext_resource type="Script" path="res://User Interface/Header.gd" id="3_5456x"]
|
||||
[ext_resource type="Script" path="res://User Interface/TeamButton.gd" id="4_15yu8"]
|
||||
[ext_resource type="Script" path="res://User Interface/Bossbutton.gd" id="5_1vjo7"]
|
||||
[ext_resource type="Script" path="res://Scenes/saveTimer.gd" id="6_6bpyy"]
|
||||
[ext_resource type="Script" path="res://TeamSelection.gd" id="6_aruh2"]
|
||||
|
||||
[node name="Root" type="Control"]
|
||||
layout_mode = 3
|
||||
@@ -16,14 +17,14 @@ offset_right = 768.0
|
||||
offset_bottom = 432.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_8y42b")
|
||||
script = ExtResource("1_4wos3")
|
||||
|
||||
[node name="MemberDatabase" type="Control" parent="."]
|
||||
visible = false
|
||||
anchors_preset = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("6_ukmgy")
|
||||
script = ExtResource("2_d1pbg")
|
||||
|
||||
[node name="UI" type="Control" parent="."]
|
||||
anchors_preset = 0
|
||||
@@ -36,7 +37,7 @@ offset_bottom = 1080.0
|
||||
offset_left = 3.0
|
||||
offset_right = 395.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("2_mowpw")
|
||||
script = ExtResource("3_5456x")
|
||||
|
||||
[node name="ScoreLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -102,14 +103,14 @@ layout_mode = 2
|
||||
text = "Team"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("3_oxquv")
|
||||
script = ExtResource("4_15yu8")
|
||||
|
||||
[node name="Bossbutton" type="Button" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
text = "Bosses"
|
||||
flat = true
|
||||
alignment = 0
|
||||
script = ExtResource("4_l25dw")
|
||||
script = ExtResource("5_1vjo7")
|
||||
|
||||
[node name="ClickAddLabel" type="Label" parent="UI/CanvasLayer/Header"]
|
||||
layout_mode = 2
|
||||
@@ -137,6 +138,11 @@ text = "Multiplier:
|
||||
layout_mode = 2
|
||||
text = "0"
|
||||
|
||||
[node name="saveTimer" type="Timer" parent="UI/CanvasLayer/Header"]
|
||||
wait_time = 5.0
|
||||
autostart = true
|
||||
script = ExtResource("6_6bpyy")
|
||||
|
||||
[node name="TeamSelection" type="GridContainer" parent="UI"]
|
||||
layout_mode = 0
|
||||
offset_left = 3.0
|
||||
@@ -144,4 +150,4 @@ offset_top = 40.0
|
||||
offset_right = 1923.0
|
||||
offset_bottom = 1120.0
|
||||
columns = 10
|
||||
script = ExtResource("5_3rdmh")
|
||||
script = ExtResource("6_aruh2")
|
||||
94
Scenes/titleScreen.gd
Normal file
94
Scenes/titleScreen.gd
Normal file
@@ -0,0 +1,94 @@
|
||||
extends Control
|
||||
|
||||
var files_to_copy = [
|
||||
"MemberDatabase/memberData.json",
|
||||
"Boss/bossData.json",
|
||||
"Save/saveData.json"
|
||||
]
|
||||
|
||||
var user_directory = OS.get_user_data_dir()
|
||||
|
||||
var save_data = {}
|
||||
|
||||
func copy_file_if_not_exists(file_name: String):
|
||||
var user_file_path = "user://" + file_name
|
||||
if not FileAccess.file_exists(user_file_path):
|
||||
var res_file_path = "res://" + file_name
|
||||
if FileAccess.file_exists(res_file_path):
|
||||
var file = FileAccess.open(res_file_path, FileAccess.READ)
|
||||
if file:
|
||||
var data = file.get_as_text()
|
||||
file.close()
|
||||
|
||||
# Write to user:// directory
|
||||
var user_file = FileAccess.open(user_file_path, FileAccess.WRITE)
|
||||
if user_file:
|
||||
user_file.store_string(data)
|
||||
user_file.close()
|
||||
print("Copied ", file_name, " to user:// directory.")
|
||||
else:
|
||||
print("Failed to open destination file: ", user_file_path)
|
||||
user_file.get_open_error()
|
||||
else:
|
||||
print("Failed to open source file: ", res_file_path)
|
||||
else:
|
||||
print("Source file ", res_file_path, " not found.")
|
||||
else:
|
||||
print("File ", user_file_path, " already exists.")
|
||||
|
||||
func load_saved_game():
|
||||
#If using json
|
||||
var file = FileAccess.open("user://Save/saveData.json", FileAccess.READ)
|
||||
#var file = FileAccess.open("user://memberData.json", FileAccess.READ)
|
||||
if file:
|
||||
var json_text = file.get_as_text()
|
||||
#print (json_text)
|
||||
file.close()
|
||||
|
||||
var json = JSON.new()
|
||||
var json_result = json.parse(json_text)
|
||||
#print (json_result)
|
||||
|
||||
if json_result == OK:
|
||||
save_data = json.get_data()
|
||||
print("Save data loaded successfully.")
|
||||
#print(character_data)
|
||||
else:
|
||||
print("Failed to parse JSON: ", json_result.error_string)
|
||||
else:
|
||||
print("Save data file not found.")
|
||||
#Sets the global variables to what was saved
|
||||
Global.globalDamage = save_data["totalDamage"]
|
||||
Global.globalDamagePerClick = save_data["damagePerClick"]
|
||||
Global.globalDamagePerSec = save_data["damagePerSec"]
|
||||
Global.globalDamageMultiplier = save_data["damageMultiplier"]
|
||||
Global.damagePerSecMember1 = save_data["damagePerSecMember1"]
|
||||
Global.damagePerClickMember1 = save_data["damagePerClickMember1"]
|
||||
Global.damageMultiplierMember1 = save_data["damageMultiplierMember1"]
|
||||
Global.texture_member1 = save_data["textureMember1"]
|
||||
Global.damagePerSecMember2 = save_data["damagePerSecMember2"]
|
||||
Global.damagePerClickMember2 = save_data["damagePerClickMember2"]
|
||||
Global.damageMultiplierMember2 = save_data["damageMultiplierMember2"]
|
||||
Global.texture_member2 = save_data["textureMember2"]
|
||||
Global.damagePerSecMember3 = save_data["damagePerSecMember3"]
|
||||
Global.damagePerClickMember3 = save_data["damagePerClickMember3"]
|
||||
Global.damageMultiplierMember3 = save_data["damageMultiplierMember3"]
|
||||
Global.texture_member3 = save_data["textureMember3"]
|
||||
Global.damagePerSecMember4 = save_data["damagePerSecMember4"]
|
||||
Global.damagePerClickMember4 = save_data["damagePerClickMember4"]
|
||||
Global.damageMultiplierMember4 = save_data["damageMultiplierMember4"]
|
||||
Global.texture_member4 = save_data["textureMember4"]
|
||||
Global.damagePerSecMember5 = save_data["damagePerSecMember5"]
|
||||
Global.damagePerClickMember5 = save_data["damagePerClickMember5"]
|
||||
Global.damageMultiplierMember5 = save_data["damageMultiplierMember5"]
|
||||
Global.texture_member5 = save_data["textureMember5"]
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
for file_name in files_to_copy:
|
||||
copy_file_if_not_exists(file_name) # Replace with function body.
|
||||
load_saved_game()
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
29
Scenes/titleScreen.tscn
Normal file
29
Scenes/titleScreen.tscn
Normal file
@@ -0,0 +1,29 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://c1kf17y3j7jhy"]
|
||||
|
||||
[ext_resource type="Script" path="res://TitleClick.gd" id="1_8fgbc"]
|
||||
[ext_resource type="Script" path="res://Scenes/titleScreen.gd" id="1_euijw"]
|
||||
|
||||
[node name="TitleScreen" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_right = 768.0
|
||||
offset_bottom = 432.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_euijw")
|
||||
|
||||
[node name="Title Text" type="RichTextLabel" parent="."]
|
||||
layout_mode = 0
|
||||
offset_right = 2422.0
|
||||
offset_bottom = 1080.0
|
||||
text = "Title Screen
|
||||
|
||||
Click Anywhere"
|
||||
|
||||
[node name="TitleClick" type="LinkButton" parent="Title Text"]
|
||||
layout_mode = 0
|
||||
offset_right = 1920.0
|
||||
offset_bottom = 1080.0
|
||||
script = ExtResource("1_8fgbc")
|
||||
@@ -60,7 +60,7 @@ func _on_button_exited(button: TextureButton):
|
||||
|
||||
|
||||
# Update the global singleton for the given index
|
||||
func update_global_texture_singleton(texture: Texture):
|
||||
func update_global_texture_singleton(texture: String):
|
||||
match Global.currentMemberSelected:
|
||||
0:
|
||||
Global.set_texture1(texture)
|
||||
@@ -79,7 +79,8 @@ func _on_button_pressed(button: TextureButton, member: Dictionary):
|
||||
## Print the name of the button
|
||||
##print("Button pressed: ", button.name)
|
||||
|
||||
var selected_texture = button.texture_normal
|
||||
var selected_texture = button.texture_normal.resource_path
|
||||
print(selected_texture)
|
||||
#var texture = button.texture_normal
|
||||
# Logic to determine which target button to update (this can be based on user selection or some other logic)
|
||||
# For this example, we'll update the first available slot
|
||||
@@ -96,7 +97,7 @@ func _on_button_pressed(button: TextureButton, member: Dictionary):
|
||||
Global.teamScreenVisible = true
|
||||
Global.teamSelectionVisible = false
|
||||
|
||||
get_tree().change_scene_to_file("res://team.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/team.tscn")
|
||||
|
||||
|
||||
|
||||
|
||||
15
TitleClick.gd
Normal file
15
TitleClick.gd
Normal file
@@ -0,0 +1,15 @@
|
||||
extends LinkButton
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
self.connect("pressed", Callable(self, "_on_Button_pressed"))
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
|
||||
|
||||
func _on_Button_pressed():
|
||||
get_tree().change_scene_to_file("res://Scenes/UserInterface.tscn")
|
||||
@@ -8,7 +8,7 @@ func _ready():
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
|
||||
get_tree().change_scene_to_file("res://bossFights.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/bossFights.tscn")
|
||||
#if Global.bossScreenVisible == false:
|
||||
#Global.bossScreenVisible = true
|
||||
#Global.teamScreenVisible = false
|
||||
|
||||
@@ -9,16 +9,17 @@ func _ready():
|
||||
|
||||
|
||||
|
||||
|
||||
func _process(delta):
|
||||
#Checks if the texture needs to be set
|
||||
if Global.texture_member1:
|
||||
self.texture_normal = Global.texture_member1
|
||||
self.texture_normal = load(Global.texture_member1)
|
||||
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
|
||||
#MemberDatabase.load_character_data()
|
||||
get_tree().change_scene_to_file("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/teamSelection.tscn")
|
||||
|
||||
Global.currentMemberSelected = 0
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ func _ready():
|
||||
func _process(delta):
|
||||
#Checks if the texture needs to be set
|
||||
if Global.texture_member2:
|
||||
self.texture_normal = Global.texture_member2
|
||||
self.texture_normal = load(Global.texture_member2)
|
||||
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
|
||||
get_tree().change_scene_to_file("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/teamSelection.tscn")
|
||||
|
||||
Global.currentMemberSelected = 1
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ func _ready():
|
||||
func _process(delta):
|
||||
#Checks if the texture needs to be set
|
||||
if Global.texture_member3:
|
||||
self.texture_normal = Global.texture_member3
|
||||
self.texture_normal = load(Global.texture_member3)
|
||||
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
#This is an array, numbers will not match
|
||||
|
||||
get_tree().change_scene_to_file("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/teamSelection.tscn")
|
||||
Global.currentMemberSelected = 2
|
||||
|
||||
Global.teamScreenVisible = false
|
||||
|
||||
@@ -12,12 +12,12 @@ func _ready():
|
||||
func _process(delta):
|
||||
#Checks if the texture needs to be set
|
||||
if Global.texture_member4:
|
||||
self.texture_normal = Global.texture_member4
|
||||
self.texture_normal = load(Global.texture_member4)
|
||||
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
|
||||
get_tree().change_scene_to_file("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/teamSelection.tscn")
|
||||
|
||||
Global.currentMemberSelected = 3
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ func _ready():
|
||||
func _process(delta):
|
||||
#Checks if the texture needs to be set
|
||||
if Global.texture_member5:
|
||||
self.texture_normal = Global.texture_member5
|
||||
self.texture_normal = load(Global.texture_member5)
|
||||
|
||||
# Function to handle the button press
|
||||
func _on_Button_pressed():
|
||||
|
||||
get_tree().change_scene_to_file("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/teamSelection.tscn")
|
||||
|
||||
Global.currentMemberSelected = 4
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ func _ready():
|
||||
func _on_Button_pressed():
|
||||
|
||||
#var new_scene = load("res://teamSelection.tscn")
|
||||
get_tree().change_scene_to_file("res://team.tscn")
|
||||
get_tree().change_scene_to_file("res://Scenes/team.tscn")
|
||||
|
||||
#if Global.teamScreenVisible == false:
|
||||
#Global.teamSelectionVisible = false
|
||||
|
||||
21
inventory.gd
21
inventory.gd
@@ -1,21 +0,0 @@
|
||||
extends PanelContainer
|
||||
|
||||
const Slot = preload("res://slot.tscn")
|
||||
|
||||
@onready var member_grid = $MarginContainer/MemberGrid
|
||||
|
||||
func _ready() -> void:
|
||||
var inv_data = preload("res://Inventory.tres")
|
||||
populate_member_grid(inv_data.slot_datas)
|
||||
|
||||
func populate_member_grid(slot_datas: Array[Slot_Data]) -> void:
|
||||
for child in member_grid.get_children():
|
||||
child.queue_free()
|
||||
|
||||
for slot_data in slot_datas:
|
||||
var slot = Slot.instantiate()
|
||||
member_grid.add_child(slot)
|
||||
|
||||
#Populates slot
|
||||
if slot_data:
|
||||
slot.set_slot_data(slot_data)
|
||||
@@ -1,19 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://djb50o2drdkk1"]
|
||||
|
||||
[ext_resource type="Script" path="res://inventory.gd" id="1_51xtg"]
|
||||
|
||||
[node name="Inventory" type="PanelContainer"]
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("1_51xtg")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 8
|
||||
theme_override_constants/margin_top = 8
|
||||
theme_override_constants/margin_right = 8
|
||||
theme_override_constants/margin_bottom = 8
|
||||
|
||||
[node name="MemberGrid" type="GridContainer" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
columns = 54
|
||||
14
slot.gd
14
slot.gd
@@ -1,14 +0,0 @@
|
||||
extends PanelContainer
|
||||
|
||||
@onready var texture_rect = $MarginContainer/TextureRect
|
||||
@onready var quantity_label = $"Quantity Label"
|
||||
|
||||
func set_slot_data(slot_data: Slot_Data) -> void:
|
||||
var member_data = slot_data.memberData
|
||||
#Updates texture
|
||||
texture_rect.texture = member_data.texture
|
||||
tooltip_text = "%s\n%s" % [member_data.name, member_data.description]
|
||||
|
||||
if slot_data.quantity > 1:
|
||||
quantity_label.text = "x%s" % slot_data.quantity
|
||||
quantity_label.show()
|
||||
30
slot.tscn
30
slot.tscn
@@ -1,30 +0,0 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cacut43x6gvco"]
|
||||
|
||||
[ext_resource type="Script" path="res://slot.gd" id="1_lwvfm"]
|
||||
|
||||
[node name="Slot" type="PanelContainer"]
|
||||
custom_minimum_size = Vector2(64, 64)
|
||||
offset_right = 40.0
|
||||
offset_bottom = 40.0
|
||||
script = ExtResource("1_lwvfm")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="."]
|
||||
layout_mode = 2
|
||||
theme_override_constants/margin_left = 4
|
||||
theme_override_constants/margin_top = 4
|
||||
theme_override_constants/margin_right = 4
|
||||
theme_override_constants/margin_bottom = 4
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="MarginContainer"]
|
||||
layout_mode = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="Quantity Label" type="Label" parent="."]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 8
|
||||
size_flags_vertical = 0
|
||||
theme_override_colors/font_outline_color = Color(0, 0, 0, 1)
|
||||
theme_override_constants/outline_size = 3
|
||||
text = "x99"
|
||||
Reference in New Issue
Block a user