lot's of stuff
BIN
Assets/Characters/Female1.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
35
Assets/Characters/Female1.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://315k07rsgf6t"
|
||||
path.s3tc="res://.godot/imported/Female1.png-32c7b3afa8b348d789d25434c42d0b3a.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Characters/Female1.png"
|
||||
dest_files=["res://.godot/imported/Female1.png-32c7b3afa8b348d789d25434c42d0b3a.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
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=0
|
||||
BIN
Assets/Characters/Male1.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
35
Assets/Characters/Male1.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bn6ikwol6x8r0"
|
||||
path.s3tc="res://.godot/imported/Male1.png-771345d3aff75b5160c1a6dbc860364e.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Characters/Male1.png"
|
||||
dest_files=["res://.godot/imported/Male1.png-771345d3aff75b5160c1a6dbc860364e.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
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=0
|
||||
BIN
Assets/Emotes/emote_faceAngry.png
Normal file
|
After Width: | Height: | Size: 281 B |
34
Assets/Emotes/emote_faceAngry.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://y24ssl61l6uv"
|
||||
path="res://.godot/imported/emote_faceAngry.png-aa3a262420ef633dc34c39681d1c910c.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Emotes/emote_faceAngry.png"
|
||||
dest_files=["res://.godot/imported/emote_faceAngry.png-aa3a262420ef633dc34c39681d1c910c.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
|
||||
BIN
Assets/Emotes/emote_faceHappy.png
Normal file
|
After Width: | Height: | Size: 242 B |
34
Assets/Emotes/emote_faceHappy.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d362b57essjt6"
|
||||
path="res://.godot/imported/emote_faceHappy.png-6dd77ea09ad4351e746d9b3848f84e6e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Emotes/emote_faceHappy.png"
|
||||
dest_files=["res://.godot/imported/emote_faceHappy.png-6dd77ea09ad4351e746d9b3848f84e6e.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
|
||||
BIN
Assets/Emotes/emote_faceSad.png
Normal file
|
After Width: | Height: | Size: 241 B |
35
Assets/Emotes/emote_faceSad.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cuphn1ph86gv8"
|
||||
path.s3tc="res://.godot/imported/emote_faceSad.png-3f79bde2b0a21130630738dd11746564.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Emotes/emote_faceSad.png"
|
||||
dest_files=["res://.godot/imported/emote_faceSad.png-3f79bde2b0a21130630738dd11746564.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
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=0
|
||||
BIN
Assets/Emotes/emote_hearts.png
Normal file
|
After Width: | Height: | Size: 267 B |
35
Assets/Emotes/emote_hearts.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c37o831e05ljr"
|
||||
path.s3tc="res://.godot/imported/emote_hearts.png-1ece24d239c76081343c286ae865cb90.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Emotes/emote_hearts.png"
|
||||
dest_files=["res://.godot/imported/emote_hearts.png-1ece24d239c76081343c286ae865cb90.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
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=0
|
||||
BIN
Assets/Emotes/emote_star.png
Normal file
|
After Width: | Height: | Size: 264 B |
35
Assets/Emotes/emote_star.png.import
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dqyhhvxpwtpsy"
|
||||
path.s3tc="res://.godot/imported/emote_star.png-d1f7308a1e87c81fd0d857808bfea092.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Assets/Emotes/emote_star.png"
|
||||
dest_files=["res://.godot/imported/emote_star.png-d1f7308a1e87c81fd0d857808bfea092.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
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=0
|
||||
|
|
@ -2,7 +2,7 @@ extends CharacterBody3D
|
|||
class_name Bullet
|
||||
|
||||
var target : CharacterBody3D
|
||||
var speed : int = 20
|
||||
@export var speed : int = 20
|
||||
var bullet_damage : int = 1
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
|
|
|
|||
|
|
@ -1,27 +1,31 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://oykrff3g74eo"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://3nq3g7ddnphr" path="res://Assets/GLB format/weapon-ammo-arrow.glb" id="1_dsts2"]
|
||||
[ext_resource type="Script" uid="uid://b788twwo1o6l2" path="res://Bullets/arrow.gd" id="1_r5o86"]
|
||||
[ext_resource type="Texture2D" uid="uid://dqyhhvxpwtpsy" path="res://Assets/Emotes/emote_star.png" id="2_r5o86"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_r5o86"]
|
||||
radius = 0.2
|
||||
radius = 0.1
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_dsts2"]
|
||||
radius = 0.3
|
||||
radius = 0.12
|
||||
|
||||
[node name="Arrow" type="CharacterBody3D"]
|
||||
script = ExtResource("1_r5o86")
|
||||
|
||||
[node name="weapon-ammo-arrow2" parent="." instance=ExtResource("1_dsts2")]
|
||||
speed = 10
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.123779)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0715332, 0)
|
||||
shape = SubResource("SphereShape3D_r5o86")
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(2.5, 0, 0, 0, 2.5, 0, 0, 0, 2.5, 0, 0, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("2_r5o86")
|
||||
|
||||
[node name="Impact" type="Area3D" parent="."]
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="Impact"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.137329)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0714111, 0)
|
||||
shape = SubResource("SphereShape3D_dsts2")
|
||||
debug_color = Color(0.926858, 0.237749, 0.335021, 0.42)
|
||||
|
||||
|
|
|
|||
6
Globals/EventBus.gd
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
extends Node
|
||||
|
||||
|
||||
#Emitter : TowerButton.gd
|
||||
#Subscriber : World.gd
|
||||
signal tower_selected(tower : PackedScene)
|
||||
1
Globals/EventBus.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://cqrfsolhtr1k3
|
||||
46
Towers/tower-b.tscn
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://dp846r4jscm5p"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://8kpvuurr5h5n" path="res://Towers/tower.gd" id="1_pb6ru"]
|
||||
[ext_resource type="Texture2D" uid="uid://315k07rsgf6t" path="res://Assets/Characters/Female1.png" id="2_pb6ru"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_egfuc"]
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_pajr1"]
|
||||
radius = 3.0
|
||||
|
||||
[node name="Tower" type="StaticBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 4
|
||||
script = ExtResource("1_pb6ru")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00914001, 0)
|
||||
shape = SubResource("BoxShape3D_egfuc")
|
||||
|
||||
[node name="Range" type="Area3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.923584, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Range"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.475708, 0)
|
||||
shape = SubResource("SphereShape3D_pajr1")
|
||||
|
||||
[node name="Aim" type="Marker3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02026, 0)
|
||||
|
||||
[node name="BulletContainer" type="Node" parent="."]
|
||||
|
||||
[node name="Cooldown" type="Timer" parent="."]
|
||||
wait_time = 1.5
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(3.5, 0, 0, 0, 3.5, 0, 0, 0, 3.5, 0, 0.515442, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("2_pb6ru")
|
||||
hframes = 8
|
||||
vframes = 12
|
||||
frame = 75
|
||||
|
||||
[connection signal="body_entered" from="Range" to="." method="_on_range_body_entered"]
|
||||
[connection signal="body_exited" from="Range" to="." method="_on_range_body_exited"]
|
||||
[connection signal="timeout" from="Cooldown" to="." method="_on_cooldown_timeout"]
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
[gd_scene load_steps=5 format=3 uid="uid://trg7ag3dqr2l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://8kpvuurr5h5n" path="res://Towers/tower.gd" id="1_egfuc"]
|
||||
[ext_resource type="PackedScene" uid="uid://bkrwjcxb47n0d" path="res://Assets/GLB format/tower-round-build-d.glb" id="1_ovc7u"]
|
||||
[ext_resource type="Texture2D" uid="uid://bn6ikwol6x8r0" path="res://Assets/Characters/Male1.png" id="2_egfuc"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_egfuc"]
|
||||
size = Vector3(1, 0.1, 1)
|
||||
|
|
@ -10,10 +10,10 @@ size = Vector3(1, 0.1, 1)
|
|||
radius = 3.0
|
||||
|
||||
[node name="Tower" type="StaticBody3D"]
|
||||
collision_layer = 4
|
||||
collision_mask = 4
|
||||
script = ExtResource("1_egfuc")
|
||||
|
||||
[node name="tower-round-build-d2" parent="." instance=ExtResource("1_ovc7u")]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.00914001, 0)
|
||||
shape = SubResource("BoxShape3D_egfuc")
|
||||
|
|
@ -33,6 +33,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02026, 0)
|
|||
[node name="Cooldown" type="Timer" parent="."]
|
||||
wait_time = 1.5
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
||||
transform = Transform3D(3.5, 0, 0, 0, 3.5, 0, 0, 0, 3.5, 0, 0.515442, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("2_egfuc")
|
||||
hframes = 8
|
||||
vframes = 12
|
||||
frame = 75
|
||||
|
||||
[connection signal="body_entered" from="Range" to="." method="_on_range_body_entered"]
|
||||
[connection signal="body_exited" from="Range" to="." method="_on_range_body_exited"]
|
||||
[connection signal="timeout" from="Cooldown" to="." method="_on_cooldown_timeout"]
|
||||
|
|
|
|||
9
UI/health_bar_2d.gd
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
extends ProgressBar
|
||||
|
||||
func setup_bar(amount : int, max_amount : int) -> void:
|
||||
max_value = max_amount
|
||||
value = amount
|
||||
|
||||
|
||||
func update_bar(amount : int) -> void:
|
||||
value = amount
|
||||
1
UI/health_bar_2d.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://c4037f8r3bomr
|
||||
29
UI/health_bar_2d.tscn
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://cwl31nkib7ixp"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c4037f8r3bomr" path="res://UI/health_bar_2d.gd" id="1_qpj2g"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qpj2g"]
|
||||
bg_color = Color(0.341176, 0.0823529, 0.0941176, 0)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
expand_margin_left = 4.0
|
||||
expand_margin_top = 4.0
|
||||
expand_margin_right = 4.0
|
||||
expand_margin_bottom = 4.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xcn5x"]
|
||||
bg_color = Color(0.921569, 0.419608, 0.415686, 1)
|
||||
|
||||
[node name="HealthBar2D" type="ProgressBar"]
|
||||
custom_minimum_size = Vector2(100, 10)
|
||||
offset_left = 4.0
|
||||
offset_top = 4.0
|
||||
offset_right = 104.0
|
||||
offset_bottom = 14.0
|
||||
theme_override_styles/background = SubResource("StyleBoxFlat_qpj2g")
|
||||
theme_override_styles/fill = SubResource("StyleBoxFlat_xcn5x")
|
||||
value = 50.0
|
||||
show_percentage = false
|
||||
script = ExtResource("1_qpj2g")
|
||||
14
UI/health_bar_3d.gd
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
extends Sprite3D
|
||||
|
||||
@onready var bar : ProgressBar = $SubViewport/HealthBar2D
|
||||
|
||||
func _ready() -> void:
|
||||
texture = $SubViewport.get_texture()
|
||||
|
||||
|
||||
func set_up(value : int, max_amount : int) -> void:
|
||||
bar.setup_bar(value, max_amount)
|
||||
|
||||
|
||||
func update(value : int) -> void:
|
||||
bar.update_bar(value)
|
||||
1
UI/health_bar_3d.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://be8jd1w1bsfyt
|
||||
16
UI/health_bar_3d.tscn
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://daiqb0q373002"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://bd7ed8dvc7m0v" path="res://icon.svg" id="1_dna40"]
|
||||
[ext_resource type="Script" uid="uid://be8jd1w1bsfyt" path="res://UI/health_bar_3d.gd" id="1_l5e25"]
|
||||
[ext_resource type="PackedScene" uid="uid://cwl31nkib7ixp" path="res://UI/health_bar_2d.tscn" id="2_l5e25"]
|
||||
|
||||
[node name="HealthBar3D" type="Sprite3D"]
|
||||
billboard = 2
|
||||
texture = ExtResource("1_dna40")
|
||||
script = ExtResource("1_l5e25")
|
||||
|
||||
[node name="SubViewport" type="SubViewport" parent="."]
|
||||
size = Vector2i(108, 18)
|
||||
size_2d_override_stretch = true
|
||||
|
||||
[node name="HealthBar2D" parent="SubViewport" instance=ExtResource("2_l5e25")]
|
||||
42
UI/shop_panel.tscn
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
[gd_scene load_steps=3 format=3 uid="uid://he31g7f3ru1c"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bqpeu50pgsdfk" path="res://UI/tower_button.tscn" id="1_txsyf"]
|
||||
[ext_resource type="PackedScene" uid="uid://dp846r4jscm5p" path="res://Towers/tower-b.tscn" id="2_oxe32"]
|
||||
|
||||
[node name="ShopPanel" type="Panel"]
|
||||
custom_minimum_size = Vector2(300, 0)
|
||||
anchors_preset = 11
|
||||
anchor_left = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 0
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="PierreButton" parent="VBoxContainer" instance=ExtResource("1_txsyf")]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="AlineButton" parent="VBoxContainer" instance=ExtResource("1_txsyf")]
|
||||
layout_mode = 2
|
||||
text = "Aline
|
||||
350 Trucs"
|
||||
tower = ExtResource("2_oxe32")
|
||||
|
||||
[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="CancelButton" type="Button" parent="VBoxContainer"]
|
||||
custom_minimum_size = Vector2(0, 50)
|
||||
layout_mode = 2
|
||||
text = "Cancel
|
||||
"
|
||||
|
||||
[editable path="VBoxContainer/AlineButton"]
|
||||
7
UI/tower_button.gd
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
extends Button
|
||||
|
||||
@export var tower : PackedScene
|
||||
|
||||
|
||||
func _on_pressed() -> void:
|
||||
EventBus.tower_selected.emit(tower)
|
||||
1
UI/tower_button.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://dyhtr6g7kd1g2
|
||||
25
UI/tower_button.tscn
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://bqpeu50pgsdfk"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dqyhhvxpwtpsy" path="res://Assets/Emotes/emote_star.png" id="1_88p3s"]
|
||||
[ext_resource type="Script" uid="uid://dyhtr6g7kd1g2" path="res://UI/tower_button.gd" id="1_i47ne"]
|
||||
[ext_resource type="PackedScene" uid="uid://trg7ag3dqr2l" path="res://Towers/tower.tscn" id="2_4qiv5"]
|
||||
|
||||
[node name="TowerButton" type="Button"]
|
||||
custom_minimum_size = Vector2(300, 50)
|
||||
text = "Pierre
|
||||
250 Trucs"
|
||||
script = ExtResource("1_i47ne")
|
||||
tower = ExtResource("2_4qiv5")
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 4
|
||||
anchor_top = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_top = -20.0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 20.0
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_88p3s")
|
||||
|
||||
[connection signal="pressed" from="." to="." method="_on_pressed"]
|
||||
14
UI/ui.tscn
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[gd_scene load_steps=2 format=3 uid="uid://dbx8ow3v45k4k"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://he31g7f3ru1c" path="res://UI/shop_panel.tscn" id="1_2fwl4"]
|
||||
|
||||
[node name="UI" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="ShopPanel" parent="." instance=ExtResource("1_2fwl4")]
|
||||
layout_mode = 1
|
||||
10
VFX/death_particles.gd
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
extends CPUParticles3D
|
||||
|
||||
func _ready() -> void:
|
||||
call_deferred("play")
|
||||
|
||||
func play():
|
||||
emitting = true
|
||||
|
||||
func _on_finished() -> void:
|
||||
queue_free()
|
||||
1
VFX/death_particles.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://c3cmwfdofbw0x
|
||||
37
VFX/death_particles.tscn
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://ddm57pv5ox171"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://c37o831e05ljr" path="res://Assets/Emotes/emote_hearts.png" id="1_sjjhj"]
|
||||
[ext_resource type="Script" uid="uid://c3cmwfdofbw0x" path="res://VFX/death_particles.gd" id="2_d4t8v"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u5ixm"]
|
||||
transparency = 2
|
||||
alpha_scissor_threshold = 0.252
|
||||
alpha_antialiasing_mode = 0
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_sjjhj")
|
||||
billboard_mode = 2
|
||||
billboard_keep_scale = true
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_8oxv1"]
|
||||
material = SubResource("StandardMaterial3D_u5ixm")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_wov25"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.464378), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[node name="DeathParticles" type="CPUParticles3D"]
|
||||
emitting = false
|
||||
amount = 6
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
mesh = SubResource("QuadMesh_8oxv1")
|
||||
direction = Vector3(1, 1, 0)
|
||||
spread = 180.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
initial_velocity_min = 0.5
|
||||
initial_velocity_max = 1.0
|
||||
scale_amount_curve = SubResource("Curve_wov25")
|
||||
script = ExtResource("2_d4t8v")
|
||||
|
||||
[connection signal="finished" from="." to="." method="_on_finished"]
|
||||
37
VFX/sad_particles.tscn
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
[gd_scene load_steps=6 format=3 uid="uid://m0vj2ac5oesx"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cuphn1ph86gv8" path="res://Assets/Emotes/emote_faceSad.png" id="1_kukuk"]
|
||||
[ext_resource type="Script" uid="uid://c3cmwfdofbw0x" path="res://VFX/death_particles.gd" id="2_n3nax"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_u5ixm"]
|
||||
transparency = 2
|
||||
alpha_scissor_threshold = 0.252
|
||||
alpha_antialiasing_mode = 0
|
||||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_kukuk")
|
||||
billboard_mode = 2
|
||||
billboard_keep_scale = true
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_8oxv1"]
|
||||
material = SubResource("StandardMaterial3D_u5ixm")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_wov25"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.464378), 0.0, 0.0, 0, 0]
|
||||
point_count = 2
|
||||
|
||||
[node name="SadParticles" type="CPUParticles3D"]
|
||||
emitting = false
|
||||
amount = 6
|
||||
one_shot = true
|
||||
explosiveness = 1.0
|
||||
mesh = SubResource("QuadMesh_8oxv1")
|
||||
direction = Vector3(1, 1, 0)
|
||||
spread = 180.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
initial_velocity_min = 0.5
|
||||
initial_velocity_max = 1.0
|
||||
scale_amount_curve = SubResource("Curve_wov25")
|
||||
script = ExtResource("2_n3nax")
|
||||
|
||||
[connection signal="finished" from="." to="." method="_on_finished"]
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://dknt1oiyei5e5"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://dknt1oiyei5e5"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dg6f6na1nn2c6" path="res://enemies/enemy.gd" id="1_l7e03"]
|
||||
[ext_resource type="PackedScene" uid="uid://52kknuv6xd3x" path="res://Assets/GLB format/enemy-ufo-a.glb" id="2_cmo2f"]
|
||||
[ext_resource type="Texture2D" uid="uid://bn6ikwol6x8r0" path="res://Assets/Characters/Male1.png" id="2_l7e03"]
|
||||
[ext_resource type="PackedScene" uid="uid://daiqb0q373002" path="res://UI/health_bar_3d.tscn" id="3_cmo2f"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_7frlh"]
|
||||
|
||||
|
|
@ -9,12 +10,18 @@
|
|||
|
||||
[node name="EnemyA" type="CharacterBody3D" parent="."]
|
||||
script = ExtResource("1_l7e03")
|
||||
health = 1
|
||||
|
||||
[node name="enemy-ufo-a2" parent="EnemyA" instance=ExtResource("2_cmo2f")]
|
||||
speed = 1
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyA"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.289246, 0)
|
||||
shape = SubResource("SphereShape3D_7frlh")
|
||||
|
||||
[editable path="EnemyA/enemy-ufo-a2"]
|
||||
[node name="Sprite3D" type="Sprite3D" parent="EnemyA"]
|
||||
transform = Transform3D(3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("2_l7e03")
|
||||
hframes = 8
|
||||
vframes = 12
|
||||
|
||||
[node name="HealthBar3D" parent="EnemyA" instance=ExtResource("3_cmo2f")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://bfngnvgbcbakd"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://bfngnvgbcbakd"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dg6f6na1nn2c6" path="res://enemies/enemy.gd" id="1_uehkb"]
|
||||
[ext_resource type="PackedScene" uid="uid://dk8gnkd85ik25" path="res://Assets/GLB format/enemy-ufo-b.glb" id="2_uehkb"]
|
||||
[ext_resource type="Texture2D" uid="uid://315k07rsgf6t" path="res://Assets/Characters/Female1.png" id="2_uehkb"]
|
||||
[ext_resource type="PackedScene" uid="uid://daiqb0q373002" path="res://UI/health_bar_3d.tscn" id="3_s3rvm"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_7frlh"]
|
||||
|
||||
|
|
@ -9,10 +10,17 @@
|
|||
|
||||
[node name="EnemyB" type="CharacterBody3D" parent="."]
|
||||
script = ExtResource("1_uehkb")
|
||||
health = 2
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="EnemyB"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.289246, 0)
|
||||
shape = SubResource("SphereShape3D_7frlh")
|
||||
|
||||
[node name="enemy-ufo-b2" parent="EnemyB" instance=ExtResource("2_uehkb")]
|
||||
[node name="Sprite3D" type="Sprite3D" parent="EnemyB"]
|
||||
transform = Transform3D(3, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0)
|
||||
billboard = 2
|
||||
texture = ExtResource("2_uehkb")
|
||||
hframes = 8
|
||||
vframes = 12
|
||||
|
||||
[node name="HealthBar3D" parent="EnemyB" instance=ExtResource("3_s3rvm")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
|
||||
|
|
|
|||
|
|
@ -1,21 +1,29 @@
|
|||
extends CharacterBody3D
|
||||
class_name Enemy
|
||||
|
||||
@onready var death_vfx_packed : PackedScene = preload("res://VFX/death_particles.tscn")
|
||||
@onready var sad_vfx_packed : PackedScene = preload("res://VFX/sad_particles.tscn")
|
||||
|
||||
@export var speed : int = 2
|
||||
@export var health : int = 15 :
|
||||
@export var max_life : int = 10
|
||||
var health : int = 0 :
|
||||
set(value):
|
||||
health = value
|
||||
if health <= 0 and is_alive:
|
||||
if health >= max_life and is_alive:
|
||||
death()
|
||||
|
||||
@onready var Path : PathFollow3D = get_parent()
|
||||
|
||||
var is_alive : bool = true
|
||||
|
||||
#func _ready() -> void:
|
||||
#$HealthBar3D.set_up(health)
|
||||
func _ready() -> void:
|
||||
$HealthBar3D.set_up(health, max_life)
|
||||
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
if !is_alive:
|
||||
return
|
||||
|
||||
Path.set_progress(Path.get_progress() + speed * delta)
|
||||
|
||||
if Path.get_progress_ratio() >= 0.99:
|
||||
|
|
@ -24,12 +32,17 @@ func _physics_process(delta: float) -> void:
|
|||
|
||||
|
||||
func take_damage(damage : int) -> void:
|
||||
health -= damage
|
||||
#$HealthBar3D.update(health)
|
||||
health += damage
|
||||
$HealthBar3D.update(health)
|
||||
|
||||
|
||||
func death() -> void:
|
||||
is_alive = false
|
||||
#Global.enemies_alive -= 1
|
||||
#Global.money += 50
|
||||
$Sprite3D.visible = false
|
||||
var death_vfx : CPUParticles3D = death_vfx_packed.instantiate()
|
||||
get_tree().current_scene.add_child(death_vfx)
|
||||
death_vfx.global_position = global_position
|
||||
|
||||
Path.queue_free()
|
||||
|
|
|
|||
|
|
@ -3,25 +3,26 @@
|
|||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bd7ed8dvc7m0v"
|
||||
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
|
||||
path.s3tc="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://icon.svg"
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
|
||||
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
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/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
|
@ -31,7 +32,7 @@ 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
|
||||
detect_3d/compress_to=0
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ config/icon="res://icon.svg"
|
|||
[autoload]
|
||||
|
||||
GameManager="*res://Globals/GameManager.gd"
|
||||
EventBus="*res://Globals/EventBus.gd"
|
||||
|
||||
[file_customization]
|
||||
|
||||
|
|
@ -39,3 +40,9 @@ build={
|
|||
"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":1,"position":Vector2(344, 20),"global_position":Vector2(353, 68),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
3d_physics/layer_1="floor"
|
||||
3d_physics/layer_2="tower"
|
||||
3d_physics/layer_3="baddy"
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ func spawn_next_wave() -> void:
|
|||
$SpawnTimer.start(current_wave.wait_time_before_next_wave)
|
||||
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
spawn_manager()
|
||||
|
||||
|
|
|
|||
16
world.gd
|
|
@ -5,9 +5,12 @@ extends Node3D
|
|||
@onready var cam : Camera3D = $Camera3D
|
||||
@onready var selector : Node3D = $Selector
|
||||
|
||||
var in_build_menu : bool = false
|
||||
|
||||
#func _ready() -> void:
|
||||
#$Spawner.spawn_next_wave()
|
||||
func _ready() -> void:
|
||||
$Spawner.spawn_next_wave()
|
||||
$CanvasLayer/UI/ShopPanel.visible = in_build_menu
|
||||
EventBus.tower_selected.connect(_on_EventBus_tower_selected)
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
handle_player_controls()
|
||||
|
|
@ -43,3 +46,12 @@ func build_tower(scene : PackedScene) -> void:
|
|||
var temp_cannon : Tower = scene.instantiate()
|
||||
add_child(temp_cannon)
|
||||
temp_cannon.global_position = selector.global_position
|
||||
|
||||
|
||||
func _on_EventBus_tower_selected(tower : PackedScene):
|
||||
tower_blueprint = tower
|
||||
|
||||
|
||||
func _on_recrutement_button_pressed() -> void:
|
||||
in_build_menu = !in_build_menu
|
||||
$CanvasLayer/UI/ShopPanel.visible = in_build_menu
|
||||
|
|
|
|||
23
world.tscn
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://ky0uewndeuwv"]
|
||||
[gd_scene load_steps=12 format=3 uid="uid://ky0uewndeuwv"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://qqid42jkpkmv" path="res://world.gd" id="1_fj7yv"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1f6m15niwgt" path="res://Tiles/tile.tscn" id="3_aqk2v"]
|
||||
|
|
@ -8,6 +8,7 @@
|
|||
[ext_resource type="Script" uid="uid://chu8s12rtdeqx" path="res://Scripts/Wave.gd" id="6_gbfbk"]
|
||||
[ext_resource type="Resource" uid="uid://dkbuy7fetnihs" path="res://Waves/wave_1.tres" id="7_ioo17"]
|
||||
[ext_resource type="Resource" uid="uid://dvw6vm3vbpmdl" path="res://Waves/wave_2.tres" id="8_wse8f"]
|
||||
[ext_resource type="PackedScene" uid="uid://dbx8ow3v45k4k" path="res://UI/ui.tscn" id="9_ioo17"]
|
||||
|
||||
[sub_resource type="Curve3D" id="Curve3D_aqk2v"]
|
||||
_data = {
|
||||
|
|
@ -152,4 +153,24 @@ environment = SubResource("Environment_036b0")
|
|||
transform = Transform3D(1, 0, 0, 0, 0.258819, 0.965926, 0, -0.965926, 0.258819, 0, 4, 6)
|
||||
light_color = Color(0.823308, 0.863845, 0.742102, 1)
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="UI" parent="CanvasLayer" instance=ExtResource("9_ioo17")]
|
||||
|
||||
[node name="RecrutementButton" type="Button" parent="CanvasLayer/UI"]
|
||||
custom_minimum_size = Vector2(200, 50)
|
||||
layout_mode = 1
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 29.0
|
||||
offset_top = -77.0
|
||||
offset_right = 229.0
|
||||
offset_bottom = -27.0
|
||||
grow_vertical = 0
|
||||
text = "Recrutement"
|
||||
|
||||
[connection signal="timeout" from="Spawner/SpawnTimer" to="Spawner" method="_on_spawn_timer_timeout"]
|
||||
[connection signal="pressed" from="CanvasLayer/UI/RecrutementButton" to="." method="_on_recrutement_button_pressed"]
|
||||
|
||||
[editable path="CanvasLayer/UI"]
|
||||
|
|
|
|||