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="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="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"]
resource_name = "rocketlauncher1.rocket"
cull_mode = 2
@@ -54,7 +61,10 @@ shadow_mesh = SubResource("ArrayMesh_xh68t")
radius = 0.154605
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_mask = 7
continuous_cd = true
@@ -62,14 +72,23 @@ max_contacts_reported = 100
contact_monitor = true
script = ExtResource("1_s0phn")
explosion = ExtResource("2_mbh48")
blast_radius = NodePath("BlastRadius")
blast_radius_falloff = SubResource("CurveTexture_0mibw")
[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")
skeleton = NodePath("")
[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")
[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"]

View File

@@ -218,6 +218,29 @@ _surfaces = [{
blend_shape_mode = 0
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"]
resource_name = "shoot"
length = 0.1
@@ -247,29 +270,6 @@ tracks/1/keys = {
"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"]
resource_name = "swap_in"
tracks/0/type = "value"
@@ -375,7 +375,7 @@ mesh = SubResource("ArrayMesh_5qx80")
skeleton = NodePath("")
[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)
[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")]
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_rotation_amount = 0.07

View File

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

View File

@@ -1,7 +1,11 @@
extends RigidBody3D
@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 player_velocity
var bullet_damage
@@ -18,8 +22,30 @@ 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()
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 start_mags = 3
@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_drop = .3
@export var random_spread_amt = 1.0
@@ -97,6 +97,7 @@ func shoot(delta):
instance_bullet.bullet_speed = bullet_speed
instance_bullet.player_velocity = player.velocity
instance_bullet.bullet_damage = bullet_damage
instance_bullet.blast_power = blast_power
instance_bullet.player_position = player.global_position
get_tree().get_root().add_child(instance_bullet)