Use this space for questions related to what you're learning. For any other type of support (website, learning platform, payments, etc...) please get in touch using the contact form.
My mob don't want to shoot mePixAngelI don't understand why my mob don't want to shoot the player. I've been looking for this issue for two hours now... and nothing
I share all my scripts, if anyone has an idea of what I'm doing wrong :
mob_2.gd:
```gdscript
class_name Mob2 extends Mob
@onready var area_2d: Area2D = %Area2D
@onready var weapon_2: AutoWeapon = $Marker2D/Weapon2
@onready var _cool_down_timer: Timer = %CoolDownTimer
func _ready() -> void:
super()
_cool_down_timer.wait_time = 1.0
_cool_down_timer.timeout.connect(func () -> void:
if _player != null:
weapon_2.shoot()
)
_cool_down_timer.start()
func _physics_process(delta: float) -> void:
var desired_velocity = Vector2.ZERO
if _player != null:
var direction = global_position.direction_to(_player.global_position)
var distance = global_position.distance_to(_player.global_position)
desired_velocity = direction * max_speed
weapon_2.look_at(_player.global_position)
velocity = velocity.move_toward(desired_velocity, acceleration * delta)
move_and_slide()
```
bullet_2.gd:
```gdscript
class_name Bullet_2 extends Area2D
@onready var _destroy_sound: AudioStreamPlayer = %AudioStreamPlayer
@export var max_speed := 950.0
@export var max_range := 1200.0
@export var damage := 1
@export var target_player : bool :
set = set_target_player
var traveled_distance := 0.0
func _ready() -> void:
body_entered.connect(func (body : Node) -> void:
if body is Mob2 or body is Player:
body.health -= damage
_destroy()
)
set_target_player(target_player)
func _physics_process(delta: float) -> void:
var direction = Vector2.RIGHT.rotated(rotation)
var velocity = direction * max_speed
position += velocity * delta
traveled_distance += max_speed * delta
if traveled_distance > max_range:
_destroy()
func _destroy() -> void:
set_physics_process(false)
queue_free()
func _on_body_entered(body : Node):
if body is Player:
body.health -= damage
_destroy()
func set_target_player(value : bool) -> void:
target_player = value
const PLAYER_PHYSICS_LAYER = 1
const MOB_PHYSICS_LAYER = 3
set_collision_layer_value(MOB_PHYSICS_LAYER, not target_player)
set_collision_layer_value(PLAYER_PHYSICS_LAYER, target_player)
```
weapon2.gd:
```gdscript
class_name AutoWeapon extends Weapon
@export var bullet_2 : PackedScene = null
@onready var _cool_down_timer: Timer = %CoolDownTimer
func _physics_process(delta: float) -> void:
return
func shoot() -> void:
var new_bullet : Bullet_2 = bullet_2.instantiate()
get_tree().current_scene.add_child(new_bullet)
new_bullet.target_player = true
new_bullet.global_position = global_position
new_bullet.global_rotation = global_rotation
new_bullet.rotation += randf_range(-PI / 30.0, PI / 30.0)
```
40Jan. 23, 2025
Lesson Q&A
Use this space for questions related to what you're learning. For any other type of support (website, learning platform, payments, etc...) please get in touch using the contact form.