rocket launcher moves objects, blast radius not falling off properly yet

This commit is contained in:
derek
2024-08-01 10:37:18 -05:00
parent 6354dc2774
commit dc6fcf9556
6 changed files with 80 additions and 31 deletions

View File

@@ -1,10 +1,17 @@
[gd_scene load_steps=9 format=3 uid="uid://hptaoyu5jeqk"] [gd_scene load_steps=12 format=3 uid="uid://hptaoyu5jeqk"]
[ext_resource type="Texture2D" uid="uid://v6217lr32l0m" path="res://assets/Models/rocket1.png" id="1_f6yyc"] [ext_resource type="Texture2D" uid="uid://v6217lr32l0m" path="res://assets/Models/rocket1.png" id="1_f6yyc"]
[ext_resource type="Script" path="res://scripts/rocket.gd" id="1_s0phn"] [ext_resource type="Script" path="res://scripts/rocket.gd" id="1_s0phn"]
[ext_resource type="Texture2D" uid="uid://cfanvwkgixns0" path="res://assets/Models/rocket.rough.png" id="2_g6kha"] [ext_resource type="Texture2D" uid="uid://cfanvwkgixns0" path="res://assets/Models/rocket.rough.png" id="2_g6kha"]
[ext_resource type="PackedScene" uid="uid://6p7d7txcox7i" path="res://assets/rocket_explosion.tscn" id="2_mbh48"] [ext_resource type="PackedScene" uid="uid://6p7d7txcox7i" path="res://assets/rocket_explosion.tscn" id="2_mbh48"]
[sub_resource type="Curve" id="Curve_lnjp5"]
_data = [Vector2(0, 0), 0.0, 1.4, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="CurveTexture" id="CurveTexture_0mibw"]
curve = SubResource("Curve_lnjp5")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2051l"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2051l"]
resource_name = "rocketlauncher1.rocket" resource_name = "rocketlauncher1.rocket"
cull_mode = 2 cull_mode = 2
@@ -54,7 +61,10 @@ shadow_mesh = SubResource("ArrayMesh_xh68t")
radius = 0.154605 radius = 0.154605
height = 1.21279 height = 1.21279
[node name="Rocket" type="RigidBody3D"] [sub_resource type="SphereShape3D" id="SphereShape3D_vdo7n"]
radius = 10.0
[node name="Rocket" type="RigidBody3D" node_paths=PackedStringArray("blast_radius")]
collision_layer = 6 collision_layer = 6
collision_mask = 7 collision_mask = 7
continuous_cd = true continuous_cd = true
@@ -62,14 +72,23 @@ max_contacts_reported = 100
contact_monitor = true contact_monitor = true
script = ExtResource("1_s0phn") script = ExtResource("1_s0phn")
explosion = ExtResource("2_mbh48") explosion = ExtResource("2_mbh48")
blast_radius = NodePath("BlastRadius")
blast_radius_falloff = SubResource("CurveTexture_0mibw")
[node name="Rocket" type="MeshInstance3D" parent="."] [node name="Rocket" type="MeshInstance3D" parent="."]
transform = Transform3D(-1.48467e-14, -4.37114e-08, -1, -1, 3.13916e-07, 1.12501e-15, 3.13916e-07, 1, -4.37114e-08, -0.103685, 0, -0.116837) transform = Transform3D(-1.48467e-14, -4.37114e-08, -1, -1, 3.13916e-07, 1.12501e-15, 3.13916e-07, 1, -4.37114e-08, 0, 0, -0.117)
mesh = SubResource("ArrayMesh_atqsb") mesh = SubResource("ArrayMesh_atqsb")
skeleton = NodePath("") skeleton = NodePath("")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1.91069e-15, 4.37114e-08, -1, 1, -4.37114e-08, 0, -4.37114e-08, -1, -4.37114e-08, -0.131657, 0, 0.116837) transform = Transform3D(1.91069e-15, 4.37114e-08, -1, 1, -4.37114e-08, 0, -4.37114e-08, -1, -4.37114e-08, 0, 0, 0.117)
shape = SubResource("CapsuleShape3D_8v4gm") shape = SubResource("CapsuleShape3D_8v4gm")
[node name="BlastRadius" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 7
[node name="radiusShape" type="CollisionShape3D" parent="BlastRadius"]
shape = SubResource("SphereShape3D_vdo7n")
[connection signal="body_shape_entered" from="." to="." method="_on_body_shape_entered"] [connection signal="body_shape_entered" from="." to="." method="_on_body_shape_entered"]

View File

@@ -218,6 +218,29 @@ _surfaces = [{
blend_shape_mode = 0 blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_6x5ra") shadow_mesh = SubResource("ArrayMesh_6x5ra")
[sub_resource type="Animation" id="Animation_0783b"]
resource_name = "empty"
[sub_resource type="Animation" id="Animation_maeha"]
resource_name = "inspect"
[sub_resource type="Animation" id="Animation_yxlbo"]
resource_name = "reload"
tracks/0/type = "method"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"reload_finished"
}]
}
[sub_resource type="Animation" id="Animation_qw7o5"] [sub_resource type="Animation" id="Animation_qw7o5"]
resource_name = "shoot" resource_name = "shoot"
length = 0.1 length = 0.1
@@ -247,29 +270,6 @@ tracks/1/keys = {
"values": [Vector3(0, -1.5708, -1.5708), Vector3(0, -1.5708, -1.5708)] "values": [Vector3(0, -1.5708, -1.5708), Vector3(0, -1.5708, -1.5708)]
} }
[sub_resource type="Animation" id="Animation_yxlbo"]
resource_name = "reload"
tracks/0/type = "method"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"reload_finished"
}]
}
[sub_resource type="Animation" id="Animation_0783b"]
resource_name = "empty"
[sub_resource type="Animation" id="Animation_maeha"]
resource_name = "inspect"
[sub_resource type="Animation" id="Animation_rqg2e"] [sub_resource type="Animation" id="Animation_rqg2e"]
resource_name = "swap_in" resource_name = "swap_in"
tracks/0/type = "value" tracks/0/type = "value"
@@ -375,7 +375,7 @@ mesh = SubResource("ArrayMesh_5qx80")
skeleton = NodePath("") skeleton = NodePath("")
[node name="BarrelRaycast" type="RayCast3D" parent="rocketlauncher1"] [node name="BarrelRaycast" type="RayCast3D" parent="rocketlauncher1"]
transform = Transform3D(1.91069e-15, -1, -4.37114e-08, -4.37114e-08, -4.37114e-08, 1, -1, 3.53024e-22, -4.37114e-08, -0.0398292, -1.19895, -0.158627) transform = Transform3D(1.91069e-15, -1, -4.37114e-08, -4.37114e-08, -4.37114e-08, 1, -1, 3.53024e-22, -4.37114e-08, 0, -1.199, 0)
target_position = Vector3(0, 0, -1) target_position = Vector3(0, 0, -1)
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]

View File

@@ -1167,6 +1167,7 @@ gun_2 = ExtResource("2_ayfr5")
[node name="Player" parent="." instance=ExtResource("4_4bx26")] [node name="Player" parent="." instance=ExtResource("4_4bx26")]
transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, -16.0295, 1.4435, 12.1166) transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, -16.0295, 1.4435, 12.1166)
AUDIO = false
weapon_sway_amount = 0.07 weapon_sway_amount = 0.07
weapon_rotation_amount = 0.07 weapon_rotation_amount = 0.07

View File

@@ -33,8 +33,10 @@ var start_sensitivity
@export var BASE_FOV : float = 80 @export var BASE_FOV : float = 80
@export var FOV_CHANGE = 1.5 @export var FOV_CHANGE = 1.5
@export_group("Gun") #@export_group("Gun") DELETE IF DOESNT CAUSE ISSUES
@export var gun : Node #@export
var gun : Node
@onready var gun_ray = $Head/Camera3D/GunRay @onready var gun_ray = $Head/Camera3D/GunRay
@onready var level_control = $".." @onready var level_control = $".."

View File

@@ -1,7 +1,11 @@
extends RigidBody3D extends RigidBody3D
@export var explosion : Resource @export var explosion : Resource
@export var blast_radius : Node
@export var blast_radius_falloff : Resource
@onready var radius_shape = $BlastRadius/radiusShape
var blast_power
var bullet_speed var bullet_speed
var player_velocity var player_velocity
var bullet_damage var bullet_damage
@@ -18,8 +22,30 @@ func _process(delta):
func _on_body_shape_entered(body_rid, body, body_shape_index, local_shape_index): func _on_body_shape_entered(body_rid, body, body_shape_index, local_shape_index):
#move objects
explode()
#Spawn gpu particles
var explosionspawn = explosion.instantiate() var explosionspawn = explosion.instantiate()
explosionspawn.position = self.global_position explosionspawn.position = self.global_position
explosionspawn.transform.basis = self.global_transform.basis explosionspawn.transform.basis = self.global_transform.basis
get_tree().get_root().add_child(explosionspawn) get_tree().get_root().add_child(explosionspawn)
queue_free() queue_free()
func explode():
#get all collision objects that can be moved
var moveable_rigidbodies = blast_radius.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 = (10 / (body.global_position - blast_radius.global_position).length()) / 10
print("blast direction "+str(blast_direction))
print("blast amount "+str(blast_amount))
var blast_velocity = blast_direction * blast_power * blast_amount
if body.is_in_group("breakable"):
body.breaking(blast_velocity)
else:
body.linear_velocity += blast_velocity

View File

@@ -14,7 +14,7 @@ var cycle_count
@export var max_ammo = 15 @export var max_ammo = 15
@export var start_mags = 3 @export var start_mags = 3
@export var bullet_damage = 1 @export var bullet_damage = 1
@export var bullet_force_mod = 5.0 @export var blast_power = 50.0
@export var bullet_speed : float = 150 @export var bullet_speed : float = 150
@export var bullet_drop = .3 @export var bullet_drop = .3
@export var random_spread_amt = 1.0 @export var random_spread_amt = 1.0
@@ -97,6 +97,7 @@ func shoot(delta):
instance_bullet.bullet_speed = bullet_speed instance_bullet.bullet_speed = bullet_speed
instance_bullet.player_velocity = player.velocity instance_bullet.player_velocity = player.velocity
instance_bullet.bullet_damage = bullet_damage instance_bullet.bullet_damage = bullet_damage
instance_bullet.blast_power = blast_power
instance_bullet.player_position = player.global_position instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet) get_tree().get_root().add_child(instance_bullet)