✨ Upgradable
This commit is contained in:
parent
cc562a4950
commit
8be0789b17
@ -51,7 +51,7 @@ skill_dash={
|
||||
}
|
||||
weapon_fire={
|
||||
"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)
|
||||
]
|
||||
}
|
||||
|
@ -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://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://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://5mt7abqkbpei" path="res://scenes/ui/reward_claim_screen.tscn" id="6_t43s0"]
|
||||
|
||||
[sub_resource type="Curve2D" id="Curve2D_gwd20"]
|
||||
_data = {
|
||||
@ -39,6 +40,11 @@ rotation = 1.5708
|
||||
[node name="StatsOverlay" parent="." node_paths=PackedStringArray("stats") instance=ExtResource("5_rymed")]
|
||||
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")]
|
||||
visible = false
|
||||
stats = NodePath("../Statistics")
|
||||
@ -48,4 +54,5 @@ stats = NodePath("../Statistics")
|
||||
[connection signal="enemy_defeat" from="EnemyFarm" to="Statistics" method="_on_enemy_defeated"]
|
||||
[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="RewardClaimScreen" method="_show"]
|
||||
[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="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
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
@ -12,17 +15,107 @@ grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("1_l6ven")
|
||||
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="."]
|
||||
layout_mode = 0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 648.0
|
||||
theme_override_styles/panel = SubResource("StyleBoxFlat_djdno")
|
||||
|
||||
[node name="Title" type="Label" parent="Panel"]
|
||||
layout_mode = 0
|
||||
offset_top = 280.0
|
||||
offset_top = 128.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 364.0
|
||||
offset_bottom = 212.0
|
||||
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
|
||||
|
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"]
|
||||
layout_mode = 0
|
||||
offset_top = 5.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 26.0
|
||||
offset_bottom = 31.0
|
||||
theme_override_font_sizes/font_size = 18
|
||||
text = "You survived"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="SurvivedTime" type="Label" parent="SurvivedControl"]
|
||||
layout_mode = 0
|
||||
offset_top = 20.0
|
||||
offset_top = 25.0
|
||||
offset_right = 1152.0
|
||||
offset_bottom = 65.0
|
||||
offset_bottom = 70.0
|
||||
theme_override_font_sizes/font_size = 32
|
||||
text = "0.0s"
|
||||
horizontal_alignment = 1
|
||||
|
@ -1,3 +1,5 @@
|
||||
class_name Tower
|
||||
|
||||
extends Area2D
|
||||
|
||||
signal tower_broken
|
||||
|
@ -1,3 +1,5 @@
|
||||
class_name Player
|
||||
|
||||
extends CharacterBody2D
|
||||
|
||||
@export var speed = 1200
|
||||
|
@ -2,5 +2,14 @@ extends Control
|
||||
|
||||
@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():
|
||||
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
|
||||
|
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