fuzzyworld

godot-shooter / commit

Moving a bunch of settings into Weapons class.

4ac09ada620b438789358d1a3cdd36cb9123270d · Pavel Safronov · 2023-11-09 15:00:25 -0800 · parents bd0825dd9c46

Moving a bunch of settings into Weapons class.
Used this opportunity to make rockets have a shorter range.
 Player.gd   | 15 ++++-----------
 Player.tscn |  1 +
 Weapon.gd   |  9 ++++-----
 Weapons.gd  | 18 +++++++++++++-----
 World.gd    |  8 ++++++--
 5 files changed, 28 insertions(+), 23 deletions(-)

diff --git a/Player.gd b/Player.gd
index cec9de3..a21a110 100644
--- a/Player.gd
+++ b/Player.gd
@@ -8,7 +8,6 @@ export var health = 10
 export var max_health = 10
 export var is_invincible = false
 export var turn_rate = 0.03
-export var shooting_range = 350
 export var shield_active = true
 export var radar_min_radius = 350
 export var radar_max_radius = 2000
@@ -48,13 +47,13 @@ func _physics_process(_delta: float) -> void:
 	velocity = move_and_slide(velocity)
 	global_rotation = velocity.angle() + PI/2.0
 
-func update_radar(enemies: Array):
+func clear_radar():
 	radar_sprite.modulate = Color(1,1,1,0)
-	# remove all existing radar items
 	var children = radar_container.get_children()
 	for child in children:
 		radar_container.remove_child(child)
 
+func update_radar(enemies: Array, color: Color):
 	for e in enemies:
 		var enemy: Enemy = e
 		var diff = enemy.global_position - global_position
@@ -65,7 +64,7 @@ func update_radar(enemies: Array):
 		var angle_to = Vector2.UP.angle_to(diff)
 		var item: Sprite = radar_sprite.duplicate()
 		item.rotate(angle_to)
-		item.modulate = Color(1,0,0,ratio * .5)
+		item.modulate = Color(color.r,color.g,color.b,ratio * .5)
 		radar_container.add_child(item)
 
 func restart():
@@ -106,12 +105,6 @@ func hurt(damage_amount: int = 1):
 		return
 	if shield_active:
 		disable_shield()
-#		var timer = Timer.new()
-#		timer.wait_time = shield_restart_period_seconds
-#		timer.one_shot = true
-#		timer.connect("timeout", self, "enable_shield")
-#		add_child(timer)
-#		timer.start()
 	else:
 		health -= damage_amount
 		if health <= 0:
@@ -138,7 +131,7 @@ func shoot_at(pos: Vector2):
 	if !can_fire:
 		return
 	can_fire = false
-	$ShotTimer.wait_time = weapon.shot_period_seconds
+	$ShotTimer.wait_time = weapon.particle_lifetime_secs
 	$ShotTimer.start()
 	var particle = weapon.particle.instance()
 	owner.add_child(particle)
diff --git a/Player.tscn b/Player.tscn
index e9e0f61..db6d667 100644
--- a/Player.tscn
+++ b/Player.tscn
@@ -161,6 +161,7 @@ rotation = -0.000165944
 z_index = 10
 script = ExtResource( 3 )
 shield_active = false
+radar_max_radius = 3000
 
 [node name="ShipCollisionShape" type="CollisionPolygon2D" parent="."]
 polygon = PoolVector2Array( -0.996349, -22.0002, -8.00133, 7.99867, -7.00166, 9.99884, -11.002, 11.9982, -14.0007, 3.99768, -20.002, 11.9967, -17.0038, 22.9972, -9.00465, 27.9985, -8.00448, 26.9987, -10.0027, 15.9983, -6.00232, 13.999, -0.00398266, 24, 4.99784, 13.0008, 9.99734, 16.0017, 6.99552, 27.0012, 7.99519, 29.0013, 10.9952, 29.0018, 17.996, 24.003, 20.998, 12.0035, 15.9993, 4.00266, 12.9993, 4.00216, 10.9982, 11.0018, 6.99834, 10.0012, 0.00381671, -23 )
diff --git a/Weapon.gd b/Weapon.gd
index ffe8fdd..2f92276 100644
--- a/Weapon.gd
+++ b/Weapon.gd
@@ -1,8 +1,7 @@
 class_name Weapon
 
-var shot_period_seconds = .5
+var cooldown_seconds = .5
+var shooting_range = 400
 var particle: PackedScene
-
-func _init(period_seconds, scene) -> void:
-	shot_period_seconds = period_seconds
-	particle = scene
+var particle_speed = 100
+var particle_lifetime_secs = 5
diff --git a/Weapons.gd b/Weapons.gd
index a22ea22..3aa94da 100644
--- a/Weapons.gd
+++ b/Weapons.gd
@@ -1,12 +1,20 @@
 # Note: `tool` is optional but without it there are no error reporting in the editor
 tool
 
-static func create_basic_gun(period_secs: float = 0.5) -> Weapon:
-	var bullet = preload("res://Bullet.tscn")
-	var weapon = Weapon.new(period_secs, bullet)
+static func create_basic_gun(period_secs: float = 1) -> Weapon:
+	var weapon = Weapon.new()
+	weapon.particle = preload("res://Bullet.tscn")
+	weapon.shooting_range = 500
+	weapon.particle_lifetime_secs = period_secs
+	weapon.particle_speed = 300
+	weapon.cooldown_seconds = 1
 	return weapon
 
 static func create_rocket_gun(period_secs: float = 1) -> Weapon:
-	var rocket = preload("res://Rocket.tscn")
-	var weapon = Weapon.new(period_secs, rocket)
+	var weapon = Weapon.new()
+	weapon.particle = preload("res://Rocket.tscn")
+	weapon.shooting_range = 300
+	weapon.particle_lifetime_secs = period_secs
+	weapon.particle_speed = 100
+	weapon.cooldown_seconds = 1
 	return weapon
diff --git a/World.gd b/World.gd
index ca0bb31..e675ad9 100644
--- a/World.gd
+++ b/World.gd
@@ -7,6 +7,8 @@ const PowerUp = preload("res://PowerUp.tscn")
 var width = ProjectSettings.get("display/window/size/width")
 var height = ProjectSettings.get("display/window/size/height")
 
+onready var player = $Player
+
 var destination: Vector2
 var is_destination_set = false
 var generators = [
@@ -121,7 +123,9 @@ func _process(_delta: float) -> void:
 	for e in filteredEnemies:
 		var enemy: Enemy = e
 		enemy.turn_towards($Player.position)
-	$Player.update_radar(filteredEnemies)
+
+	player.clear_radar()
+	player.update_radar(filteredEnemies, Color.red)
 
 func pause():
 	get_tree().paused = true
@@ -164,7 +168,7 @@ func _on_ShootTimer_timeout() -> void:
 		filteredEnemies.sort_custom(self, "sort_enemies_ascending_distance")
 		var closest_enemy: Enemy = filteredEnemies[0]
 		var dist = closest_enemy.global_position.distance_to($Player.global_position)
-		if dist < $Player.shooting_range:
+		if dist < $Player.weapon.shooting_range:
 			closest_enemy.is_targeted = true
 			$Player.shoot_at(closest_enemy.global_position)
 			$PlayerToTarget.points[0] = $Player.global_position