rocket pull radius of collision shape for blast radius

This commit is contained in:
derek
2024-08-01 11:33:15 -05:00
parent b1c92e5d2c
commit e4129d7fb7
3 changed files with 26 additions and 18 deletions

View File

@@ -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)