fuzzyworld

godot-shooter / commit

Starting to add asteroids.

56cadf84048aff82ff96aac9f0dba1d06b703e16 · Pavel Safronov · 2023-12-01 18:18:06 -0800 · parents 56eea8355635

Starting to add asteroids.
The current asteroids are randomly scaled a bit, and have a random rotation. Enemies avoid asteroids, but the player does not. Still need to port the avoidance logic to the Player class. Or need to create a "ship" class that can be reused by enemies, player, and homing missiles.
 items/Asteroid.gd   |  9 +++++++++
 items/Asteroid.tscn | 17 +++++++++++++++++
 project.godot       |  6 ++++++
 scenes/World.gd     |  9 +++++++++
 4 files changed, 41 insertions(+)

diff --git a/items/Asteroid.gd b/items/Asteroid.gd
new file mode 100644
index 0000000..57959d1
--- /dev/null
+++ b/items/Asteroid.gd
@@ -0,0 +1,9 @@
+extends Node2D
+class_name Asteroid
+
+export var spin_rate = .1
+export var velocity = Vector2.ZERO
+
+func _physics_process(delta: float) -> void:
+	self.rotation += spin_rate * delta
+	self.position += velocity * delta
diff --git a/items/Asteroid.tscn b/items/Asteroid.tscn
new file mode 100644
index 0000000..8f8d352
--- /dev/null
+++ b/items/Asteroid.tscn
@@ -0,0 +1,17 @@
+[gd_scene load_steps=3 format=2]
+
+[ext_resource path="res://assets/kenney_simple-space/PNG/Retina/meteor_detailedLarge.png" type="Texture" id=1]
+[ext_resource path="res://items/Asteroid.gd" type="Script" id=2]
+
+[node name="Asteroid" type="KinematicBody2D"]
+script = ExtResource( 2 )
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="."]
+polygon = PoolVector2Array( 0, -48, 32, -32, 48, 0, 31, 32, 0, 48, -31, 33, -48, 0, -32, -31 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 1 )
+
+[node name="NavigationObstacle2D" type="NavigationObstacle2D" parent="."]
+estimate_radius = false
+radius = 64.0
diff --git a/project.godot b/project.godot
index 047d375..080a7ac 100644
--- a/project.godot
+++ b/project.godot
@@ -9,6 +9,11 @@
 config_version=4
 
 _global_script_classes=[ {
+"base": "Node2D",
+"class": "Asteroid",
+"language": "GDScript",
+"path": "res://items/Asteroid.gd"
+}, {
 "base": "Area2D",
 "class": "Bullet",
 "language": "GDScript",
@@ -65,6 +70,7 @@ _global_script_classes=[ {
 "path": "res://weapons/Weapon.gd"
 } ]
 _global_script_class_icons={
+"Asteroid": "",
 "Bullet": "",
 "ConstantItemGenerator": "",
 "Damage": "",
diff --git a/scenes/World.gd b/scenes/World.gd
index 6973ae3..e29c720 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -2,6 +2,7 @@ extends Node2D
 
 const Enemy = preload("res://actors/Enemy.tscn")
 const Bomb = preload("res://weapons/Bomb.tscn")
+const Asteroid = preload("res://items/Asteroid.tscn")
 
 const Utils = preload("res://utils/Utils.gd")
 const Weapons = preload("res://weapons/Weapons.gd")
@@ -18,6 +19,7 @@ var generators = [
 	ConstantItemGenerator.new("create_weapon", self, "weapon", 10),
 	ConstantItemGenerator.new("create_bomb", self, "bombs", 10),
 	LevelItemGenerator.new(5, "create_gold", self, "gold", 5),
+	ConstantItemGenerator.new("create_asteroid", self, "asteroids", 10),
 ]
 var completed_objectives = 0
 var max_objectives = 5
@@ -96,6 +98,13 @@ func create_weapon() -> PowerUp:
 		weapon.label = "LZR"
 		weapon.color = Color.pink
 	return weapon
+func create_asteroid() -> Asteroid:
+	var asteroid: Asteroid = Asteroid.instance()
+	asteroid.position = get_new_environment_position(randf() * 2)
+	asteroid.spin_rate = randf() * 2 - 1
+	asteroid.scale *= (randf() * .5 + .75)
+#	asteroid.velocity = Vector2.UP.rotated(randf() * PI * 2) * randf() * 30
+	return asteroid
 
 func get_new_item_pos(dist_ratio: float = 1.0) -> Vector2:
 	var pos_angle = randi() % 360