summaryrefslogtreecommitdiff
path: root/Towers
diff options
context:
space:
mode:
Diffstat (limited to 'Towers')
-rw-r--r--Towers/Components/Assets/poison-component.pngbin0 -> 176 bytes
-rw-r--r--Towers/Components/Assets/poison-component.png.import34
-rw-r--r--Towers/Components/AttackComponent.gd.uid1
-rw-r--r--Towers/Components/AttackComponent.tscn2
-rw-r--r--Towers/Components/BurnComponent.gd.uid1
-rw-r--r--Towers/Components/BurnComponent.tscn4
-rw-r--r--Towers/Components/FrostComponent.gd.uid1
-rw-r--r--Towers/Components/FrostComponent.tscn2
-rw-r--r--Towers/Components/PoisonComponent.gd7
-rw-r--r--Towers/Components/PoisonComponent.gd.uid1
-rw-r--r--Towers/Components/PoisonComponent.tscn12
-rw-r--r--Towers/Components/RangeComponent.gd.uid1
-rw-r--r--Towers/Components/RangeComponent.tscn2
-rw-r--r--Towers/Components/TowerComponent.gd7
-rw-r--r--Towers/Components/TowerComponent.gd.uid1
-rw-r--r--Towers/Components/TowerComponent.tscn3
-rw-r--r--Towers/PlacementParticles.tscn2
-rw-r--r--Towers/Tower.gd94
-rw-r--r--Towers/Tower.gd.uid1
-rw-r--r--Towers/Tower.tscn8
-rw-r--r--Towers/placement_particles.gd.uid1
-rw-r--r--Towers/replicated_tower.gd.uid1
22 files changed, 119 insertions, 67 deletions
diff --git a/Towers/Components/Assets/poison-component.png b/Towers/Components/Assets/poison-component.png
new file mode 100644
index 0000000..76f561d
--- /dev/null
+++ b/Towers/Components/Assets/poison-component.png
Binary files differ
diff --git a/Towers/Components/Assets/poison-component.png.import b/Towers/Components/Assets/poison-component.png.import
new file mode 100644
index 0000000..8a1c383
--- /dev/null
+++ b/Towers/Components/Assets/poison-component.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rkeldjv41ww8"
+path="res://.godot/imported/poison-component.png-83d1bbb149be90a9cdae02ce5657d8f9.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Towers/Components/Assets/poison-component.png"
+dest_files=["res://.godot/imported/poison-component.png-83d1bbb149be90a9cdae02ce5657d8f9.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/Towers/Components/AttackComponent.gd.uid b/Towers/Components/AttackComponent.gd.uid
new file mode 100644
index 0000000..5505517
--- /dev/null
+++ b/Towers/Components/AttackComponent.gd.uid
@@ -0,0 +1 @@
+uid://drm6inokng5c7
diff --git a/Towers/Components/AttackComponent.tscn b/Towers/Components/AttackComponent.tscn
index 2cad794..e251f0a 100644
--- a/Towers/Components/AttackComponent.tscn
+++ b/Towers/Components/AttackComponent.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://4nd1npteqvh3"]
[ext_resource type="PackedScene" uid="uid://cly4agfoqhq2q" path="res://Towers/Components/TowerComponent.tscn" id="1_j2cqy"]
-[ext_resource type="Script" path="res://Towers/Components/AttackComponent.gd" id="2_dbyck"]
+[ext_resource type="Script" uid="uid://drm6inokng5c7" path="res://Towers/Components/AttackComponent.gd" id="2_dbyck"]
[ext_resource type="Texture2D" uid="uid://gbknvb38euuq" path="res://Towers/Components/Assets/attack-component.png" id="2_vr0du"]
[ext_resource type="AudioStream" uid="uid://cpkwvp5llf7x6" path="res://Towers/Assets/shoot.ogg" id="4_ytht8"]
diff --git a/Towers/Components/BurnComponent.gd.uid b/Towers/Components/BurnComponent.gd.uid
new file mode 100644
index 0000000..f52a67d
--- /dev/null
+++ b/Towers/Components/BurnComponent.gd.uid
@@ -0,0 +1 @@
+uid://br4sqt6lj7wyo
diff --git a/Towers/Components/BurnComponent.tscn b/Towers/Components/BurnComponent.tscn
index 285cfa0..fdf4ae4 100644
--- a/Towers/Components/BurnComponent.tscn
+++ b/Towers/Components/BurnComponent.tscn
@@ -1,10 +1,10 @@
[gd_scene load_steps=4 format=3 uid="uid://c0xtty8n0lwpr"]
[ext_resource type="PackedScene" uid="uid://cly4agfoqhq2q" path="res://Towers/Components/TowerComponent.tscn" id="1_56lm4"]
-[ext_resource type="Script" path="res://Towers/Components/BurnComponent.gd" id="2_nevgj"]
+[ext_resource type="Script" uid="uid://br4sqt6lj7wyo" path="res://Towers/Components/BurnComponent.gd" id="2_nevgj"]
[ext_resource type="Texture2D" uid="uid://2djpswd6sgng" path="res://Towers/Components/Assets/burn-component.png" id="3_o6seh"]
-[node name="TowerComponent" instance=ExtResource("1_56lm4")]
+[node name="BurnTowerComponent" instance=ExtResource("1_56lm4")]
script = ExtResource("2_nevgj")
type = 4
diff --git a/Towers/Components/FrostComponent.gd.uid b/Towers/Components/FrostComponent.gd.uid
new file mode 100644
index 0000000..0b67e37
--- /dev/null
+++ b/Towers/Components/FrostComponent.gd.uid
@@ -0,0 +1 @@
+uid://djvbqs5e7wgpl
diff --git a/Towers/Components/FrostComponent.tscn b/Towers/Components/FrostComponent.tscn
index 976d3e8..e43806e 100644
--- a/Towers/Components/FrostComponent.tscn
+++ b/Towers/Components/FrostComponent.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=4 format=3 uid="uid://b1opnngyr3de4"]
[ext_resource type="PackedScene" uid="uid://cly4agfoqhq2q" path="res://Towers/Components/TowerComponent.tscn" id="1_8hes5"]
-[ext_resource type="Script" path="res://Towers/Components/FrostComponent.gd" id="2_bsb0f"]
+[ext_resource type="Script" uid="uid://djvbqs5e7wgpl" path="res://Towers/Components/FrostComponent.gd" id="2_bsb0f"]
[ext_resource type="Texture2D" uid="uid://ba3dmlce1wv2p" path="res://Towers/Components/Assets/frost-component.png" id="3_qwp1n"]
[node name="FrostTowerComponent" instance=ExtResource("1_8hes5")]
diff --git a/Towers/Components/PoisonComponent.gd b/Towers/Components/PoisonComponent.gd
new file mode 100644
index 0000000..77ee4fb
--- /dev/null
+++ b/Towers/Components/PoisonComponent.gd
@@ -0,0 +1,7 @@
+extends TowerComponent
+
+
+func on_shoot(target: Unit):
+ var effect = preload("res://Effects/PoisonEffect.tscn").instantiate()
+ effect.level = level
+ target.add_effect(effect)
diff --git a/Towers/Components/PoisonComponent.gd.uid b/Towers/Components/PoisonComponent.gd.uid
new file mode 100644
index 0000000..76ca84c
--- /dev/null
+++ b/Towers/Components/PoisonComponent.gd.uid
@@ -0,0 +1 @@
+uid://cxdkv6sv0xeb3
diff --git a/Towers/Components/PoisonComponent.tscn b/Towers/Components/PoisonComponent.tscn
new file mode 100644
index 0000000..d7c257f
--- /dev/null
+++ b/Towers/Components/PoisonComponent.tscn
@@ -0,0 +1,12 @@
+[gd_scene load_steps=4 format=3 uid="uid://bx1bi1ko6tyqq"]
+
+[ext_resource type="PackedScene" uid="uid://cly4agfoqhq2q" path="res://Towers/Components/TowerComponent.tscn" id="1_euxd5"]
+[ext_resource type="Script" uid="uid://cxdkv6sv0xeb3" path="res://Towers/Components/PoisonComponent.gd" id="2_dnmjy"]
+[ext_resource type="Texture2D" uid="uid://rkeldjv41ww8" path="res://Towers/Components/Assets/poison-component.png" id="3_3hijl"]
+
+[node name="PoisonTowerComponent" instance=ExtResource("1_euxd5")]
+script = ExtResource("2_dnmjy")
+type = 5
+
+[node name="Sprite" parent="." index="0"]
+texture = ExtResource("3_3hijl")
diff --git a/Towers/Components/RangeComponent.gd.uid b/Towers/Components/RangeComponent.gd.uid
new file mode 100644
index 0000000..d0d6a99
--- /dev/null
+++ b/Towers/Components/RangeComponent.gd.uid
@@ -0,0 +1 @@
+uid://027mfhg737fc
diff --git a/Towers/Components/RangeComponent.tscn b/Towers/Components/RangeComponent.tscn
index 1047529..f22f71e 100644
--- a/Towers/Components/RangeComponent.tscn
+++ b/Towers/Components/RangeComponent.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://b0bdw5n6p5k8u"]
[ext_resource type="PackedScene" uid="uid://cly4agfoqhq2q" path="res://Towers/Components/TowerComponent.tscn" id="1_738xf"]
-[ext_resource type="Script" path="res://Towers/Components/RangeComponent.gd" id="2_4fk2a"]
+[ext_resource type="Script" uid="uid://027mfhg737fc" path="res://Towers/Components/RangeComponent.gd" id="2_4fk2a"]
[ext_resource type="Texture2D" uid="uid://dx07y4scyi5a1" path="res://Towers/Components/Assets/range-component.png" id="3_7nqma"]
[sub_resource type="CircleShape2D" id="CircleShape2D_q388v"]
diff --git a/Towers/Components/TowerComponent.gd b/Towers/Components/TowerComponent.gd
index 30b1c44..e9ecb94 100644
--- a/Towers/Components/TowerComponent.gd
+++ b/Towers/Components/TowerComponent.gd
@@ -13,6 +13,9 @@ enum ComponentType {
Frost,
Burn,
Poison,
+
+ Splash,
+ Aura,
}
@export var type: ComponentType
@@ -66,7 +69,9 @@ func update_with_network_data(data: NetworkData):
level = data.level
static func from_network_data(data: NetworkData) -> TowerComponent:
- var component = preload("res://Towers/Components/TowerComponent.gd").new()
+ var component = load(
+ "res://Towers/Components/%sComponent.tscn" % [ComponentType.keys()[data.type]]
+ ).instantiate()
component.type = data.type
component.level = data.level
diff --git a/Towers/Components/TowerComponent.gd.uid b/Towers/Components/TowerComponent.gd.uid
new file mode 100644
index 0000000..7f2813e
--- /dev/null
+++ b/Towers/Components/TowerComponent.gd.uid
@@ -0,0 +1 @@
+uid://btc4vor3b2tkj
diff --git a/Towers/Components/TowerComponent.tscn b/Towers/Components/TowerComponent.tscn
index 6b1d7b2..0ac2702 100644
--- a/Towers/Components/TowerComponent.tscn
+++ b/Towers/Components/TowerComponent.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cly4agfoqhq2q"]
-[ext_resource type="Script" path="res://Towers/Components/TowerComponent.gd" id="1_jb46t"]
+[ext_resource type="Script" uid="uid://btc4vor3b2tkj" path="res://Towers/Components/TowerComponent.gd" id="1_jb46t"]
[node name="TowerComponent" type="Node2D"]
visible = false
@@ -10,5 +10,6 @@ script = ExtResource("1_jb46t")
texture_filter = 1
offset_right = 40.0
offset_bottom = 40.0
+mouse_filter = 2
stretch_mode = 5
metadata/_edit_use_anchors_ = true
diff --git a/Towers/PlacementParticles.tscn b/Towers/PlacementParticles.tscn
index 845e451..ad30e11 100644
--- a/Towers/PlacementParticles.tscn
+++ b/Towers/PlacementParticles.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=13 format=3 uid="uid://dkt08nmsm7v6n"]
-[ext_resource type="Script" path="res://Towers/placement_particles.gd" id="1_jyqtu"]
+[ext_resource type="Script" uid="uid://bs5bt8i6fn72t" path="res://Towers/placement_particles.gd" id="1_jyqtu"]
[ext_resource type="Texture2D" uid="uid://jh1wdkkilude" path="res://Towers/Assets/building_placement.png" id="2_84hoe"]
[ext_resource type="AudioStream" uid="uid://bxpt1ooqt2mbg" path="res://Towers/Assets/building_placement.wav" id="3_0cdk8"]
diff --git a/Towers/Tower.gd b/Towers/Tower.gd
index 34e12ae..0b923ca 100644
--- a/Towers/Tower.gd
+++ b/Towers/Tower.gd
@@ -5,19 +5,17 @@ extends StaticBody2D
signal selected
signal deselected
+signal selected_primary
signal selected_secondary
-static var selected_towers: Array[Tower]
-static var hovered_tower: Tower
+signal hovered(is_hovered: bool)
+signal double_clicked
var is_selected := false:
set(value):
if value:
- if not Tower.selected_towers.has(self):
- Tower.selected_towers.append(self)
- selected.emit()
+ selected.emit()
else:
- Tower.selected_towers.erase(self)
deselected.emit()
is_highlighted = false
is_selected = value
@@ -25,14 +23,8 @@ var is_selected := false:
var is_hovered := false:
set(value):
- if value:
- hovered_tower = self
- Input.set_default_cursor_shape(Input.CURSOR_POINTING_HAND)
- else:
- if hovered_tower == self:
- hovered_tower = null
- Input.set_default_cursor_shape(Input.CURSOR_ARROW)
is_hovered = value
+ hovered.emit(is_hovered)
queue_redraw()
var is_highlighted := false:
@@ -54,6 +46,9 @@ signal components_changed
@export var components: Dictionary
+@onready var ground_anchor: Marker2D = $GroundAnchor
+
+
func _init():
scale = Vector2(Client.current_stage.map.tile_set.tile_size) / Vector2(16, 16)
@@ -61,7 +56,10 @@ func _init():
func _ready():
$AnimatedSprite2D.play()
- for component in [preload("res://Towers/Components/RangeComponent.tscn").instantiate(), preload("res://Towers/Components/AttackComponent.tscn").instantiate()]:
+ for component in [
+ preload("res://Towers/Components/RangeComponent.tscn").instantiate(),
+ preload("res://Towers/Components/AttackComponent.tscn").instantiate()
+ ]:
add_component(component)
redraw_components()
@@ -73,17 +71,6 @@ func _ready():
func _draw():
modulate = Color(1, 1, 1)
- if is_hovered:
- if Client.state is StateDefault:
- draw_circle(
- Vector2(Client.current_stage.map.tile_set.tile_size) / scale,
- 8 + components.get(TowerComponent.ComponentType.Range).range,
- Color(1, 1, 1, 0.5),
- false,
- 1.0
- )
- modulate = Color(1.25, 1.25, 1.25)
-
if is_selected:
modulate = Color(1.5, 1.5, 1.5)
@@ -104,19 +91,6 @@ func _process(delta: float) -> void:
component.process(delta)
-func _on_input_event(_viewport: Node, event: InputEvent, _shape_idx: int):
- # disable remote select for now
- if owner_id != multiplayer.get_unique_id():
- return
-
- if event.is_action_pressed("select_secondary"):
- selected_secondary.emit()
-
- if Client.state is StateBuild:
- if event.is_action_pressed("builder_cancel"):
- Client.remove_tower(self)
-
-
func _on_selectable_area_hover_enter() -> void:
is_hovered = true
@@ -128,14 +102,17 @@ func _on_selectable_area_select_primary(event: InputEvent) -> void:
if owner_id != multiplayer.get_unique_id():
return
- if Client.state is StateDefault:
- if Input.is_action_pressed("select_multiple") and is_selected:
- is_selected = false
- else:
- Client.select_tower(self)
-
- if event.is_double_click():
- Client.multi_select(3)
+ if event.is_double_click():
+ double_clicked.emit()
+ else:
+ selected_primary.emit()
+
+func _on_selectable_area_select_secondary(_event: InputEvent) -> void:
+ # disable remote select for now
+ if owner_id != multiplayer.get_unique_id():
+ return
+
+ selected_secondary.emit()
func add_component(component: TowerComponent):
@@ -151,12 +128,13 @@ func add_component(component: TowerComponent):
func redraw_components():
- var keys = components.keys()
- for idx in range(keys.size()):
- var key = keys[idx]
- var component: TowerComponent = components[key]
- var sprite = %ComponentsAnchor.get_node(NodePath(component.id))
- sprite.position.y = (idx + 1) * -16
+ pass
+ #var keys = components.keys()
+ #for idx in range(keys.size()):
+ #var key = keys[idx]
+ #var component: TowerComponent = components[key]
+ ##var sprite = %ComponentsAnchor.get_node(NodePath(component.id))
+ ##sprite.position.y = (idx + 1) * -16
func get_region():
@@ -180,7 +158,9 @@ func get_group_id() -> String:
func _on_tree_exiting() -> void:
- is_selected = false
+ if is_selected:
+ is_hovered = false
+ is_selected = false
@@ -220,9 +200,11 @@ func to_network_data() -> NetworkData:
func update_with_network_data(data: NetworkData):
for component_data in data.components:
- var component = get_node(component_data.path) as TowerComponent
- component.update_with_network_data(dict_to_inst(component_data))
- redraw_components()
+ var component = get_node_or_null(component_data.path) as TowerComponent
+ if not component:
+ add_component(TowerComponent.from_network_data(dict_to_inst(component_data)))
+ else:
+ component.update_with_network_data(dict_to_inst(component_data))
static func from_network_data(data: NetworkData) -> Tower:
var tower: Tower = preload("res://Towers/Tower.tscn").instantiate()
diff --git a/Towers/Tower.gd.uid b/Towers/Tower.gd.uid
new file mode 100644
index 0000000..0f0ea4c
--- /dev/null
+++ b/Towers/Tower.gd.uid
@@ -0,0 +1 @@
+uid://ds2fhg07x83lc
diff --git a/Towers/Tower.tscn b/Towers/Tower.tscn
index 839917c..598c37f 100644
--- a/Towers/Tower.tscn
+++ b/Towers/Tower.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=14 format=3 uid="uid://by1x56w21o165"]
-[ext_resource type="Script" path="res://Towers/Tower.gd" id="1_axo1d"]
+[ext_resource type="Script" uid="uid://ds2fhg07x83lc" path="res://Towers/Tower.gd" id="1_axo1d"]
[ext_resource type="Texture2D" uid="uid://b1b18rd0tqbar" path="res://core_outdoor.png" id="1_mrep8"]
[ext_resource type="PackedScene" uid="uid://cqktpc8c7ecn3" path="res://Game/Selection/SelectableArea.tscn" id="3_57d5u"]
[ext_resource type="Texture2D" uid="uid://dujcs2ls3u6tj" path="res://Towers/Assets/spritesheet.png" id="3_brkps"]
@@ -88,7 +88,8 @@ centered = false
position = Vector2(16, 16)
shape = SubResource("RectangleShape2D_atm5x")
-[node name="SelectableArea" parent="." instance=ExtResource("3_57d5u")]
+[node name="SelectableArea" parent="." node_paths=PackedStringArray("root") instance=ExtResource("3_57d5u")]
+root = NodePath("..")
[node name="CollisionShape2D" type="CollisionShape2D" parent="SelectableArea"]
position = Vector2(16, 16)
@@ -99,6 +100,7 @@ unique_name_in_owner = true
offset_right = 32.0
offset_bottom = 32.0
size_flags_vertical = 3
+mouse_filter = 2
theme_override_constants/h_separation = 0
theme_override_constants/v_separation = 0
reverse_fill = true
@@ -109,8 +111,8 @@ position = Vector2(16, 29)
[node name="CenterAnchor" type="Marker2D" parent="."]
position = Vector2(16, 16)
-[connection signal="input_event" from="." to="." method="_on_input_event"]
[connection signal="tree_exiting" from="." to="." method="_on_tree_exiting"]
[connection signal="hover_enter" from="SelectableArea" to="." method="_on_selectable_area_hover_enter"]
[connection signal="hover_exit" from="SelectableArea" to="." method="_on_selectable_area_hover_exit"]
[connection signal="select_primary" from="SelectableArea" to="." method="_on_selectable_area_select_primary"]
+[connection signal="select_secondary" from="SelectableArea" to="." method="_on_selectable_area_select_secondary"]
diff --git a/Towers/placement_particles.gd.uid b/Towers/placement_particles.gd.uid
new file mode 100644
index 0000000..4519406
--- /dev/null
+++ b/Towers/placement_particles.gd.uid
@@ -0,0 +1 @@
+uid://bs5bt8i6fn72t
diff --git a/Towers/replicated_tower.gd.uid b/Towers/replicated_tower.gd.uid
new file mode 100644
index 0000000..27d0e3d
--- /dev/null
+++ b/Towers/replicated_tower.gd.uid
@@ -0,0 +1 @@
+uid://cqrpyb6ps0x74