added radio and new blank cassette system
This commit is contained in:
@@ -1,9 +1,8 @@
|
|||||||
[gd_resource type="Resource" script_class="HeroClass" load_steps=9 format=3 uid="uid://b5pc3frhx467q"]
|
[gd_resource type="Resource" script_class="HeroClass" load_steps=8 format=3 uid="uid://b5pc3frhx467q"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dq8v5e11rvyi6" path="res://Classes/Engineer/plan.tscn" id="1_2m5d7"]
|
[ext_resource type="PackedScene" uid="uid://dq8v5e11rvyi6" path="res://Classes/Engineer/plan.tscn" id="1_2m5d7"]
|
||||||
[ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_t4fvj"]
|
[ext_resource type="Script" uid="uid://d40isem6w5d8" path="res://Scripts/Resources/card.gd" id="1_t4fvj"]
|
||||||
[ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_62g46"]
|
[ext_resource type="Resource" uid="uid://deer0awg4d18o" path="res://Cards/assault.tres" id="2_62g46"]
|
||||||
[ext_resource type="Resource" uid="uid://b37r54q84vqoi" path="res://Cards/rocket_launcher.tres" id="4_o2u8f"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://ctkixdue3o7ec" path="res://Classes/Engineer/red_hand.png" id="6_a8dvt"]
|
[ext_resource type="Texture2D" uid="uid://ctkixdue3o7ec" path="res://Classes/Engineer/red_hand.png" id="6_a8dvt"]
|
||||||
[ext_resource type="Script" uid="uid://dcwtg2gev3uia" path="res://Scripts/Resources/hero_class.gd" id="7_ftkad"]
|
[ext_resource type="Script" uid="uid://dcwtg2gev3uia" path="res://Scripts/Resources/hero_class.gd" id="7_ftkad"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ciagj1hfn4gou" path="res://Classes/Engineer/podium.tscn" id="7_nyup7"]
|
[ext_resource type="PackedScene" uid="uid://ciagj1hfn4gou" path="res://Classes/Engineer/podium.tscn" id="7_nyup7"]
|
||||||
@@ -14,7 +13,7 @@ script = ExtResource("7_ftkad")
|
|||||||
hero_name = "Engineer"
|
hero_name = "Engineer"
|
||||||
texture = ExtResource("8_0o0bw")
|
texture = ExtResource("8_0o0bw")
|
||||||
hand_texture = ExtResource("6_a8dvt")
|
hand_texture = ExtResource("6_a8dvt")
|
||||||
deck = Array[ExtResource("1_t4fvj")]([ExtResource("2_62g46"), ExtResource("2_62g46"), ExtResource("2_62g46"), ExtResource("2_62g46"), ExtResource("2_62g46"), ExtResource("4_o2u8f"), ExtResource("4_o2u8f"), ExtResource("4_o2u8f")])
|
deck = Array[ExtResource("1_t4fvj")]([ExtResource("2_62g46"), ExtResource("2_62g46"), ExtResource("2_62g46")])
|
||||||
faction = 1
|
faction = 1
|
||||||
podium = ExtResource("7_nyup7")
|
podium = ExtResource("7_nyup7")
|
||||||
card_item = ExtResource("1_2m5d7")
|
card_item = ExtResource("1_2m5d7")
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ func exit_state() -> void:
|
|||||||
hero.hud.grow_wave_start_label()
|
hero.hud.grow_wave_start_label()
|
||||||
#hero.hud.primary_duration.visible = true
|
#hero.hud.primary_duration.visible = true
|
||||||
#hero.hud.secondary_duration.visible = true
|
#hero.hud.secondary_duration.visible = true
|
||||||
|
if hero.game_manager.card_gameplay:
|
||||||
hero.hud.energy_label.visible = true
|
hero.hud.energy_label.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
27
PCs/hero.gd
27
PCs/hero.gd
@@ -65,6 +65,12 @@ var currency: int = 0 :
|
|||||||
hud.set_currency_count(value)
|
hud.set_currency_count(value)
|
||||||
get:
|
get:
|
||||||
return currency
|
return currency
|
||||||
|
var blank_cassettes: int = 0 :
|
||||||
|
set(value):
|
||||||
|
blank_cassettes = value
|
||||||
|
hud.set_blank_cassette_count(value)
|
||||||
|
get():
|
||||||
|
return blank_cassettes
|
||||||
var energy: int = 0 :
|
var energy: int = 0 :
|
||||||
set(value):
|
set(value):
|
||||||
energy = value
|
energy = value
|
||||||
@@ -75,7 +81,7 @@ var selected_card: Card :
|
|||||||
set(_value):
|
set(_value):
|
||||||
pass
|
pass
|
||||||
get():
|
get():
|
||||||
return unique_cards[hand_selected_index]
|
return unique_cards[hand_selected_index] if unique_cards.size() > 0 else null
|
||||||
|
|
||||||
|
|
||||||
func set_zoom_factor(value: float) -> void:
|
func set_zoom_factor(value: float) -> void:
|
||||||
@@ -89,7 +95,11 @@ func _ready() -> void:
|
|||||||
sprite.queue_free()
|
sprite.queue_free()
|
||||||
player_name_tag.queue_free()
|
player_name_tag.queue_free()
|
||||||
for card: Card in hero_class.deck:
|
for card: Card in hero_class.deck:
|
||||||
|
if game_manager.card_gameplay:
|
||||||
draw_pile.add(card)
|
draw_pile.add(card)
|
||||||
|
else:
|
||||||
|
add_card(card)
|
||||||
|
update_selected_box()
|
||||||
else:
|
else:
|
||||||
camera.set_visible(false)
|
camera.set_visible(false)
|
||||||
gun_camera.set_visible(false)
|
gun_camera.set_visible(false)
|
||||||
@@ -128,8 +138,15 @@ func add_selection(card: Card) -> void:
|
|||||||
var box: CardSelectionBox = card_select_scene.instantiate()
|
var box: CardSelectionBox = card_select_scene.instantiate()
|
||||||
box.set_card(card)
|
box.set_card(card)
|
||||||
box.set_key(unique_cards.size() - 1)
|
box.set_key(unique_cards.size() - 1)
|
||||||
|
box.set_amount(1)
|
||||||
selection_boxes.append(box)
|
selection_boxes.append(box)
|
||||||
$HUD/selection_boxes.add_child(box)
|
$HUD/selection_boxes.add_child(box)
|
||||||
|
else:
|
||||||
|
var box: CardSelectionBox
|
||||||
|
for existing_box: CardSelectionBox in selection_boxes:
|
||||||
|
if existing_box.card == card:
|
||||||
|
box = existing_box
|
||||||
|
box.set_amount(hand.contents.count(card))
|
||||||
|
|
||||||
|
|
||||||
func check_removal() -> void:
|
func check_removal() -> void:
|
||||||
@@ -346,16 +363,20 @@ func equip_weapon(slot: int = 0) -> void:
|
|||||||
if hand.size == 0:
|
if hand.size == 0:
|
||||||
return
|
return
|
||||||
var energy_cost: int = selected_card.cost
|
var energy_cost: int = selected_card.cost
|
||||||
if energy < energy_cost:
|
if game_manager.card_gameplay and energy < energy_cost:
|
||||||
return
|
return
|
||||||
if weapons[slot] != null:
|
if weapons[slot] != null:
|
||||||
unequip_weapon(slot)
|
unequip_weapon(slot)
|
||||||
|
if !game_manager.card_gameplay:
|
||||||
|
return
|
||||||
if hand.size > 0:
|
if hand.size > 0:
|
||||||
|
if game_manager.card_gameplay:
|
||||||
energy -= energy_cost
|
energy -= energy_cost
|
||||||
place_card_audio.play()
|
place_card_audio.play()
|
||||||
cards[slot] = hand.remove_at(hand.contents.find(selected_card))
|
cards[slot] = hand.remove_at(hand.contents.find(selected_card))
|
||||||
#card_sprites[hand_selected_index].queue_free()
|
#card_sprites[hand_selected_index].queue_free()
|
||||||
#card_sprites.remove_at(hand_selected_index)
|
#card_sprites.remove_at(hand_selected_index)
|
||||||
|
if game_manager.card_gameplay:
|
||||||
discard_pile.add(cards[slot])
|
discard_pile.add(cards[slot])
|
||||||
#TODO: Alternate thing to do with the hand i guess
|
#TODO: Alternate thing to do with the hand i guess
|
||||||
#if !inventory.contents.has(cards[slot]):
|
#if !inventory.contents.has(cards[slot]):
|
||||||
@@ -454,6 +475,8 @@ func unequip_weapon(slot: int = 0) -> void:
|
|||||||
hud.new_energy_bar.disable_secondary_energy()
|
hud.new_energy_bar.disable_secondary_energy()
|
||||||
weapons[slot].queue_free()
|
weapons[slot].queue_free()
|
||||||
weapons[slot] = null
|
weapons[slot] = null
|
||||||
|
if !game_manager.card_gameplay:
|
||||||
|
add_card(cards[slot])
|
||||||
cards[slot] = null
|
cards[slot] = null
|
||||||
place_card_audio.play()
|
place_card_audio.play()
|
||||||
|
|
||||||
|
|||||||
@@ -300,15 +300,15 @@ no_depth_test = true
|
|||||||
fixed_size = true
|
fixed_size = true
|
||||||
texture = SubResource("ViewportTexture_m3ots")
|
texture = SubResource("ViewportTexture_m3ots")
|
||||||
|
|
||||||
[node name="DrawPile" type="Node" parent="."]
|
|
||||||
script = ExtResource("6_cf5ap")
|
|
||||||
|
|
||||||
[node name="Hand" type="Node" parent="."]
|
[node name="Hand" type="Node" parent="."]
|
||||||
script = ExtResource("6_cf5ap")
|
script = ExtResource("6_cf5ap")
|
||||||
|
|
||||||
[node name="DiscardPile" type="Node" parent="."]
|
[node name="DiscardPile" type="Node" parent="."]
|
||||||
script = ExtResource("6_cf5ap")
|
script = ExtResource("6_cf5ap")
|
||||||
|
|
||||||
|
[node name="DrawPile" type="Node" parent="."]
|
||||||
|
script = ExtResource("6_cf5ap")
|
||||||
|
|
||||||
[node name="PlayerMovement" type="Node" parent="." node_paths=PackedStringArray("player", "head", "weapon_holder")]
|
[node name="PlayerMovement" type="Node" parent="." node_paths=PackedStringArray("player", "head", "weapon_holder")]
|
||||||
script = ExtResource("20_cfhw8")
|
script = ExtResource("20_cfhw8")
|
||||||
player = NodePath("..")
|
player = NodePath("..")
|
||||||
@@ -319,7 +319,7 @@ max_look_up_angle = 80.0
|
|||||||
enable_jumping = true
|
enable_jumping = true
|
||||||
weapon_holder = NodePath("../FirstPersonViewport/Head2/RightHand")
|
weapon_holder = NodePath("../FirstPersonViewport/Head2/RightHand")
|
||||||
|
|
||||||
[node name="HUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("player", "wave_count", "lives_count", "currency_count", "minimap_outline", "minimap", "minimap_cam", "minimap_viewport", "fps_label", "hover_text", "enemy_sprites", "enemy_counts", "wave_start_label", "place_icon", "swap_icon", "place_text", "swap_text", "new_energy_bar", "energy_label", "primary_duration", "secondary_duration")]
|
[node name="HUD" type="CanvasLayer" parent="." node_paths=PackedStringArray("player", "wave_count", "lives_count", "currency_count", "minimap_outline", "minimap", "minimap_cam", "minimap_viewport", "fps_label", "hover_text", "enemy_sprites", "enemy_counts", "wave_start_label", "place_icon", "swap_icon", "place_text", "swap_text", "new_energy_bar", "energy_label", "primary_duration", "secondary_duration", "blank_cassette_label")]
|
||||||
script = ExtResource("8_yl6ka")
|
script = ExtResource("8_yl6ka")
|
||||||
player = NodePath("..")
|
player = NodePath("..")
|
||||||
wave_count = NodePath("EnemyTracker/WaveCount")
|
wave_count = NodePath("EnemyTracker/WaveCount")
|
||||||
@@ -344,6 +344,7 @@ new_energy_bar = NodePath("EnergyBar")
|
|||||||
energy_label = NodePath("Currencies/HBoxContainer/EnergyLabel")
|
energy_label = NodePath("Currencies/HBoxContainer/EnergyLabel")
|
||||||
primary_duration = NodePath("weapon_duration")
|
primary_duration = NodePath("weapon_duration")
|
||||||
secondary_duration = NodePath("weapon_duration2")
|
secondary_duration = NodePath("weapon_duration2")
|
||||||
|
blank_cassette_label = NodePath("Currencies/BlankCassetteLabel")
|
||||||
|
|
||||||
[node name="FirstPersonCam" type="TextureRect" parent="HUD"]
|
[node name="FirstPersonCam" type="TextureRect" parent="HUD"]
|
||||||
anchors_preset = 15
|
anchors_preset = 15
|
||||||
@@ -775,11 +776,13 @@ texture = SubResource("ViewportTexture_w13oc")
|
|||||||
|
|
||||||
[node name="CurrencyCount" type="Label" parent="HUD/Currencies/CoinCounter"]
|
[node name="CurrencyCount" type="Label" parent="HUD/Currencies/CoinCounter"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
text = "20"
|
text = "20"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 2
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="HUD/Currencies"]
|
[node name="HBoxContainer" type="HBoxContainer" parent="HUD/Currencies"]
|
||||||
|
visible = false
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
|
||||||
[node name="TextureRect" type="TextureRect" parent="HUD/Currencies/HBoxContainer"]
|
[node name="TextureRect" type="TextureRect" parent="HUD/Currencies/HBoxContainer"]
|
||||||
@@ -790,8 +793,14 @@ stretch_mode = 5
|
|||||||
|
|
||||||
[node name="EnergyLabel" type="Label" parent="HUD/Currencies/HBoxContainer"]
|
[node name="EnergyLabel" type="Label" parent="HUD/Currencies/HBoxContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
text = "0"
|
text = "0"
|
||||||
horizontal_alignment = 1
|
horizontal_alignment = 2
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="BlankCassetteLabel" type="Label" parent="HUD/Currencies"]
|
||||||
|
layout_mode = 2
|
||||||
|
horizontal_alignment = 2
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
[node name="WeaponSwapTimer" type="Timer" parent="."]
|
[node name="WeaponSwapTimer" type="Timer" parent="."]
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ extends CanvasLayer
|
|||||||
@export var energy_label: Label
|
@export var energy_label: Label
|
||||||
@export var primary_duration: Label
|
@export var primary_duration: Label
|
||||||
@export var secondary_duration: Label
|
@export var secondary_duration: Label
|
||||||
|
@export var blank_cassette_label: Label
|
||||||
|
|
||||||
var last_lives_count: int = 120
|
var last_lives_count: int = 120
|
||||||
var enemy_names: Array[String]
|
var enemy_names: Array[String]
|
||||||
@@ -35,6 +36,12 @@ var cards: Array[EnemyCardUI] = []
|
|||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
$StartWaveLabel.theme_type_variation = "WaveStartLabel"
|
$StartWaveLabel.theme_type_variation = "WaveStartLabel"
|
||||||
$InteractLabel.theme_type_variation = "InteractLabel"
|
$InteractLabel.theme_type_variation = "InteractLabel"
|
||||||
|
if player.game_manager.card_gameplay:
|
||||||
|
energy_label.visible = true
|
||||||
|
|
||||||
|
|
||||||
|
func set_blank_cassette_count(value: int) -> void:
|
||||||
|
blank_cassette_label.text = str(value)
|
||||||
|
|
||||||
|
|
||||||
func show_wave_generation_anim(wave: Wave) -> void:
|
func show_wave_generation_anim(wave: Wave) -> void:
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
class_name CardPrinter extends StaticBody3D
|
class_name CardPrinter extends StaticBody3D
|
||||||
|
|
||||||
@export var button_collider: CollisionShape3D
|
@export var button_collider: CollisionShape3D
|
||||||
|
@export var card_selection_menu: PackedScene
|
||||||
|
|
||||||
#TODO: use faction enum
|
#TODO: use faction enum
|
||||||
var base_faction: int = 1
|
var base_faction: int = 1
|
||||||
@@ -64,7 +65,20 @@ func randomize_cards(faction: Card.Faction) -> void:
|
|||||||
pos_x += 1.25
|
pos_x += 1.25
|
||||||
item.pressed.connect(card_picked_up)
|
item.pressed.connect(card_picked_up)
|
||||||
spawned_cards.append(item)
|
spawned_cards.append(item)
|
||||||
add_child(item)
|
|
||||||
|
|
||||||
|
func find_cards(faction: Card.Faction) -> void:
|
||||||
|
var decided_rarity: int = generate_rarity()
|
||||||
|
var card_choices: Array[Card] = get_faction_cards(faction)
|
||||||
|
var cards: Array[Card] = []
|
||||||
|
for card: Card in card_choices:
|
||||||
|
if card.rarity == decided_rarity:
|
||||||
|
cards.append(card)
|
||||||
|
var menu: ChooseCardScreen = card_selection_menu.instantiate() as ChooseCardScreen
|
||||||
|
menu.add_cards(cards)
|
||||||
|
menu.card_chosen.connect(output_card)
|
||||||
|
reply_player.pause()
|
||||||
|
reply_player.hud.add_child(menu)
|
||||||
|
|
||||||
|
|
||||||
func card_picked_up(card_item: CardItem) -> void:
|
func card_picked_up(card_item: CardItem) -> void:
|
||||||
@@ -77,12 +91,20 @@ func card_picked_up(card_item: CardItem) -> void:
|
|||||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||||
|
|
||||||
|
|
||||||
|
func output_card(card: Card) -> void:
|
||||||
|
reply_player.add_card(card)
|
||||||
|
reply_player.unpause()
|
||||||
|
reply_player = null
|
||||||
|
button_collider.disabled = false
|
||||||
|
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||||
|
|
||||||
|
|
||||||
func _on_static_body_3d_button_interacted(_value: int, reply: Hero) -> void:
|
func _on_static_body_3d_button_interacted(_value: int, reply: Hero) -> void:
|
||||||
reply_player = reply
|
reply_player = reply
|
||||||
if reply.energy >= 8:
|
if reply.blank_cassettes >= 1:
|
||||||
reply.energy -= 8
|
reply.blank_cassettes -= 1
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
button_collider.disabled = true
|
button_collider.disabled = true
|
||||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||||
randomize_cards(reply.hero_class.faction)
|
find_cards(reply.hero_class.faction)
|
||||||
|
|||||||
@@ -1,27 +1,31 @@
|
|||||||
[gd_scene load_steps=8 format=3 uid="uid://1b2ikdanl66b"]
|
[gd_scene load_steps=9 format=3 uid="uid://1b2ikdanl66b"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bivtfdl3p1brv" path="res://Scenes/CardPrinter/card_printer.gd" id="1_qft15"]
|
[ext_resource type="Script" uid="uid://bivtfdl3p1brv" path="res://Scenes/CardPrinter/card_printer.gd" id="1_qft15"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bcvjgl0s1wp8y" path="res://choose_card_screen.tscn" id="2_kpujb"]
|
||||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://Scripts/interact_button.gd" id="4_eavi1"]
|
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://Scripts/interact_button.gd" id="4_eavi1"]
|
||||||
[ext_resource type="PackedScene" uid="uid://b6i5w3mowcfcs" path="res://Scenes/DraftingTable/drafting_table.glb" id="4_kpujb"]
|
|
||||||
[ext_resource type="AudioStream" uid="uid://dknygn5eyuhxt" path="res://Audio/shot1.wav" id="5_m033a"]
|
[ext_resource type="AudioStream" uid="uid://dknygn5eyuhxt" path="res://Audio/shot1.wav" id="5_m033a"]
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0ebt5"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_0ebt5"]
|
||||||
size = Vector3(2.17, 1.55307, 1.12)
|
size = Vector3(3.00441, 1.21416, 2.14176)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ikdwj"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_ikdwj"]
|
||||||
size = Vector3(2.20033, 0.260753, 1.27008)
|
size = Vector3(0.57883, 0.375308, 0.190803)
|
||||||
|
|
||||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_73g2w"]
|
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_73g2w"]
|
||||||
random_pitch = 1.1
|
random_pitch = 1.1
|
||||||
streams_count = 1
|
streams_count = 1
|
||||||
stream_0/stream = ExtResource("5_m033a")
|
stream_0/stream = ExtResource("5_m033a")
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_21y4o"]
|
||||||
|
size = Vector3(2.11176, 1.16345, 0.664978)
|
||||||
|
|
||||||
[node name="CardPrinter" type="StaticBody3D" node_paths=PackedStringArray("button_collider")]
|
[node name="CardPrinter" type="StaticBody3D" node_paths=PackedStringArray("button_collider")]
|
||||||
script = ExtResource("1_qft15")
|
script = ExtResource("1_qft15")
|
||||||
button_collider = NodePath("StaticBody3D/CollisionShape3D2")
|
button_collider = NodePath("StaticBody3D/CollisionShape3D2")
|
||||||
|
card_selection_menu = ExtResource("2_kpujb")
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.776539, 0.0332634)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000722647, 0.607083, -0.000626981)
|
||||||
shape = SubResource("BoxShape3D_0ebt5")
|
shape = SubResource("BoxShape3D_0ebt5")
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
@@ -29,11 +33,11 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.847404, 0.610684)
|
|||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
collision_mask = 0
|
collision_mask = 0
|
||||||
script = ExtResource("4_eavi1")
|
script = ExtResource("4_eavi1")
|
||||||
press_cost = 8
|
press_cost = 1
|
||||||
hover_text = "[center]#Interact# draft a card for 8 Energy"
|
hover_text = "[center]#Interact# Record to blank cassette"
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D"]
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.866025, -0.5, 0, 0.5, 0.866025, -6.55949e-05, 0.349496, -0.579584)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00542301, 0.653175, 0.254328)
|
||||||
shape = SubResource("BoxShape3D_ikdwj")
|
shape = SubResource("BoxShape3D_ikdwj")
|
||||||
|
|
||||||
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="StaticBody3D"]
|
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="StaticBody3D"]
|
||||||
@@ -41,7 +45,46 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.578748, -0.587001)
|
|||||||
stream = SubResource("AudioStreamRandomizer_73g2w")
|
stream = SubResource("AudioStreamRandomizer_73g2w")
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="drafting_table" parent="." instance=ExtResource("4_kpujb")]
|
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||||
transform = Transform3D(0.06, 0, 0, 0, 0.06, 0, 0, 0, 0.06, 0, 0.385809, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.76287, 0.437195)
|
||||||
|
size = Vector3(2.1, 1.21, 0.66)
|
||||||
|
|
||||||
|
[node name="CSGBox3D2" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.50532, 0.844074)
|
||||||
|
size = Vector3(0.57, 0.365, 0.22)
|
||||||
|
|
||||||
|
[node name="CSGBox3D3" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.07889, 0)
|
||||||
|
size = Vector3(3.01, 0.275, 2.145)
|
||||||
|
|
||||||
|
[node name="CSGBox3D4" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.17866, 0.464503, 0.722973)
|
||||||
|
size = Vector3(0.355, 1, 0.37)
|
||||||
|
|
||||||
|
[node name="CSGBox3D5" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.20564, 0.464503, 0.744042)
|
||||||
|
size = Vector3(0.355, 1, 0.37)
|
||||||
|
|
||||||
|
[node name="CSGBox3D6" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.21651, 0.464503, -0.703903)
|
||||||
|
size = Vector3(0.355, 1, 0.37)
|
||||||
|
|
||||||
|
[node name="CSGBox3D7" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.20425, 0.464503, -0.796043)
|
||||||
|
size = Vector3(0.355, 1, 0.37)
|
||||||
|
|
||||||
|
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="."]
|
||||||
|
transform = Transform3D(0.791895, -0.610657, 0, 0.610657, 0.791895, 0, 0, 0, 1, -0.894404, 2.86265, 0.47663)
|
||||||
|
radius = 0.131
|
||||||
|
height = 1.627
|
||||||
|
|
||||||
|
[node name="CSGCylinder3D2" type="CSGCylinder3D" parent="."]
|
||||||
|
transform = Transform3D(0.74906, 0.662502, 0, -0.662502, 0.74906, 0, 0, 0, 1, 1.08608, 2.86265, 0.47663)
|
||||||
|
radius = 0.131
|
||||||
|
height = 1.627
|
||||||
|
|
||||||
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.00228882, 1.78986, 0.431061)
|
||||||
|
shape = SubResource("BoxShape3D_21y4o")
|
||||||
|
|
||||||
[connection signal="button_interacted" from="StaticBody3D" to="." method="_on_static_body_3d_button_interacted"]
|
[connection signal="button_interacted" from="StaticBody3D" to="." method="_on_static_body_3d_button_interacted"]
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ class_name ShopStand extends Node3D
|
|||||||
@export var choice_buttons: Array[InteractButton]
|
@export var choice_buttons: Array[InteractButton]
|
||||||
@export var choice_sprites: Array[Sprite3D]
|
@export var choice_sprites: Array[Sprite3D]
|
||||||
@export var item_card_scene: PackedScene
|
@export var item_card_scene: PackedScene
|
||||||
|
@export var blank_button: InteractButton
|
||||||
|
@export var blank_button_collider: CollisionShape3D
|
||||||
|
@export var blank_models: Array[CSGBox3D]
|
||||||
|
|
||||||
var price_dict: Dictionary = {
|
var price_dict: Dictionary = {
|
||||||
Data.Rarity.UNCOMMON : 25,
|
Data.Rarity.UNCOMMON : 25,
|
||||||
@@ -14,13 +17,18 @@ var price_dict: Dictionary = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var cards_generated: int = 0
|
var cards_generated: int = 0
|
||||||
|
var blanks_available: int = 5
|
||||||
|
var blank_cost: int = 20
|
||||||
|
|
||||||
|
|
||||||
func close() -> void:
|
func close() -> void:
|
||||||
for x: CollisionShape3D in choice_colliders:
|
for x: CollisionShape3D in choice_colliders:
|
||||||
x.disabled = true
|
x.disabled = true
|
||||||
for x: Sprite3D in choice_sprites:
|
for x: Sprite3D in choice_sprites:
|
||||||
x.set_visible(false)
|
x.visible = false
|
||||||
|
for x: CSGBox3D in blank_models:
|
||||||
|
x.visible = false
|
||||||
|
blank_button_collider.disabled = true
|
||||||
|
|
||||||
|
|
||||||
func randomize_cards() -> void:
|
func randomize_cards() -> void:
|
||||||
@@ -82,7 +90,11 @@ func randomize_cards() -> void:
|
|||||||
for x: CollisionShape3D in choice_colliders:
|
for x: CollisionShape3D in choice_colliders:
|
||||||
x.set_deferred("disabled", false)
|
x.set_deferred("disabled", false)
|
||||||
for x: Sprite3D in choice_sprites:
|
for x: Sprite3D in choice_sprites:
|
||||||
x.set_visible(true)
|
x.visible = true
|
||||||
|
for x: CSGBox3D in blank_models:
|
||||||
|
x.visible = true
|
||||||
|
blank_button_collider.disabled = false
|
||||||
|
blank_button.hover_text = "#Interact# Spend $" + str(blank_cost) + " to acquire a blank cassette"
|
||||||
|
|
||||||
|
|
||||||
func retrieve_card(i: int, callback: Hero) -> void:
|
func retrieve_card(i: int, callback: Hero) -> void:
|
||||||
@@ -101,3 +113,13 @@ func retrieve_card(i: int, callback: Hero) -> void:
|
|||||||
#add_child(item)
|
#add_child(item)
|
||||||
#button_collider.disabled = false
|
#button_collider.disabled = false
|
||||||
#button_box.position = Vector3(0,0,0)
|
#button_box.position = Vector3(0,0,0)
|
||||||
|
|
||||||
|
|
||||||
|
func retrieve_blank(i: int, callback: Hero) -> void:
|
||||||
|
if callback.currency >= blank_cost:
|
||||||
|
blank_models[5 - blanks_available].visible = false
|
||||||
|
blanks_available -= 1
|
||||||
|
callback.currency -= blank_cost
|
||||||
|
callback.blank_cassettes += 1
|
||||||
|
if blanks_available == 0:
|
||||||
|
blank_button_collider.disabled = true
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=16 format=3 uid="uid://7g3jev3v6d3l"]
|
[gd_scene load_steps=17 format=3 uid="uid://7g3jev3v6d3l"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://colk6js4wet11" path="res://Scenes/ShopStand/shop_stand.gd" id="1_4in53"]
|
[ext_resource type="Script" uid="uid://colk6js4wet11" path="res://Scenes/ShopStand/shop_stand.gd" id="1_4in53"]
|
||||||
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://Scripts/interact_button.gd" id="1_x8sts"]
|
[ext_resource type="Script" uid="uid://dkfswql8ui0bt" path="res://Scripts/interact_button.gd" id="1_x8sts"]
|
||||||
@@ -17,6 +17,9 @@ albedo_color = Color(0.313726, 0.180392, 0.00392157, 1)
|
|||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_3a288"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_3a288"]
|
||||||
size = Vector3(2.95542, 2.01704, 1.92446)
|
size = Vector3(2.95542, 2.01704, 1.92446)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_txjtg"]
|
||||||
|
size = Vector3(0.427765, 0.430664, 0.898926)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_3r1g8"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_3r1g8"]
|
||||||
size = Vector3(0.69, 0.665, 0.34)
|
size = Vector3(0.69, 0.665, 0.34)
|
||||||
|
|
||||||
@@ -38,16 +41,20 @@ viewport_path = NodePath("SubViewport5")
|
|||||||
[sub_resource type="ViewportTexture" id="ViewportTexture_rnm0u"]
|
[sub_resource type="ViewportTexture" id="ViewportTexture_rnm0u"]
|
||||||
viewport_path = NodePath("SubViewport6")
|
viewport_path = NodePath("SubViewport6")
|
||||||
|
|
||||||
[node name="ShopStand" type="Node3D" node_paths=PackedStringArray("cards", "choice_colliders", "choice_buttons", "choice_sprites")]
|
[node name="ShopStand" type="Node3D" node_paths=PackedStringArray("cards", "choice_colliders", "choice_buttons", "choice_sprites", "blank_button", "blank_button_collider", "blank_models")]
|
||||||
script = ExtResource("1_4in53")
|
script = ExtResource("1_4in53")
|
||||||
cards = [NodePath("SubViewport/Node2D"), NodePath("SubViewport2/Node2D"), NodePath("SubViewport3/Node2D"), NodePath("SubViewport4/Node2D"), NodePath("SubViewport5/Node2D"), NodePath("SubViewport6/Node2D")]
|
cards = [NodePath("SubViewport/Node2D"), NodePath("SubViewport2/Node2D"), NodePath("SubViewport3/Node2D"), NodePath("SubViewport4/Node2D"), NodePath("SubViewport5/Node2D"), NodePath("SubViewport6/Node2D")]
|
||||||
choice_colliders = [NodePath("InteractButton/CollisionShape3D"), NodePath("InteractButton2/CollisionShape3D2"), NodePath("InteractButton3/CollisionShape3D3"), NodePath("InteractButton6/CollisionShape3D6"), NodePath("InteractButton5/CollisionShape3D5"), NodePath("InteractButton4/CollisionShape3D4")]
|
choice_colliders = [NodePath("InteractButton/CollisionShape3D"), NodePath("InteractButton2/CollisionShape3D2"), NodePath("InteractButton3/CollisionShape3D3"), NodePath("InteractButton6/CollisionShape3D6"), NodePath("InteractButton5/CollisionShape3D5"), NodePath("InteractButton4/CollisionShape3D4")]
|
||||||
choice_buttons = [NodePath("InteractButton"), NodePath("InteractButton2"), NodePath("InteractButton3"), NodePath("InteractButton6"), NodePath("InteractButton5"), NodePath("InteractButton4")]
|
choice_buttons = [NodePath("InteractButton"), NodePath("InteractButton2"), NodePath("InteractButton3"), NodePath("InteractButton6"), NodePath("InteractButton5"), NodePath("InteractButton4")]
|
||||||
choice_sprites = [NodePath("Sprites/Sprite3D"), NodePath("Sprites/Sprite3D2"), NodePath("Sprites/Sprite3D3"), NodePath("Sprites/Sprite3D4"), NodePath("Sprites/Sprite3D5"), NodePath("Sprites/Sprite3D6")]
|
choice_sprites = [NodePath("Sprites/Sprite3D"), NodePath("Sprites/Sprite3D2"), NodePath("Sprites/Sprite3D3"), NodePath("Sprites/Sprite3D4"), NodePath("Sprites/Sprite3D5"), NodePath("Sprites/Sprite3D6")]
|
||||||
item_card_scene = ExtResource("2_qh00w")
|
item_card_scene = ExtResource("2_qh00w")
|
||||||
|
blank_button = NodePath("InteractButton7")
|
||||||
|
blank_button_collider = NodePath("InteractButton7/CollisionShape3D")
|
||||||
|
blank_models = [NodePath("CSGBox3D4"), NodePath("CSGBox3D5"), NodePath("CSGBox3D6"), NodePath("CSGBox3D7"), NodePath("CSGBox3D8")]
|
||||||
|
|
||||||
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
[node name="CSGBox3D" type="CSGBox3D" parent="."]
|
||||||
size = Vector3(2.95902, 1, 1)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.294425, 0, 0)
|
||||||
|
size = Vector3(3.54787, 1, 1)
|
||||||
material = SubResource("StandardMaterial3D_lhc2g")
|
material = SubResource("StandardMaterial3D_lhc2g")
|
||||||
|
|
||||||
[node name="CSGBox3D2" type="CSGBox3D" parent="."]
|
[node name="CSGBox3D2" type="CSGBox3D" parent="."]
|
||||||
@@ -66,6 +73,17 @@ material = SubResource("StandardMaterial3D_4tjcf")
|
|||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.502094, -0.465026)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.502094, -0.465026)
|
||||||
shape = SubResource("BoxShape3D_3a288")
|
shape = SubResource("BoxShape3D_3a288")
|
||||||
|
|
||||||
|
[node name="InteractButton7" type="StaticBody3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.73285, 0.835364, 0.235621)
|
||||||
|
collision_layer = 16
|
||||||
|
collision_mask = 0
|
||||||
|
script = ExtResource("1_x8sts")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="InteractButton7"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0624237, -0.101074, -0.214111)
|
||||||
|
shape = SubResource("BoxShape3D_txjtg")
|
||||||
|
disabled = true
|
||||||
|
|
||||||
[node name="InteractButton" type="StaticBody3D" parent="."]
|
[node name="InteractButton" type="StaticBody3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.08327, 0.835364, 0.235621)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.08327, 0.835364, 0.235621)
|
||||||
collision_layer = 16
|
collision_layer = 16
|
||||||
@@ -211,6 +229,32 @@ pixel_size = 0.0015
|
|||||||
texture_filter = 0
|
texture_filter = 0
|
||||||
texture = SubResource("ViewportTexture_rnm0u")
|
texture = SubResource("ViewportTexture_rnm0u")
|
||||||
|
|
||||||
|
[node name="CSGBox3D4" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.236721)
|
||||||
|
visible = false
|
||||||
|
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||||
|
|
||||||
|
[node name="CSGBox3D5" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.14049)
|
||||||
|
visible = false
|
||||||
|
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||||
|
|
||||||
|
[node name="CSGBox3D6" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, 0.0426871)
|
||||||
|
visible = false
|
||||||
|
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||||
|
|
||||||
|
[node name="CSGBox3D7" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, -0.0568752)
|
||||||
|
visible = false
|
||||||
|
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||||
|
|
||||||
|
[node name="CSGBox3D8" type="CSGBox3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.79147, 0.620414, -0.151894)
|
||||||
|
visible = false
|
||||||
|
size = Vector3(0.367981, 0.236755, 0.0673828)
|
||||||
|
|
||||||
|
[connection signal="button_interacted" from="InteractButton7" to="." method="retrieve_blank"]
|
||||||
[connection signal="button_interacted" from="InteractButton" to="." method="retrieve_card"]
|
[connection signal="button_interacted" from="InteractButton" to="." method="retrieve_card"]
|
||||||
[connection signal="button_interacted" from="InteractButton2" to="." method="retrieve_card"]
|
[connection signal="button_interacted" from="InteractButton2" to="." method="retrieve_card"]
|
||||||
[connection signal="button_interacted" from="InteractButton3" to="." method="retrieve_card"]
|
[connection signal="button_interacted" from="InteractButton3" to="." method="retrieve_card"]
|
||||||
|
|||||||
@@ -78,9 +78,10 @@ func networked_spawn_tower(card_index: int, caller_id: int) -> void:
|
|||||||
|
|
||||||
@rpc("reliable", "call_local", "any_peer")
|
@rpc("reliable", "call_local", "any_peer")
|
||||||
func networked_remove_tower() -> void:
|
func networked_remove_tower() -> void:
|
||||||
inventory.remove_at(0)
|
var card: Card = inventory.remove_at(0)
|
||||||
#game_manager.connected_players_nodes[tower.owner_id].add_card(inventory.remove_at(0))
|
if !game_manager.card_gameplay:
|
||||||
#game_manager.connected_players_nodes[tower.owner_id].unready_self()
|
game_manager.connected_players_nodes[tower.owner_id].add_card(card)
|
||||||
|
game_manager.connected_players_nodes[tower.owner_id].unready_self()
|
||||||
tower.queue_free()
|
tower.queue_free()
|
||||||
#disable_duration_sprites()
|
#disable_duration_sprites()
|
||||||
tower = null
|
tower = null
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ static var weapon_recharge_delay: float = 0.5
|
|||||||
static var starting_cash: int = 10
|
static var starting_cash: int = 10
|
||||||
static var player_energy: int = 6
|
static var player_energy: int = 6
|
||||||
static var wall_cost: int = 1
|
static var wall_cost: int = 1
|
||||||
static var printer_cost: int = 15
|
|
||||||
static var rarity_weights: Dictionary = {
|
static var rarity_weights: Dictionary = {
|
||||||
"COMMON" = 50,
|
"COMMON" = 50,
|
||||||
"UNCOMMON" = 30,
|
"UNCOMMON" = 30,
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ var chatbox: Chatbox
|
|||||||
var wave_limit: int = 20
|
var wave_limit: int = 20
|
||||||
var shop_chance: float = 0.0
|
var shop_chance: float = 0.0
|
||||||
var stats: RoundStats
|
var stats: RoundStats
|
||||||
|
var card_gameplay: bool = false
|
||||||
|
|
||||||
|
|
||||||
#TODO: Create a reference to some generic Lobby object that wraps the multiplayer players list stuff
|
#TODO: Create a reference to some generic Lobby object that wraps the multiplayer players list stuff
|
||||||
@@ -125,6 +126,7 @@ func spawn_players() -> void:
|
|||||||
player.game_manager = self
|
player.game_manager = self
|
||||||
player.edit_tool.level = level
|
player.edit_tool.level = level
|
||||||
player.hud.map_anchor = level
|
player.hud.map_anchor = level
|
||||||
|
player.blank_cassettes += 1
|
||||||
player.player_name_tag.text = connected_player_profiles[peer_id].display_name
|
player.player_name_tag.text = connected_player_profiles[peer_id].display_name
|
||||||
player.position = level.player_spawns[p_i].global_position
|
player.position = level.player_spawns[p_i].global_position
|
||||||
player.profile = connected_player_profiles[peer_id]
|
player.profile = connected_player_profiles[peer_id]
|
||||||
@@ -242,6 +244,8 @@ func end_wave() -> void:
|
|||||||
player.hud.set_wave_count(wave)
|
player.hud.set_wave_count(wave)
|
||||||
player.currency += ceili(pot / connected_players_nodes.size())
|
player.currency += ceili(pot / connected_players_nodes.size())
|
||||||
player.energy = Data.player_energy
|
player.energy = Data.player_energy
|
||||||
|
player.blank_cassettes += 1
|
||||||
|
if card_gameplay:
|
||||||
player.iterate_duration()
|
player.iterate_duration()
|
||||||
player.draw_to_hand_size()
|
player.draw_to_hand_size()
|
||||||
player.unready_self()
|
player.unready_self()
|
||||||
@@ -309,6 +313,7 @@ func start() -> void:
|
|||||||
spawn_players()
|
spawn_players()
|
||||||
for peer_id: int in connected_players_nodes:
|
for peer_id: int in connected_players_nodes:
|
||||||
connected_players_nodes[peer_id].currency = ceili(float(Data.starting_cash) / float(connected_players_nodes.size()))
|
connected_players_nodes[peer_id].currency = ceili(float(Data.starting_cash) / float(connected_players_nodes.size()))
|
||||||
|
if card_gameplay:
|
||||||
connected_players_nodes[peer_id].energy = Data.player_energy
|
connected_players_nodes[peer_id].energy = Data.player_energy
|
||||||
connected_players_nodes[peer_id].draw_pile.shuffle()
|
connected_players_nodes[peer_id].draw_pile.shuffle()
|
||||||
connected_players_nodes[peer_id].draw_to_hand_size()
|
connected_players_nodes[peer_id].draw_to_hand_size()
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
class_name CardSelectionBox
|
class_name CardSelectionBox
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
|
var card: Card
|
||||||
@export var icon: TextureRect
|
@export var icon: TextureRect
|
||||||
@export var tags: VBoxContainer
|
@export var tags: VBoxContainer
|
||||||
@export var cost_label: Label
|
@export var cost_label: Label
|
||||||
@@ -14,6 +15,7 @@ func set_amount(num: int) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func set_card(card: Card) -> void:
|
func set_card(card: Card) -> void:
|
||||||
|
self.card = card
|
||||||
icon.texture = card.icon
|
icon.texture = card.icon
|
||||||
cost_label.text = str(card.cost)
|
cost_label.text = str(card.cost)
|
||||||
for i: int in tags.get_child_count():
|
for i: int in tags.get_child_count():
|
||||||
|
|||||||
@@ -77,6 +77,5 @@ offset_top = 100.0
|
|||||||
offset_right = 25.0
|
offset_right = 25.0
|
||||||
offset_bottom = 150.0
|
offset_bottom = 150.0
|
||||||
bbcode_enabled = true
|
bbcode_enabled = true
|
||||||
text = "[img=top,50]/home/lexi/godot/multiplayer_tower_defense/UI/Keybinding/XeluController&KeyPrompts/Keyboard & Mouse/Light/1_Key_Light.png[/img]"
|
|
||||||
fit_content = true
|
fit_content = true
|
||||||
vertical_alignment = 2
|
vertical_alignment = 2
|
||||||
|
|||||||
@@ -35,30 +35,36 @@ func _process(_delta: float) -> void:
|
|||||||
func interact() -> void:
|
func interact() -> void:
|
||||||
if ray.is_colliding() and ray.get_collider() is TowerBase:
|
if ray.is_colliding() and ray.get_collider() is TowerBase:
|
||||||
var tower_base: TowerBase = ray.get_collider() as TowerBase
|
var tower_base: TowerBase = ray.get_collider() as TowerBase
|
||||||
put_card_in_tower_base(tower_base)
|
if hero.game_manager.card_gameplay:
|
||||||
|
if hero.hand.size > 0:
|
||||||
|
place_card(tower_base)
|
||||||
|
else:
|
||||||
|
if tower_base.has_card:
|
||||||
|
remove_card(tower_base)
|
||||||
|
elif hero.hand.size > 0:
|
||||||
|
place_card(tower_base)
|
||||||
|
|
||||||
|
|
||||||
func put_card_in_tower_base(tower_base: TowerBase) -> void:
|
func place_card(tower_base: TowerBase) -> void:
|
||||||
if hero.hand.size <= 0:
|
|
||||||
return
|
|
||||||
var card: Card = hero.selected_card
|
var card: Card = hero.selected_card
|
||||||
var energy_cost: int = card.cost
|
var energy_cost: int = card.cost
|
||||||
if hero.energy < energy_cost:
|
if hero.game_manager.card_gameplay and hero.energy < energy_cost:
|
||||||
return
|
return
|
||||||
if tower_base.has_card:
|
remove_card(tower_base)
|
||||||
tower_base.remove_card()
|
|
||||||
hero.hand.remove_at(hero.hand.contents.find(card))
|
hero.hand.remove_at(hero.hand.contents.find(card))
|
||||||
hero.check_removal()
|
hero.check_removal()
|
||||||
#hero.card_sprites[hero.hand_selected_index].queue_free()
|
|
||||||
#hero.card_sprites.remove_at(hero.hand_selected_index)
|
|
||||||
#if !hero.hand.contents.has(card):
|
|
||||||
#hero.decrement_selected()
|
|
||||||
tower_base.add_card(card, multiplayer.get_unique_id())
|
tower_base.add_card(card, multiplayer.get_unique_id())
|
||||||
hero.discard_pile.add(card)
|
|
||||||
hero.place_card_audio.play()
|
hero.place_card_audio.play()
|
||||||
|
if hero.game_manager.card_gameplay:
|
||||||
|
hero.discard_pile.add(card)
|
||||||
hero.energy -= energy_cost
|
hero.energy -= energy_cost
|
||||||
|
|
||||||
|
|
||||||
|
func remove_card(tower_base: TowerBase) -> void:
|
||||||
|
if tower_base.has_card:
|
||||||
|
tower_base.remove_card()
|
||||||
|
|
||||||
|
|
||||||
func spawn_tower_preview() -> void:
|
func spawn_tower_preview() -> void:
|
||||||
delete_tower_preview()
|
delete_tower_preview()
|
||||||
var card: Card = hero.selected_card
|
var card: Card = hero.selected_card
|
||||||
|
|||||||
39
choose_card_screen.gd
Normal file
39
choose_card_screen.gd
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
class_name ChooseCardScreen extends Control
|
||||||
|
|
||||||
|
signal card_chosen(card: Card)
|
||||||
|
|
||||||
|
@export var choice_buttons: VBoxContainer
|
||||||
|
@export var card_name_label: Label
|
||||||
|
@export var card_description_label: RichTextLabel
|
||||||
|
|
||||||
|
var choices: Array[Card] = []
|
||||||
|
var chosen_card: Card = null
|
||||||
|
var side_a: bool = true
|
||||||
|
|
||||||
|
|
||||||
|
func add_cards(cards: Array[Card]) -> void:
|
||||||
|
var x: int = 0
|
||||||
|
for card: Card in cards:
|
||||||
|
var button: Button = Button.new()
|
||||||
|
button.text = card.display_name
|
||||||
|
button.pressed.connect(choose_card.bind(x))
|
||||||
|
choices.append(card)
|
||||||
|
choice_buttons.add_child(button)
|
||||||
|
x += 1
|
||||||
|
choose_card(0)
|
||||||
|
|
||||||
|
|
||||||
|
func choose_card(choice: int) -> void:
|
||||||
|
chosen_card = choices[choice]
|
||||||
|
card_name_label.text = chosen_card.display_name
|
||||||
|
choose_side(side_a)
|
||||||
|
|
||||||
|
|
||||||
|
func choose_side(side_a_chosen: bool) -> void:
|
||||||
|
side_a = side_a_chosen
|
||||||
|
card_description_label.text = chosen_card.tower_stats.text if side_a else chosen_card.weapon_stats.text
|
||||||
|
|
||||||
|
|
||||||
|
func _on_confirm_button_pressed() -> void:
|
||||||
|
card_chosen.emit(chosen_card)
|
||||||
|
queue_free()
|
||||||
1
choose_card_screen.gd.uid
Normal file
1
choose_card_screen.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://nc0df5y8tll7
|
||||||
108
choose_card_screen.tscn
Normal file
108
choose_card_screen.tscn
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
[gd_scene load_steps=2 format=3 uid="uid://bcvjgl0s1wp8y"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://nc0df5y8tll7" path="res://choose_card_screen.gd" id="1_y4oar"]
|
||||||
|
|
||||||
|
[node name="ChooseCardScreen" type="Control" node_paths=PackedStringArray("choice_buttons", "card_name_label", "card_description_label")]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
script = ExtResource("1_y4oar")
|
||||||
|
choice_buttons = NodePath("PanelContainer/Content/HBoxContainer/ChoicesVBox")
|
||||||
|
card_name_label = NodePath("PanelContainer/Content/HBoxContainer/VBoxContainer/NameLabel")
|
||||||
|
card_description_label = NodePath("PanelContainer/Content/HBoxContainer/DescriptionVBox/RichTextLabel")
|
||||||
|
|
||||||
|
[node name="PanelContainer" type="PanelContainer" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 0.03
|
||||||
|
anchor_top = 0.03
|
||||||
|
anchor_right = 0.97
|
||||||
|
anchor_bottom = 0.97
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="Content" type="VBoxContainer" parent="PanelContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
|
||||||
|
[node name="ScreenTitleLabel" type="Label" parent="PanelContainer/Content"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "LABEL_CHOOSE_CARD"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/Content"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="ChoicesVBox" type="VBoxContainer" parent="PanelContainer/Content/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer/Content/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_stretch_ratio = 2.0
|
||||||
|
|
||||||
|
[node name="NameLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "LABEL_CARD_NAME"
|
||||||
|
horizontal_alignment = 1
|
||||||
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="TowerButton" type="Button" parent="PanelContainer/Content/HBoxContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "BUTTON_VIEW_TOWER"
|
||||||
|
|
||||||
|
[node name="WeaponButton" type="Button" parent="PanelContainer/Content/HBoxContainer/VBoxContainer/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "BUTTON_VIEW_WEAPON"
|
||||||
|
|
||||||
|
[node name="TextureRect" type="TextureRect" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="ConfirmButton" type="Button" parent="PanelContainer/Content/HBoxContainer/VBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 4
|
||||||
|
text = "BUTTON_FINALIZE_CARD_CHOICE"
|
||||||
|
|
||||||
|
[node name="DescriptionVBox" type="VBoxContainer" parent="PanelContainer/Content/HBoxContainer"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 3
|
||||||
|
|
||||||
|
[node name="DescriptionLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "LABEL_CARD_DESCRIPTION"
|
||||||
|
|
||||||
|
[node name="RichTextLabel" type="RichTextLabel" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
text = "a long ass example description of a card that goes into honestly way too much detail but at least if we can support a lot of text at a good size then we dont have to worry about really complicated cards fucking up our UI later in developement if we end up needing to explain a lot"
|
||||||
|
|
||||||
|
[node name="FeaturesLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "LABEL_CARD_FEATURES"
|
||||||
|
|
||||||
|
[node name="FeaturesVBox" type="VBoxContainer" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[node name="TargettingLabel" type="Label" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "LABEL_TARGET_LIST"
|
||||||
|
|
||||||
|
[node name="TargetVBox" type="VBoxContainer" parent="PanelContainer/Content/HBoxContainer/DescriptionVBox"]
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_vertical = 3
|
||||||
|
|
||||||
|
[connection signal="pressed" from="PanelContainer/Content/HBoxContainer/VBoxContainer/HBoxContainer/TowerButton" to="." method="choose_side" binds= [true]]
|
||||||
|
[connection signal="pressed" from="PanelContainer/Content/HBoxContainer/VBoxContainer/HBoxContainer/WeaponButton" to="." method="choose_side" binds= [false]]
|
||||||
|
[connection signal="pressed" from="PanelContainer/Content/HBoxContainer/VBoxContainer/ConfirmButton" to="." method="_on_confirm_button_pressed"]
|
||||||
@@ -9,7 +9,7 @@ custom_features=""
|
|||||||
export_filter="all_resources"
|
export_filter="all_resources"
|
||||||
include_filter=""
|
include_filter=""
|
||||||
exclude_filter=""
|
exclude_filter=""
|
||||||
export_path="../../tower_defense/Linux/Decked Out Defense"
|
export_path="../../Decked Out Defense/DeckedOutDefense"
|
||||||
patches=PackedStringArray()
|
patches=PackedStringArray()
|
||||||
encryption_include_filters=""
|
encryption_include_filters=""
|
||||||
encryption_exclude_filters=""
|
encryption_exclude_filters=""
|
||||||
@@ -23,7 +23,7 @@ script_export_mode=2
|
|||||||
custom_template/debug=""
|
custom_template/debug=""
|
||||||
custom_template/release=""
|
custom_template/release=""
|
||||||
debug/export_console_wrapper=1
|
debug/export_console_wrapper=1
|
||||||
binary_format/embed_pck=true
|
binary_format/embed_pck=false
|
||||||
texture_format/s3tc_bptc=true
|
texture_format/s3tc_bptc=true
|
||||||
texture_format/etc2_astc=false
|
texture_format/etc2_astc=false
|
||||||
binary_format/architecture="x86_64"
|
binary_format/architecture="x86_64"
|
||||||
@@ -55,7 +55,7 @@ custom_features=""
|
|||||||
export_filter="all_resources"
|
export_filter="all_resources"
|
||||||
include_filter=""
|
include_filter=""
|
||||||
exclude_filter=""
|
exclude_filter=""
|
||||||
export_path="../../tower_defense/Windows/Decked Out Defense.exe"
|
export_path="../../Decked Out Defense/DeckedOutDefense.exe"
|
||||||
patches=PackedStringArray()
|
patches=PackedStringArray()
|
||||||
encryption_include_filters=""
|
encryption_include_filters=""
|
||||||
encryption_exclude_filters=""
|
encryption_exclude_filters=""
|
||||||
@@ -69,7 +69,7 @@ script_export_mode=2
|
|||||||
custom_template/debug=""
|
custom_template/debug=""
|
||||||
custom_template/release=""
|
custom_template/release=""
|
||||||
debug/export_console_wrapper=1
|
debug/export_console_wrapper=1
|
||||||
binary_format/embed_pck=true
|
binary_format/embed_pck=false
|
||||||
texture_format/s3tc_bptc=true
|
texture_format/s3tc_bptc=true
|
||||||
texture_format/etc2_astc=false
|
texture_format/etc2_astc=false
|
||||||
binary_format/architecture="x86_64"
|
binary_format/architecture="x86_64"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Decked Out Defense"
|
config/name="Decked Out Defense"
|
||||||
config/version="0.2.0"
|
config/version="0.3.0"
|
||||||
run/main_scene="uid://d2k8y13qfvch0"
|
run/main_scene="uid://d2k8y13qfvch0"
|
||||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||||
boot_splash/show_image=false
|
boot_splash/show_image=false
|
||||||
|
|||||||
Reference in New Issue
Block a user