extends RigidBody3D var bullet_speed var bullet_drop var random_spread_amt var bullet_damage var instance_bullethole var bullet_force_mod = 1.0 var distance_from_player var player_position var player_velocity @onready var mesh = $gunbullet1 @onready var ray = $RayCast3D @onready var particles = $GPUParticles3D @onready var enemy_particles = $GPUParticlesEnemy @onready var timer = $Timer @onready var gunbullet1 = $gunbullet1/Cylinder @onready var hit_indicator = $Audio/HitIndicator var rng = RandomNumberGenerator.new() var av_x var av_y var av_z # Called when the node enters the scene tree for the first time. func _ready(): #apply random rotation av_x = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt)) av_y = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt)) av_z = deg_to_rad(rng.randf_range(-random_spread_amt,random_spread_amt)) #angular_velocity += Vector3(av_x,av_y,av_z) linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed) timer.start() visible = false func MoveAndCollide(): pass # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): distance_from_player = abs(self.global_position - player_position) if distance_from_player.x > 2 or distance_from_player.y > 2 or distance_from_player.z > 2: visible = true func _on_body_entered(body): if !body.is_in_group("player"): mesh.visible = false ray.enabled = false #bullethole effect body.add_child(instance_bullethole) instance_bullethole.global_transform.origin = body.get_collision_point() instance_bullethole.look_at(body.get_collision_point() + body.get_collision_normal(), Vector3.UP) ##move rigidbodies #if ray.get_collider().is_in_group("scene_rigidbody"): #ray.get_collider().linear_velocity += transform.basis * Vector3(0,0,-1 * bullet_force_mod) if body.is_in_group("breakable"): var current_velocity = transform.basis * Vector3(0,0,-1 * bullet_force_mod) body.breaking(current_velocity) if body.is_in_group("enemy"): hit_indicator.play() enemy_particles.emitting = true body.hit(bullet_damage) await get_tree().create_timer(1.0).timeout queue_free()