diff --git a/scenes/ammo/ammo.gd b/scenes/ammo/ammo.gd new file mode 100644 index 0000000..cdc5134 --- /dev/null +++ b/scenes/ammo/ammo.gd @@ -0,0 +1,23 @@ +extends KinematicBody2D + +var velocity = Vector2(0.0, 0.0) +var acceleration = Vector2(0.0, 0.0) +var direction +var hit + +func _ready(): + hit = false + acceleration = Vector2(1.0, 1.0) + + +func _process(delta): + velocity += acceleration + direction = get_parent().shot_direction + + var dynamics = move_and_collide(velocity * direction * delta) + + if dynamics : + if dynamics.collider.is_in_group("enemies") : + hit = true + hide() + queue_free() #remove scene from the tree after the strike diff --git a/scenes/ammo/missile/missile.tscn b/scenes/ammo/missile/missile.tscn new file mode 100644 index 0000000..7f56f80 --- /dev/null +++ b/scenes/ammo/missile/missile.tscn @@ -0,0 +1,29 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://scenes/ammo/missile/missile_sprite.png" type="Texture" id=1] +[ext_resource path="res://scenes/ammo/ammo.gd" type="Script" id=2] +[ext_resource path="res://scenes/ammo/missile/smoke_cloud_sprite.png" type="Texture" id=3] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 8.71297, 22.9291 ) + +[node name="missile" type="KinematicBody2D"] +script = ExtResource( 2 ) + +[node name="Sprite" type="Sprite" parent="."] +scale = Vector2( 0.5, 0.5 ) +texture = ExtResource( 1 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="CPUParticles2D" type="CPUParticles2D" parent="."] +modulate = Color( 1, 1, 1, 0.25098 ) +show_behind_parent = true +position = Vector2( 0, 20 ) +scale = Vector2( 0.16, 0.2 ) +amount = 4 +lifetime = 1.3 +randomness = 0.56 +lifetime_randomness = 0.35 +texture = ExtResource( 3 ) diff --git a/scenes/ammo/missile/missile_sprite.png b/scenes/ammo/missile/missile_sprite.png new file mode 100644 index 0000000..d8deb42 Binary files /dev/null and b/scenes/ammo/missile/missile_sprite.png differ diff --git a/scenes/ammo/missile/missile_sprite.png.import b/scenes/ammo/missile/missile_sprite.png.import new file mode 100644 index 0000000..ae641c7 --- /dev/null +++ b/scenes/ammo/missile/missile_sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/missile_sprite.png-5276ce11471be67e12af183ae11d6d0b.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/ammo/missile/missile_sprite.png" +dest_files=[ "res://.import/missile_sprite.png-5276ce11471be67e12af183ae11d6d0b.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/scenes/ammo/missile/smoke_cloud_sprite.png b/scenes/ammo/missile/smoke_cloud_sprite.png new file mode 100644 index 0000000..6f8be3b Binary files /dev/null and b/scenes/ammo/missile/smoke_cloud_sprite.png differ diff --git a/scenes/ammo/missile/smoke_cloud_sprite.png.import b/scenes/ammo/missile/smoke_cloud_sprite.png.import new file mode 100644 index 0000000..c78c45e --- /dev/null +++ b/scenes/ammo/missile/smoke_cloud_sprite.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/smoke_cloud_sprite.png-e4d79bdaa0d020a361cf278abc42258d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://scenes/ammo/missile/smoke_cloud_sprite.png" +dest_files=[ "res://.import/smoke_cloud_sprite.png-e4d79bdaa0d020a361cf278abc42258d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/scenes/credits.gd b/scenes/credits.gd index 8e74603..1c207bf 100644 --- a/scenes/credits.gd +++ b/scenes/credits.gd @@ -14,6 +14,7 @@ var contributors = [ "davtur19", "mRuggi", "m0rp30", + "Iranon", ] onready var labels_container = $LabelsContainer diff --git a/scenes/enemy/enemy.tscn b/scenes/enemy/enemy.tscn index 6bf3104..7bd3a6c 100644 --- a/scenes/enemy/enemy.tscn +++ b/scenes/enemy/enemy.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=2] [ext_resource path="res://scenes/enemy/enemy.gd" type="Script" id=1] -[ext_resource path="res://assets/sprites/tower-defense-top-down/png/tower-defense_tile245.png" type="Texture" id=2] +[ext_resource path="res://assets/sprites/ui/png/green_button06.png" type="Texture" id=2] [ext_resource path="res://scenes/enemy/enemy-types/aircraft-elite.tres" type="Resource" id=3] [sub_resource type="RectangleShape2D" id=1] diff --git a/scenes/tower/tower.gd b/scenes/tower/tower.gd index 433c31b..b82f245 100644 --- a/scenes/tower/tower.gd +++ b/scenes/tower/tower.gd @@ -13,6 +13,7 @@ var alpha_area_hide : float = 0 var alpha_area = alpha_area_hide var target +var shot_direction enum TOWER_STATES { PREVIEW, @@ -26,6 +27,9 @@ var state = TOWER_STATES.PREVIEW func initialise(_resource: Resource): tower_resource = _resource +#Preload missle scene +onready var missile_scene = preload("res://scenes/ammo/missile/missile.tscn") + func _ready() -> void: load_resource_data(tower_resource) @@ -85,5 +89,21 @@ func load_resource_data(tower_resource : Tower_Resource): func fire(): - print("firing") - # add fire method + #print("firing") + #searching for closest target + var enemies = get_tree().get_nodes_in_group("enemies") + var nearest + var near_pos + var min_dist = INF + for enemy in enemies : + var enemy_pos = enemy.get_global_position() + var distance = enemy_pos.distance_squared_to(self.get_global_position()) + if distance < min_dist : + min_dist = distance + nearest = enemy #storing closest enemy + near_pos = nearest.get_global_position() + shot_direction = self.get_global_position().direction_to(near_pos) + var ammo = missile_scene.instance() + ammo.set_position(self.position) + ammo.set_rotation(self.rotation) #tower should rotate + add_child(ammo)