diff --git a/assets/rocket.tscn b/assets/rocket.tscn index adc857e..307252c 100644 --- a/assets/rocket.tscn +++ b/assets/rocket.tscn @@ -64,7 +64,7 @@ height = 1.21279 [sub_resource type="SphereShape3D" id="SphereShape3D_vdo7n"] radius = 10.0 -[node name="Rocket" type="RigidBody3D" node_paths=PackedStringArray("blast_radius")] +[node name="Rocket" type="RigidBody3D" node_paths=PackedStringArray("blast_radius_area", "radius_shape")] collision_layer = 6 collision_mask = 7 continuous_cd = true @@ -72,7 +72,8 @@ max_contacts_reported = 100 contact_monitor = true script = ExtResource("1_s0phn") explosion = ExtResource("2_mbh48") -blast_radius = NodePath("BlastRadius") +blast_radius_area = NodePath("BlastRadius") +radius_shape = NodePath("BlastRadius/radiusShape") blast_radius_falloff = SubResource("CurveTexture_0mibw") [node name="Rocket" type="MeshInstance3D" parent="."] diff --git a/assets/rocket_explosion.tscn b/assets/rocket_explosion.tscn index ebb8a19..4382557 100644 --- a/assets/rocket_explosion.tscn +++ b/assets/rocket_explosion.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=3 uid="uid://6p7d7txcox7i"] +[gd_scene load_steps=9 format=3 uid="uid://6p7d7txcox7i"] [ext_resource type="Script" path="res://scripts/die_particles.gd" id="1_ssw3i"] [ext_resource type="AudioStream" uid="uid://wd061pl0d7rl" path="res://assets/Audio/deep-low-explosion-SBA-300054677.wav" id="5_awm3r"] @@ -24,12 +24,15 @@ spread = 66.739 initial_velocity_min = 10.0 initial_velocity_max = 15.0 scale_min = 0.1 +scale_max = 0.3 hue_variation_min = 0.1 hue_variation_max = 0.2 hue_variation_curve = SubResource("CurveTexture_7652j") [sub_resource type="BoxMesh" id="BoxMesh_rsjsy"] +[sub_resource type="Skin" id="Skin_v2ayh"] + [node name="rocketexplosion" type="Node3D"] script = ExtResource("1_ssw3i") @@ -46,6 +49,7 @@ trail_enabled = true trail_lifetime = 3.2 process_material = SubResource("ParticleProcessMaterial_evi0f") draw_pass_1 = SubResource("BoxMesh_rsjsy") +draw_skin = SubResource("Skin_v2ayh") [node name="Audio" type="Node3D" parent="."] diff --git a/scripts/rocket.gd b/scripts/rocket.gd index b25f497..f267f36 100644 --- a/scripts/rocket.gd +++ b/scripts/rocket.gd @@ -1,11 +1,12 @@ extends RigidBody3D @export var explosion : Resource -@export var blast_radius : Node +@export var blast_radius_area : Node +@export var radius_shape : Node @export var blast_radius_falloff : Resource -@onready var radius_shape = $BlastRadius/radiusShape var blast_power +var blast_radius var bullet_speed var player_velocity var bullet_damage @@ -14,7 +15,7 @@ var player_position # Called when the node enters the scene tree for the first time. func _ready(): linear_velocity += transform.basis * Vector3(0, 0, -bullet_speed) + player_velocity - + blast_radius = radius_shape.shape.radius # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta): @@ -22,26 +23,28 @@ func _process(delta): func _on_body_shape_entered(body_rid, body, body_shape_index, local_shape_index): - #move objects - explode() - - #Spawn gpu particles - var explosionspawn = explosion.instantiate() - explosionspawn.position = self.global_position - explosionspawn.transform.basis = self.global_transform.basis - get_tree().get_root().add_child(explosionspawn) - queue_free() + if !body.is_in_group("player"): + #move objects + explode() + + #Spawn gpu particles + var explosionspawn = explosion.instantiate() + explosionspawn.position = self.global_position + explosionspawn.transform.basis = self.global_transform.basis + get_tree().get_root().add_child(explosionspawn) + queue_free() func explode(): #get all collision objects that can be moved - var moveable_rigidbodies = blast_radius.get_overlapping_bodies() + var moveable_rigidbodies = blast_radius_area.get_overlapping_bodies() + #for each object determine vector from center of blast radius #apply linear velocity power as the inverse % of distance towards the edge (bonus points if using curve texture) #break breakable objects for body in moveable_rigidbodies: if body.is_in_group("scene_rigidbody"): - var blast_direction = (body.global_position - blast_radius.global_position).normalized() - var blast_amount = 1 - ((body.global_position - blast_radius.global_position).length() / 10) + var blast_direction = (body.global_position - blast_radius_area.global_position).normalized() + var blast_amount = 1 - ((body.global_position - blast_radius_area.global_position).length() / blast_radius) var blast_velocity = blast_direction * blast_power * blast_amount if body.is_in_group("breakable"): body.breaking(blast_velocity)