godot-shooter / commit
Got the background parallax stars working, mostly.
Bullet.gd | 1 - Enemy.gd | 8 ++++++-- Enemy.tscn | 1 + StarField.tscn | 53 +++++++++++++++++++++++++++++++---------------------- World.gd | 12 +++++++++--- World.tscn | 36 +++++++++++++++--------------------- export_presets.cfg | 2 +- 7 files changed, 63 insertions(+), 50 deletions(-) diff --git a/Bullet.gd b/Bullet.gd index 0b18d56..b3a5f8e 100644 --- a/Bullet.gd +++ b/Bullet.gd @@ -8,7 +8,6 @@ export var speed = 300 func _ready() -> void: $Timer.wait_time = lifetime_seconds $Timer.start() - Utils.log("timer", $Timer) func _physics_process(delta: float) -> void: position += transform.y * speed * delta diff --git a/Enemy.gd b/Enemy.gd index 390f917..b775a39 100644 --- a/Enemy.gd +++ b/Enemy.gd @@ -5,13 +5,17 @@ const Utils = preload("res://Utils.gd") const Explosion = preload("res://Explosion.tscn") export var move_speed = 100 -export var health: int = randi() % 8 + 2 +export var health = -1 export var max_health = 10 signal enemy_killed var velocity = Vector2.ZERO var dead = false +func _ready() -> void: + if health < 0: + health = max_health + func _process(_delta: float) -> void: $Graphics/Alive/Container/HealthLabel.text = "%s / %s" % [health, max_health] $Graphics/Alive/Container.global_rotation = 0 @@ -50,10 +54,10 @@ func kill(): Utils.log("zombie is dead") dead = true $Graphics/Alive.hide() + $CollisionPolygon2D.queue_free() var explosion = Explosion.instance() explosion.connect("explosion_done", self, "_on_death_explosion_finished") $Graphics.add_child(explosion) - $CollisionPolygon2D.set_deferred("diabled", true) z_index = -1 emit_signal("enemy_killed") diff --git a/Enemy.tscn b/Enemy.tscn index 84ae864..ab69fcb 100644 --- a/Enemy.tscn +++ b/Enemy.tscn @@ -5,6 +5,7 @@ [node name="Enemy" type="KinematicBody2D"] script = ExtResource( 2 ) +max_health = 5 [node name="Graphics" type="Node2D" parent="."] diff --git a/StarField.tscn b/StarField.tscn index bb064c6..506b4cd 100644 --- a/StarField.tscn +++ b/StarField.tscn @@ -1,36 +1,45 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://assets/kenney_simple-space/PNG/Default/star_small.png" type="Texture" id=1] -[sub_resource type="Gradient" id=4] +[sub_resource type="Gradient" id=6] +colors = PoolColorArray( 1, 0, 0, 1, 0.078125, 0, 1, 1 ) -[sub_resource type="GradientTexture" id=5] -gradient = SubResource( 4 ) +[sub_resource type="GradientTexture2D" id=7] +gradient = SubResource( 6 ) +width = 1024 +height = 600 +use_hdr = true +fill_from = Vector2( 0.00416667, 0.00625 ) +fill_to = Vector2( 1, 1 ) [sub_resource type="Curve" id=1] _data = [ Vector2( 0, 0 ), 0.0, 0.0, 0, 0, Vector2( 0.256659, 1 ), 0.0, 0.0, 0, 0, Vector2( 0.490196, 0.297297 ), 0.0, 0.0, 0, 0, Vector2( 0.74092, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ] -[sub_resource type="CurveTexture" id=2] -curve = SubResource( 1 ) +[sub_resource type="Gradient" id=4] -[sub_resource type="ParticlesMaterial" id=3] -emission_shape = 2 -emission_box_extents = Vector3( 512, 300, 0 ) -flag_disable_z = true -gravity = Vector3( 0, 0, 0 ) -angular_velocity = 50.0 -angular_velocity_random = 1.0 -orbit_velocity = 0.0 -orbit_velocity_random = 0.0 -scale_random = 1.0 -scale_curve = SubResource( 2 ) -color_ramp = SubResource( 5 ) +[node name="Node2D" type="Node2D"] -[node name="StarField" type="Particles2D"] +[node name="Polygon2D" type="Polygon2D" parent="."] +visible = false position = Vector2( 512, 300 ) -amount = 200 +antialiased = true +texture = SubResource( 7 ) +invert_enable = true +invert_border = 10.0 +polygon = PoolVector2Array( -512, -300, 512, -300, 512, 300, -512, 300 ) + +[node name="StarField" type="CPUParticles2D" parent="."] +position = Vector2( 512, 300 ) +amount = 100 lifetime = 10.0 preprocess = 70.74 -visibility_rect = Rect2( -512, -300, 1024, 600 ) -process_material = SubResource( 3 ) texture = ExtResource( 1 ) +emission_shape = 2 +emission_rect_extents = Vector2( 512, 300 ) +gravity = Vector2( 0, 0 ) +angular_velocity = 50.0 +angular_velocity_random = 1.0 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 1 ) +color_ramp = SubResource( 4 ) diff --git a/World.gd b/World.gd index ea37204..e24ad4f 100644 --- a/World.gd +++ b/World.gd @@ -2,16 +2,22 @@ extends Node2D const Utils = preload("res://Utils.gd") const Enemy = preload("res://Enemy.tscn") +export var enemy_count = 2 +func _ready() -> void: + for n in enemy_count: + add_new_enemy(true) func _on_enemy_killed() -> void: $CanvasLayer/HUD.score += 1 - add_new_enemy() + # use call_deferred to ensure that this happens after the collision has been processed + call_deferred("add_new_enemy") -func add_new_enemy() -> void: +func add_new_enemy(should_be_visible: bool = false) -> void: var pos_angle = randi() % 360 var unit_vector = Vector2.UP.rotated(pos_angle) - var enemy_spawn_dist = get_viewport().get_visible_rect().size.length() / 2 + 10 + var screen_radius = get_viewport().get_visible_rect().size.length() / 2 + 10 + var enemy_spawn_dist = 300 if should_be_visible else screen_radius var pos = unit_vector * enemy_spawn_dist + $Player.global_position var enemy = Enemy.instance() diff --git a/World.tscn b/World.tscn index 61ad2d1..0fd558f 100644 --- a/World.tscn +++ b/World.tscn @@ -1,6 +1,5 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=5 format=2] -[ext_resource path="res://Enemy.tscn" type="PackedScene" id=1] [ext_resource path="res://Player.tscn" type="PackedScene" id=2] [ext_resource path="res://HUD.tscn" type="PackedScene" id=3] [ext_resource path="res://World.gd" type="Script" id=4] @@ -8,39 +7,34 @@ [node name="World" type="Node2D"] script = ExtResource( 4 ) +enemy_count = 4 -[node name="Environment" type="Node2D" parent="."] - -[node name="CanvasLayer" type="CanvasLayer" parent="Environment"] +[node name="CanvasLayer2" type="CanvasLayer" parent="."] -[node name="ParallaxBackground" type="ParallaxBackground" parent="Environment/CanvasLayer"] +[node name="ParallaxBackground" type="ParallaxBackground" parent="CanvasLayer2"] -[node name="Foreground" type="ParallaxLayer" parent="Environment/CanvasLayer/ParallaxBackground"] +[node name="Foreground" type="ParallaxLayer" parent="CanvasLayer2/ParallaxBackground"] +motion_offset = Vector2( -512, -300 ) motion_mirroring = Vector2( 1024, 600 ) -[node name="StarField" parent="Environment/CanvasLayer/ParallaxBackground/Foreground" instance=ExtResource( 5 )] -position = Vector2( 522, 305 ) +[node name="StarField" parent="CanvasLayer2/ParallaxBackground/Foreground" instance=ExtResource( 5 )] -[node name="Background" type="ParallaxLayer" parent="Environment/CanvasLayer/ParallaxBackground"] +[node name="Background" type="ParallaxLayer" parent="CanvasLayer2/ParallaxBackground"] modulate = Color( 1, 1, 1, 0.501961 ) motion_scale = Vector2( 0.8, 0.8 ) +motion_offset = Vector2( -512, -300 ) motion_mirroring = Vector2( 1024, 600 ) +__meta__ = { +"_edit_group_": true +} -[node name="StarField" parent="Environment/CanvasLayer/ParallaxBackground/Background" instance=ExtResource( 5 )] -position = Vector2( 522, 305 ) +[node name="StarField2" parent="CanvasLayer2/ParallaxBackground/Background" instance=ExtResource( 5 )] + +[node name="Environment" type="Node2D" parent="."] [node name="Player" parent="." groups=["player"] instance=ExtResource( 2 )] position = Vector2( 513, 302 ) -[node name="Enemy" parent="." instance=ExtResource( 1 )] -position = Vector2( 876, 491 ) - -[node name="Enemy2" parent="." instance=ExtResource( 1 )] -position = Vector2( 149, 475 ) - [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="HUD" parent="CanvasLayer" instance=ExtResource( 3 )] - -[connection signal="enemy_killed" from="Enemy" to="." method="_on_enemy_killed"] -[connection signal="enemy_killed" from="Enemy2" to="." method="_on_enemy_killed"] diff --git a/export_presets.cfg b/export_presets.cfg index 8c4868a..00781e7 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -21,7 +21,7 @@ vram_texture_compression/for_mobile=true html/export_icon=true html/custom_html_shell="" html/head_include="" -html/canvas_resize_policy=2 +html/canvas_resize_policy=0 html/focus_canvas_on_start=true html/experimental_virtual_keyboard=false progressive_web_app/enabled=false