Added rough CRT enemy; roughed in wave tracking and enemy switching; new
game resets wave_count to 0.
|
Before Width: | Height: | Size: 599 B After Width: | Height: | Size: 169 B |
|
Before Width: | Height: | Size: 629 B After Width: | Height: | Size: 184 B |
56
scenes/enemy_crt.gd
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
extends Area2D
|
||||
|
||||
var bullet_scene = preload("res://scenes/enemy_bullet.tscn")
|
||||
var start_pos = Vector2.ZERO
|
||||
var speed = 0
|
||||
var tween_speed: float = 1.4
|
||||
|
||||
var exploding = false
|
||||
|
||||
var enemy_move_aggression = randf_range(5, 20)
|
||||
var enemy_shoot_aggression = randf_range(4, 20)
|
||||
|
||||
@onready var screensize = get_viewport_rect().size
|
||||
|
||||
|
||||
func start(pos):
|
||||
speed = 0
|
||||
position = Vector2(pos.x, -pos.y)
|
||||
start_pos = pos
|
||||
await get_tree().create_timer(randf_range(0.25, 0.55)).timeout
|
||||
var tween = create_tween().set_trans(Tween.TRANS_BACK)
|
||||
tween.tween_property(self, "position:y", start_pos.y, tween_speed)
|
||||
await tween.finished
|
||||
$MoveTimer.wait_time = enemy_move_aggression
|
||||
$MoveTimer.start()
|
||||
$ShootTimer.wait_time = enemy_shoot_aggression
|
||||
$ShootTimer.start()
|
||||
|
||||
|
||||
func _on_timer_timeout() -> void:
|
||||
speed = randf_range(75, 100)
|
||||
|
||||
func _on_shoot_timer_timeout():
|
||||
var b = bullet_scene.instantiate()
|
||||
get_tree().root.add_child(b)
|
||||
b.start(position)
|
||||
$ShootTimer.wait_time = randf_range(4, 20)
|
||||
$ShootTimer.start()
|
||||
|
||||
func _process(delta):
|
||||
position.y += speed * delta
|
||||
if position.y > screensize.y + 32:
|
||||
start(start_pos)
|
||||
|
||||
|
||||
func explode():
|
||||
if exploding: return
|
||||
exploding = true
|
||||
EventBus.enemy_hit.emit(5)
|
||||
speed = 0
|
||||
$AnimationPlayer.play("explode")
|
||||
#set_deferred("monitoring", false)
|
||||
await $AnimationPlayer.animation_finished
|
||||
queue_free()
|
||||
EventBus.enemy_died.emit()
|
||||
|
||||
1
scenes/enemy_crt.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://7ls7phfcupal
|
||||
225
scenes/enemy_crt.tscn
Normal file
|
|
@ -0,0 +1,225 @@
|
|||
[gd_scene format=3 uid="uid://dm0pkef7wmwuq"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://i0r17jo6838m" path="res://scenes/enemy_chicken.gd" id="1_0vjqj"]
|
||||
[ext_resource type="Texture2D" uid="uid://b5pswf7r8b7j4" path="res://sprites/crt.png" id="2_emiuq"]
|
||||
[ext_resource type="Texture2D" uid="uid://cy4jggxmnohbb" path="res://sprites/chicken.png" id="2_ugdur"]
|
||||
[ext_resource type="Texture2D" uid="uid://bm7fgqwqfqmf4" path="res://sprites/explosion_pallete-swap.png" id="3_emiuq"]
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_4gyqm"]
|
||||
size = Vector2(45.71434, 40.000053)
|
||||
|
||||
[sub_resource type="Animation" id="Animation_h1rgn"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite2D:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [0]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite2D:texture")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [ExtResource("2_ugdur")]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite2D:hframes")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [3]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Sprite2D:region_rect")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Rect2(0, 0, 84, 32)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("AnimationPlayer:speed_scale")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [1.0]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_7ellt"]
|
||||
resource_name = "explode"
|
||||
step = 0.2
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite2D:texture")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [ExtResource("3_emiuq")]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite2D:frame")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.2, 0.4, 0.6, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [0, 1, 2, 3, 4]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite2D:hframes")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [5]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Sprite2D:region_rect")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Rect2(0, 0, 80, 16)]
|
||||
}
|
||||
tracks/4/type = "value"
|
||||
tracks/4/imported = false
|
||||
tracks/4/enabled = true
|
||||
tracks/4/path = NodePath("AnimationPlayer:speed_scale")
|
||||
tracks/4/interp = 1
|
||||
tracks/4/loop_wrap = true
|
||||
tracks/4/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [1.5]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_s7c3p"]
|
||||
resource_name = "flap"
|
||||
length = 0.4
|
||||
loop_mode = 2
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Sprite2D:frame")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0.0009999999, 0.2, 0.4),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 1,
|
||||
"values": [0, 1, 2]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Sprite2D:texture")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [ExtResource("2_ugdur")]
|
||||
}
|
||||
tracks/2/type = "value"
|
||||
tracks/2/imported = false
|
||||
tracks/2/enabled = true
|
||||
tracks/2/path = NodePath("Sprite2D:hframes")
|
||||
tracks/2/interp = 1
|
||||
tracks/2/loop_wrap = true
|
||||
tracks/2/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 1,
|
||||
"values": [3]
|
||||
}
|
||||
tracks/3/type = "value"
|
||||
tracks/3/imported = false
|
||||
tracks/3/enabled = true
|
||||
tracks/3/path = NodePath("Sprite2D:region_rect")
|
||||
tracks/3/interp = 1
|
||||
tracks/3/loop_wrap = true
|
||||
tracks/3/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Rect2(0, 0, 84, 32)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_7ellt"]
|
||||
_data = {
|
||||
&"RESET": SubResource("Animation_h1rgn"),
|
||||
&"explode": SubResource("Animation_7ellt"),
|
||||
&"flap": SubResource("Animation_s7c3p")
|
||||
}
|
||||
|
||||
[node name="EnemyCRT" type="Area2D" unique_id=1433837580 groups=["enemies"]]
|
||||
scale = Vector2(1.1, 1.1)
|
||||
script = ExtResource("1_0vjqj")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=2115910138]
|
||||
scale = Vector2(1.44, 1.44)
|
||||
texture = ExtResource("2_emiuq")
|
||||
hframes = 3
|
||||
region_enabled = true
|
||||
region_rect = Rect2(0, 0, 96, 28)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1841693239]
|
||||
position = Vector2(-1.8732879e-06, -1.9584381e-06)
|
||||
scale = Vector2(0.99999857, 0.99999857)
|
||||
shape = SubResource("RectangleShape2D_4gyqm")
|
||||
|
||||
[node name="MoveTimer" type="Timer" parent="." unique_id=1928257014]
|
||||
one_shot = true
|
||||
|
||||
[node name="ShootTimer" type="Timer" parent="." unique_id=1985644907]
|
||||
one_shot = true
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=702523492]
|
||||
active = false
|
||||
libraries/ = SubResource("AnimationLibrary_7ellt")
|
||||
|
||||
[connection signal="timeout" from="MoveTimer" to="." method="_on_timer_timeout"]
|
||||
[connection signal="timeout" from="ShootTimer" to="." method="_on_shoot_timer_timeout"]
|
||||
|
|
@ -116,6 +116,7 @@ func new_game():
|
|||
|
||||
# Tell the enemies to spawn!
|
||||
#await get_tree().create_timer(.5).timeout
|
||||
$Wave.wave_count = 0
|
||||
$Wave.spawn_enemies()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -79,11 +79,14 @@ offset_bottom = 36.0
|
|||
[node name="Title" type="TextureRect" parent="CanvasLayer" unique_id=561106216]
|
||||
self_modulate = Color(0.015236704, 0.015236706, 0.0152367065, 1)
|
||||
material = SubResource("ShaderMaterial_kek77")
|
||||
offset_left = 70.0
|
||||
offset_top = 58.0
|
||||
offset_right = 166.0
|
||||
offset_bottom = 125.0
|
||||
offset_left = 29.0
|
||||
offset_top = 101.0
|
||||
offset_right = 269.0
|
||||
offset_bottom = 166.0
|
||||
scale = Vector2(0.75, 0.75)
|
||||
size_flags_horizontal = 4
|
||||
texture = ExtResource("5_tipki")
|
||||
stretch_mode = 3
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="CanvasLayer" unique_id=1787047882]
|
||||
anchors_preset = 15
|
||||
|
|
@ -121,5 +124,6 @@ stream = ExtResource("10_choun")
|
|||
volume_db = -0.5
|
||||
|
||||
[node name="Wave" parent="." unique_id=2117861058 instance=ExtResource("11_ya4ey")]
|
||||
wave_complete = null
|
||||
|
||||
[connection signal="pressed" from="CanvasLayer/CenterContainer/Start" to="." method="_on_start_pressed"]
|
||||
|
|
|
|||
|
|
@ -136,6 +136,7 @@ shape = SubResource("RectangleShape2D_op7ga")
|
|||
one_shot = true
|
||||
|
||||
[node name="Explosion" parent="." unique_id=321630316 instance=ExtResource("8_dw050")]
|
||||
visible = false
|
||||
texture = ExtResource("10_d2wvv")
|
||||
region_enabled = true
|
||||
region_rect = Rect2(0, 0, 96, 16)
|
||||
|
|
|
|||
|
|
@ -2,29 +2,49 @@ extends Node2D
|
|||
|
||||
var wave_count: int = 0
|
||||
var enemy_count: int = 0
|
||||
var enemy = preload("res://scenes/enemy_chicken.tscn")
|
||||
var enemy = null
|
||||
|
||||
@export var wave_complete: bool = false
|
||||
|
||||
const COLS: int = 5
|
||||
const ROWS: int = 3
|
||||
|
||||
const CHICKEN = preload("res://scenes/enemy_chicken.tscn")
|
||||
const CRT = preload("res://scenes/enemy_CRT.tscn")
|
||||
|
||||
func _ready():
|
||||
wave_count += 1
|
||||
wave_count = 0
|
||||
EventBus.enemy_died.connect(_on_enemy_died)
|
||||
|
||||
|
||||
func spawn_enemies():
|
||||
print("Enemy Wave: ", wave_count)
|
||||
for x in range(COLS):
|
||||
for y in range(ROWS):
|
||||
var e = enemy.instantiate()
|
||||
var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38)
|
||||
add_child(e)
|
||||
e.start(pos)
|
||||
enemy_count = ROWS * COLS
|
||||
await get_tree().process_frame
|
||||
print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size())
|
||||
|
||||
if wave_count == 0: #This is for CHICKENS
|
||||
print("Enemy Wave: ", wave_count)
|
||||
enemy = CHICKEN
|
||||
for x in range(COLS):
|
||||
for y in range(ROWS):
|
||||
var e = enemy.instantiate()
|
||||
var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38)
|
||||
add_child(e)
|
||||
e.start(pos)
|
||||
enemy_count = ROWS * COLS
|
||||
await get_tree().process_frame
|
||||
print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size())
|
||||
|
||||
if wave_count == 1: #This is for CRTs
|
||||
print("Enemy Wave: ", wave_count)
|
||||
enemy = CRT
|
||||
for x in range(COLS):
|
||||
for y in range(ROWS):
|
||||
var e = enemy.instantiate()
|
||||
var pos = Vector2(x * (28 + 4) + 56, 28 * 2 + y * 38)
|
||||
add_child(e)
|
||||
e.start(pos)
|
||||
enemy_count = ROWS * COLS
|
||||
await get_tree().process_frame
|
||||
print_debug("Remaining enemies: ", enemy_count, ", ", get_tree().get_nodes_in_group("enemies").size())
|
||||
|
||||
|
||||
|
||||
func _on_enemy_died():
|
||||
|
|
|
|||
18
shaders/flash_white.gdshader
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
shader_type canvas_item;
|
||||
|
||||
uniform float flash_value : hint_range(0.0, 1.0) = 0.0;
|
||||
|
||||
void vertex() {
|
||||
// Called for every vertex the material is visible on.
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec4 original_color = COLOR;
|
||||
vec4 flash_color = vec4(1.0, 1.0, 1.0, 1.0); // White color
|
||||
COLOR = mix(original_color, flash_color, flash_value);
|
||||
}
|
||||
|
||||
//void light() {
|
||||
// // Called for every pixel for every light affecting the CanvasItem.
|
||||
// // Uncomment to replace the default light processing function with this one.
|
||||
//}
|
||||
1
shaders/flash_white.gdshader.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://boub2glq4vsq5
|
||||
BIN
sprites/crt.png
Normal file
|
After Width: | Height: | Size: 401 B |
40
sprites/crt.png.import
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b5pswf7r8b7j4"
|
||||
path="res://.godot/imported/crt.png-e54154c66d7f8bd69bbbbb6583434a1a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://sprites/crt.png"
|
||||
dest_files=["res://.godot/imported/crt.png-e54154c66d7f8bd69bbbbb6583434a1a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
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/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
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
|
||||
|
Before Width: | Height: | Size: 422 B After Width: | Height: | Size: 692 B |