✨ Upgradable
This commit is contained in:
parent
cc562a4950
commit
8be0789b17
@ -51,7 +51,7 @@ skill_dash={
|
|||||||
}
|
}
|
||||||
weapon_fire={
|
weapon_fire={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":256,"position":Vector2(234, 24),"global_position":Vector2(242, 104),"factor":1.0,"button_index":9,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"echo":false,"script":null)
|
||||||
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(185, 16),"global_position":Vector2(193, 96),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(185, 16),"global_position":Vector2(193, 96),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://l4mybb2dw107"]
|
[gd_scene load_steps=10 format=3 uid="uid://l4mybb2dw107"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cwkcf8h5rspoh" path="res://scenes/objects/player.tscn" id="1_nq1ke"]
|
[ext_resource type="PackedScene" uid="uid://cwkcf8h5rspoh" path="res://scenes/objects/player.tscn" id="1_nq1ke"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cxlgt8h33u7os" path="res://scenes/objects/tower.tscn" id="2_betjv"]
|
[ext_resource type="PackedScene" uid="uid://cxlgt8h33u7os" path="res://scenes/objects/tower.tscn" id="2_betjv"]
|
||||||
@ -7,6 +7,7 @@
|
|||||||
[ext_resource type="PackedScene" uid="uid://2tqfm73cc4id" path="res://scenes/manager/statistics.tscn" id="5_qd3ww"]
|
[ext_resource type="PackedScene" uid="uid://2tqfm73cc4id" path="res://scenes/manager/statistics.tscn" id="5_qd3ww"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cjam63kp5sg2o" path="res://scenes/ui/stats_overlay.tscn" id="5_rymed"]
|
[ext_resource type="PackedScene" uid="uid://cjam63kp5sg2o" path="res://scenes/ui/stats_overlay.tscn" id="5_rymed"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dy51uqtr2ng32" path="res://scenes/ui/finish_screen.tscn" id="6_b264x"]
|
[ext_resource type="PackedScene" uid="uid://dy51uqtr2ng32" path="res://scenes/ui/finish_screen.tscn" id="6_b264x"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://5mt7abqkbpei" path="res://scenes/ui/reward_claim_screen.tscn" id="6_t43s0"]
|
||||||
|
|
||||||
[sub_resource type="Curve2D" id="Curve2D_gwd20"]
|
[sub_resource type="Curve2D" id="Curve2D_gwd20"]
|
||||||
_data = {
|
_data = {
|
||||||
@ -39,6 +40,11 @@ rotation = 1.5708
|
|||||||
[node name="StatsOverlay" parent="." node_paths=PackedStringArray("stats") instance=ExtResource("5_rymed")]
|
[node name="StatsOverlay" parent="." node_paths=PackedStringArray("stats") instance=ExtResource("5_rymed")]
|
||||||
stats = NodePath("../Statistics")
|
stats = NodePath("../Statistics")
|
||||||
|
|
||||||
|
[node name="RewardClaimScreen" parent="." node_paths=PackedStringArray("tower", "player") instance=ExtResource("6_t43s0")]
|
||||||
|
visible = false
|
||||||
|
tower = NodePath("../Tower")
|
||||||
|
player = NodePath("../Player")
|
||||||
|
|
||||||
[node name="FinishScreen" parent="." node_paths=PackedStringArray("stats") instance=ExtResource("6_b264x")]
|
[node name="FinishScreen" parent="." node_paths=PackedStringArray("stats") instance=ExtResource("6_b264x")]
|
||||||
visible = false
|
visible = false
|
||||||
stats = NodePath("../Statistics")
|
stats = NodePath("../Statistics")
|
||||||
@ -48,4 +54,5 @@ stats = NodePath("../Statistics")
|
|||||||
[connection signal="enemy_defeat" from="EnemyFarm" to="Statistics" method="_on_enemy_defeated"]
|
[connection signal="enemy_defeat" from="EnemyFarm" to="Statistics" method="_on_enemy_defeated"]
|
||||||
[connection signal="tower_broken" from="Tower" to="FinishScreen" method="_show"]
|
[connection signal="tower_broken" from="Tower" to="FinishScreen" method="_show"]
|
||||||
[connection signal="wave_finished" from="Statistics" to="EnemyFarm" method="_on_wave_finished"]
|
[connection signal="wave_finished" from="Statistics" to="EnemyFarm" method="_on_wave_finished"]
|
||||||
|
[connection signal="wave_finished" from="Statistics" to="RewardClaimScreen" method="_show"]
|
||||||
[connection signal="wave_started" from="Statistics" to="EnemyFarm" method="_on_wave_started"]
|
[connection signal="wave_started" from="Statistics" to="EnemyFarm" method="_on_wave_started"]
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://dy51uqtr2ng32"]
|
[gd_scene load_steps=4 format=3 uid="uid://dy51uqtr2ng32"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://scripts/ui/finish_screen.gd" id="1_c1emt"]
|
[ext_resource type="Script" path="res://scripts/ui/finish_screen.gd" id="1_c1emt"]
|
||||||
[ext_resource type="Theme" uid="uid://gh5a3no0ojkl" path="res://codingland.tres" id="1_l6ven"]
|
[ext_resource type="Theme" uid="uid://gh5a3no0ojkl" path="res://codingland.tres" id="1_l6ven"]
|
||||||
|
|
||||||
[node name="FinishScreen" type="Control"]
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_djdno"]
|
||||||
|
bg_color = Color(0.301961, 0.301961, 0.301961, 1)
|
||||||
|
|
||||||
|
[node name="FinishScreen" type="Control" node_paths=PackedStringArray("survived_indicator", "wave_indicator", "enemies_indicator", "bullet_indicator")]
|
||||||
layout_mode = 3
|
layout_mode = 3
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
anchor_right = 1.0
|
anchor_right = 1.0
|
||||||
@ -12,17 +15,107 @@ grow_horizontal = 2
|
|||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
theme = ExtResource("1_l6ven")
|
theme = ExtResource("1_l6ven")
|
||||||
script = ExtResource("1_c1emt")
|
script = ExtResource("1_c1emt")
|
||||||
|
survived_indicator = NodePath("Panel/SurvivedTime")
|
||||||
|
wave_indicator = NodePath("Panel/WaveCount")
|
||||||
|
enemies_indicator = NodePath("Panel/EnemyCount")
|
||||||
|
bullet_indicator = NodePath("Panel/BulletCount")
|
||||||
|
|
||||||
[node name="Panel" type="Panel" parent="."]
|
[node name="Panel" type="Panel" parent="."]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_right = 1152.0
|
offset_right = 1152.0
|
||||||
offset_bottom = 648.0
|
offset_bottom = 648.0
|
||||||
|
theme_override_styles/panel = SubResource("StyleBoxFlat_djdno")
|
||||||
|
|
||||||
[node name="Title" type="Label" parent="Panel"]
|
[node name="Title" type="Label" parent="Panel"]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_top = 280.0
|
offset_top = 128.0
|
||||||
offset_right = 1152.0
|
offset_right = 1152.0
|
||||||
offset_bottom = 364.0
|
offset_bottom = 212.0
|
||||||
theme_override_font_sizes/font_size = 64
|
theme_override_font_sizes/font_size = 64
|
||||||
text = "Game Over"
|
text = "You failed"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Subtitle" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 208.0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 250.0
|
||||||
|
theme_override_font_sizes/font_size = 28
|
||||||
|
text = "The tower has been destroyed"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="SurvivedCaption" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 416.0
|
||||||
|
offset_right = 576.0
|
||||||
|
offset_bottom = 448.0
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "You Survived"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="SurvivedTime" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 440.0
|
||||||
|
offset_right = 576.0
|
||||||
|
offset_bottom = 504.0
|
||||||
|
theme_override_font_sizes/font_size = 48
|
||||||
|
text = "0.0s"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="WaveCaption" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 296.0
|
||||||
|
offset_right = 576.0
|
||||||
|
offset_bottom = 328.0
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "Wave"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="WaveCount" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 324.0
|
||||||
|
offset_right = 576.0
|
||||||
|
offset_bottom = 388.0
|
||||||
|
theme_override_font_sizes/font_size = 48
|
||||||
|
text = "1"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="EnemyTitle" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 576.0
|
||||||
|
offset_top = 296.0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 328.0
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "Enemy Defeated"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="EnemyCount" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 576.0
|
||||||
|
offset_top = 324.0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 388.0
|
||||||
|
theme_override_font_sizes/font_size = 48
|
||||||
|
text = "0"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="BulletTitle" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 576.0
|
||||||
|
offset_top = 416.0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 448.0
|
||||||
|
theme_override_font_sizes/font_size = 24
|
||||||
|
text = "Bullet Shoot"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="BulletCount" type="Label" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 576.0
|
||||||
|
offset_top = 440.0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 504.0
|
||||||
|
theme_override_font_sizes/font_size = 48
|
||||||
|
text = "0"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
34
scenes/ui/reward_claim_screen.tscn
Normal file
34
scenes/ui/reward_claim_screen.tscn
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://5mt7abqkbpei"]
|
||||||
|
|
||||||
|
[ext_resource type="Theme" uid="uid://gh5a3no0ojkl" path="res://codingland.tres" id="1_yxvac"]
|
||||||
|
[ext_resource type="Script" path="res://scripts/ui/reward_claim_screen.gd" id="2_c2hn7"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bayylbkjbagy5" path="res://scenes/ui/reward_item.tscn" id="3_p7bh8"]
|
||||||
|
|
||||||
|
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3xnq2"]
|
||||||
|
bg_color = Color(0.301961, 0.301961, 0.301961, 1)
|
||||||
|
|
||||||
|
[node name="RewardClaimScreen" type="Control"]
|
||||||
|
process_mode = 3
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
theme = ExtResource("1_yxvac")
|
||||||
|
script = ExtResource("2_c2hn7")
|
||||||
|
card = ExtResource("3_p7bh8")
|
||||||
|
|
||||||
|
[node name="Panel" type="Panel" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_right = 1152.0
|
||||||
|
offset_bottom = 648.0
|
||||||
|
theme_override_styles/panel = SubResource("StyleBoxFlat_3xnq2")
|
||||||
|
|
||||||
|
[node name="RewardContainer" type="HBoxContainer" parent="Panel"]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 32.0
|
||||||
|
offset_top = 32.0
|
||||||
|
offset_right = 1120.0
|
||||||
|
offset_bottom = 616.0
|
||||||
|
alignment = 1
|
43
scenes/ui/reward_item.tscn
Normal file
43
scenes/ui/reward_item.tscn
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://bayylbkjbagy5"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://scripts/ui/reward_item.gd" id="1_v4j3k"]
|
||||||
|
|
||||||
|
[node name="RewardItem" type="Panel"]
|
||||||
|
custom_minimum_size = Vector2(360, 584)
|
||||||
|
script = ExtResource("1_v4j3k")
|
||||||
|
|
||||||
|
[node name="Title" type="Label" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 120.0
|
||||||
|
offset_right = 360.0
|
||||||
|
offset_bottom = 162.0
|
||||||
|
theme_override_font_sizes/font_size = 32
|
||||||
|
text = "Reward"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Subtitle" type="Label" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_top = 160.0
|
||||||
|
offset_right = 360.0
|
||||||
|
offset_bottom = 184.0
|
||||||
|
theme_override_font_sizes/font_size = 16
|
||||||
|
text = "Reward description"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
|
||||||
|
[node name="Description" type="RichTextLabel" parent="."]
|
||||||
|
layout_mode = 0
|
||||||
|
offset_left = 52.0
|
||||||
|
offset_top = 208.0
|
||||||
|
offset_right = 308.0
|
||||||
|
offset_bottom = 504.0
|
||||||
|
bbcode_enabled = true
|
||||||
|
text = "This is the world most powerful reward. Trust me, choose this is a great choice."
|
||||||
|
|
||||||
|
[node name="ClaimButton" type="Button" parent="."]
|
||||||
|
offset_left = 52.0
|
||||||
|
offset_top = 520.0
|
||||||
|
offset_right = 308.0
|
||||||
|
offset_bottom = 552.0
|
||||||
|
text = "Claim"
|
||||||
|
|
||||||
|
[connection signal="pressed" from="ClaimButton" to="." method="_on_claim"]
|
@ -30,17 +30,18 @@ offset_bottom = 648.0
|
|||||||
|
|
||||||
[node name="SurvivedCaption" type="Label" parent="SurvivedControl"]
|
[node name="SurvivedCaption" type="Label" parent="SurvivedControl"]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
|
offset_top = 5.0
|
||||||
offset_right = 1152.0
|
offset_right = 1152.0
|
||||||
offset_bottom = 26.0
|
offset_bottom = 31.0
|
||||||
theme_override_font_sizes/font_size = 18
|
theme_override_font_sizes/font_size = 18
|
||||||
text = "You survived"
|
text = "You survived"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
|
||||||
[node name="SurvivedTime" type="Label" parent="SurvivedControl"]
|
[node name="SurvivedTime" type="Label" parent="SurvivedControl"]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_top = 20.0
|
offset_top = 25.0
|
||||||
offset_right = 1152.0
|
offset_right = 1152.0
|
||||||
offset_bottom = 65.0
|
offset_bottom = 70.0
|
||||||
theme_override_font_sizes/font_size = 32
|
theme_override_font_sizes/font_size = 32
|
||||||
text = "0.0s"
|
text = "0.0s"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
class_name Tower
|
||||||
|
|
||||||
extends Area2D
|
extends Area2D
|
||||||
|
|
||||||
signal tower_broken
|
signal tower_broken
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
class_name Player
|
||||||
|
|
||||||
extends CharacterBody2D
|
extends CharacterBody2D
|
||||||
|
|
||||||
@export var speed = 1200
|
@export var speed = 1200
|
||||||
|
@ -2,5 +2,14 @@ extends Control
|
|||||||
|
|
||||||
@export var stats: Statistics
|
@export var stats: Statistics
|
||||||
|
|
||||||
|
@export var survived_indicator: Label
|
||||||
|
@export var wave_indicator: Label
|
||||||
|
@export var enemies_indicator: Label
|
||||||
|
@export var bullet_indicator: Label
|
||||||
|
|
||||||
func _show():
|
func _show():
|
||||||
|
survived_indicator.text = "%.2fs" % (stats.get_time_survived() / 1000.0)
|
||||||
|
wave_indicator.text = "%d" % stats.get_current_wave()
|
||||||
|
enemies_indicator.text = "%d" % stats.enemies_defeated
|
||||||
|
bullet_indicator.text = "%d" % stats.bullet_shoot
|
||||||
visible = true
|
visible = true
|
||||||
|
57
scripts/ui/reward_claim_screen.gd
Normal file
57
scripts/ui/reward_claim_screen.gd
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
extends Control
|
||||||
|
|
||||||
|
@export var card: PackedScene
|
||||||
|
@export var tower: Tower
|
||||||
|
@export var player: Player
|
||||||
|
|
||||||
|
@export var items = [
|
||||||
|
{
|
||||||
|
id = "QUICK_TRIGGER",
|
||||||
|
title = "Quick Trigger",
|
||||||
|
subtitle = "Save your finger",
|
||||||
|
description = "Reduce the delay between two shot.",
|
||||||
|
weight = 0.1,
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
func pick_item() -> Dictionary:
|
||||||
|
var total_weight: float = 0.0
|
||||||
|
for choice in items:
|
||||||
|
total_weight += choice["weight"]
|
||||||
|
|
||||||
|
var random_value: float = randf() * total_weight
|
||||||
|
var cumulative_weight: float = 0.0
|
||||||
|
for choice in items:
|
||||||
|
cumulative_weight += choice["weight"]
|
||||||
|
if random_value <= cumulative_weight:
|
||||||
|
return choice
|
||||||
|
|
||||||
|
return items.back()
|
||||||
|
|
||||||
|
func roll():
|
||||||
|
for child in $Panel/RewardContainer.get_children():
|
||||||
|
child.queue_free()
|
||||||
|
|
||||||
|
var items = []
|
||||||
|
for idx in range(3):
|
||||||
|
items.append(pick_item())
|
||||||
|
|
||||||
|
for item in items:
|
||||||
|
var instance = card.instantiate()
|
||||||
|
instance.tower = tower
|
||||||
|
instance.player = player
|
||||||
|
instance.id = item["id"]
|
||||||
|
instance.title = item["title"]
|
||||||
|
instance.subtitle = item["subtitle"]
|
||||||
|
instance.description = item["description"]
|
||||||
|
instance.connect("claimed", _hide)
|
||||||
|
$Panel/RewardContainer.add_child(instance)
|
||||||
|
|
||||||
|
func _show():
|
||||||
|
roll()
|
||||||
|
get_tree().paused = true
|
||||||
|
visible = true
|
||||||
|
|
||||||
|
func _hide():
|
||||||
|
get_tree().paused = false
|
||||||
|
visible = false
|
22
scripts/ui/reward_item.gd
Normal file
22
scripts/ui/reward_item.gd
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
extends Panel
|
||||||
|
|
||||||
|
signal claimed
|
||||||
|
|
||||||
|
@export var tower: Tower
|
||||||
|
@export var player: Player
|
||||||
|
|
||||||
|
@export var id: String
|
||||||
|
@export var title: String
|
||||||
|
@export var subtitle: String
|
||||||
|
@export var description: String
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
$Title.text = title
|
||||||
|
$Subtitle.text = subtitle
|
||||||
|
$Description.text = description
|
||||||
|
|
||||||
|
func _on_claim():
|
||||||
|
if id == "QUICK_TRIGGER":
|
||||||
|
if player.fire_cooldown_duration > 0:
|
||||||
|
player.fire_cooldown_duration -= 0.05
|
||||||
|
claimed.emit()
|
Loading…
Reference in New Issue
Block a user