Added aiming for tesla

This commit is contained in:
2025-11-12 22:14:50 +03:00
parent 146a31dea5
commit 6d5bae3a64
13 changed files with 92 additions and 17 deletions
@@ -4,7 +4,7 @@
[ext_resource type="Script" uid="uid://byicf1t0807pq" path="res://game/entities/ships/enemies/abstract_enemy_ship.gd" id="2_fwvrd"]
[ext_resource type="Script" uid="uid://bs8qqj6yepfln" path="res://game/controllers/enemy_controller.gd" id="3_vfnhw"]
[node name="AbstractEnemyShip" instance=ExtResource("1_28j6l")]
[node name="AbstractEnemyShip" groups=["enemies"] instance=ExtResource("1_28j6l")]
collision_layer = 4
collision_mask = 0
script = ExtResource("2_fwvrd")
@@ -26,7 +26,3 @@ shape = SubResource("CapsuleShape2D_cuapu")
[node name="Health" parent="." index="2"]
max_hull = 200
[connection signal="accelerate" from="EnemyController" to="." method="accelerate"]
[connection signal="reload" from="EnemyController" to="." method="reload"]
[connection signal="shoot" from="EnemyController" to="." method="shoot"]
+1 -1
View File
@@ -11,7 +11,7 @@ size = Vector2(48, 32)
radius = 15.0
height = 46.0
[node name="PlayerShip" instance=ExtResource("1_6otxb")]
[node name="PlayerShip" groups=["players"] instance=ExtResource("1_6otxb")]
collision_layer = 3
script = ExtResource("2_625ti")
acceleration = 92
+3 -3
View File
@@ -19,9 +19,9 @@ const ENEMY_PROJECTILE_LAYER = 16
var direction : Vector2
var ship_velocity: Vector2
var collide_player: bool:
var collide_players: bool:
set(value):
collide_player = value
collide_players = value
_apply_collision_mask()
var collide_enemies: bool:
@@ -45,7 +45,7 @@ func _physics_process(delta: float) -> void:
func _apply_collision_mask() -> void:
if collide_player:
if collide_players:
collision_layer |= ENEMY_PROJECTILE_LAYER
collision_mask |= PLAYER_LAYER
else:
+1 -1
View File
@@ -50,7 +50,7 @@ func _create_projectile(ship_velocity: Vector2) -> Node:
projectile.collide_enemies = true
Belonging.ENEMY:
projectile.direction = Vector2.LEFT
projectile.collide_player = true
projectile.collide_players = true
if sector_angle > 0:
var sector_rad := deg_to_rad(sector_angle)
+1 -1
View File
@@ -21,6 +21,6 @@ metadata/_custom_type_script = "uid://dxk56xdihfw4m"
[node name="Tesla" instance=ExtResource("1_rpud7")]
script = ExtResource("2_08si3")
sector_angle = 180
sector_angle = 10
Projectile = ExtResource("2_1rrdy")
reloaders = Array[ExtResource("3_08si3")]([SubResource("Resource_1rrdy"), SubResource("Resource_08si3")])
@@ -1 +1,69 @@
extends AbstractProjectile
@export_range(0.01, 0.5) var jink_min_delay: float = 0.01
@export_range(0.01, 0.5) var jink_max_delay: float = 0.01
@export_range(0, 360) var deviation_angle: int = 0
@export_range(0, 1000) var no_deviation_distance: int = 0
@onready var jinkTimer : Timer = $JinkTimer
func _ready() -> void:
super._ready()
_start_jink_timer()
func _start_jink_timer() -> void:
var random_delay := randf_range(jink_min_delay, jink_max_delay)
jinkTimer.start(random_delay)
func _on_jink_timer_timeout() -> void:
var foe := _get_nearest_foe()
if foe:
_target_foe(foe)
if position.distance_to(foe.position) > no_deviation_distance:
_apply_random_deviation()
else:
_apply_random_deviation()
_start_jink_timer()
func _target_foe(foe: AbstractShip) -> void:
var current_speed := _velocity.length()
var foe_direction := position.direction_to(foe.position)
_velocity = current_speed * foe_direction
func _apply_random_deviation() -> void:
var deviation_rad := deg_to_rad(deviation_angle)
var random_angle := randfn(0.0, deviation_rad / 6.0)
_velocity = _velocity.rotated(random_angle)
func _get_nearest_foe() -> AbstractShip:
var nearest_foe : AbstractShip = null
var minimal_distance := 1000000
for foe in _get_foes():
var distance := floori(position.distance_to(foe.position))
if distance < minimal_distance:
minimal_distance = distance
nearest_foe = foe
return nearest_foe
func _get_foes() -> Array[AbstractShip]:
var foes : Array[AbstractShip] = []
if collide_enemies:
foes.append_array(get_tree().get_nodes_in_group("enemies"))
if collide_players:
foes.append_array(get_tree().get_nodes_in_group("players"))
return foes
@@ -19,6 +19,10 @@ radius = 5.0
collision_layer = 0
collision_mask = 0
script = ExtResource("2_q73is")
jink_min_delay = 0.05
jink_max_delay = 0.09999999999999999
deviation_angle = 90
no_deviation_distance = 50
damage = SubResource("Resource_1121u")
speed = 900
@@ -27,3 +31,8 @@ texture = SubResource("PlaceholderTexture2D_1oexk")
[node name="CollisionShape2D" parent="." index="1"]
shape = SubResource("CircleShape2D_l65ib")
[node name="JinkTimer" type="Timer" parent="." index="3"]
one_shot = true
[connection signal="timeout" from="JinkTimer" to="." method="_on_jink_timer_timeout"]
-3
View File
@@ -3,9 +3,6 @@ extends Resource
class_name AbstractReloader
var _random := RandomNumberGenerator.new()
@abstract
func process(delta: float) -> void
+1 -1
View File
@@ -45,7 +45,7 @@ func can_shoot() -> bool:
func shoot() -> void:
var random_heat := _random.randf_range(-_cool_per_sec_tenth, _cool_per_sec_tenth)
var random_heat := randf_range(-_cool_per_sec_tenth, _cool_per_sec_tenth)
_heat += heat_per_shot + random_heat
+1 -1
View File
@@ -27,7 +27,7 @@ func can_shoot() -> bool:
func shoot() -> void:
var random_delay := _random.randf_range(-_delay_tenth, _delay_tenth)
var random_delay := randf_range(-_delay_tenth, _delay_tenth)
_cooldown = _delay + random_delay
+1 -1
View File
@@ -45,7 +45,7 @@ func shoot() -> void:
func reload() -> void:
if _countdown > 0 or _bullets_in_magazine == magazine_size: return
var random_delay := _random.randf_range(-_reload_time_tenth, _reload_time_tenth)
var random_delay := randf_range(-_reload_time_tenth, _reload_time_tenth)
_countdown = reload_time + random_delay
+5
View File
@@ -34,6 +34,11 @@ window/stretch/mode="viewport"
window/stretch/scale=1.02
window/stretch/scale_mode="integer"
[global_group]
enemies=""
players=""
[input]
ui_accept={