Further work on Rockets
parent
1f8bb1858b
commit
dd924f53de
|
@ -1,8 +1,18 @@
|
|||
extends Node3D
|
||||
|
||||
@export var hit_effect_scene : PackedScene
|
||||
|
||||
@export var speed : float
|
||||
@export var damage : int
|
||||
|
||||
var source_position : Vector3
|
||||
|
||||
var noise = OpenSimplexNoise.new()
|
||||
var time := 0.0
|
||||
|
||||
@onready var halo = $OmniLight3D/Halo
|
||||
@onready var halo_transform = halo.global_transform
|
||||
|
||||
var ray_previously : bool
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
|
@ -11,8 +21,13 @@ extends Node3D
|
|||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
$OmniLight3D/Smoke.emitting = true
|
||||
|
||||
#$OmniLight3D/Smoke.emitting = true
|
||||
|
||||
noise.octaves = 2
|
||||
noise.persistence = 0.8
|
||||
noise.period = 16
|
||||
noise.seed = randi()
|
||||
|
||||
func _physics_process(delta):
|
||||
#constant_linear_velocity = Vector3(1, 0, 0)
|
||||
translate_object_local(Vector3.FORWARD * speed * delta)
|
||||
|
@ -20,17 +35,56 @@ func _physics_process(delta):
|
|||
# move_and_collide(global_transform.basis.x * Vector3.FORWARD * speed)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
#func _process(delta):
|
||||
# pass
|
||||
func _process(delta):
|
||||
time += delta
|
||||
|
||||
var flicker = sin(time * 225) + sin(time * 240) / 2 + sin(time * 295) / 3
|
||||
|
||||
$OmniLight3D.light_energy = 3 + flicker /2
|
||||
halo.mesh.size = Vector2.ONE * 2 + Vector2(flicker, flicker) / 16
|
||||
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
var physics_ray_query_parameters_3d = PhysicsRayQueryParameters3D.new()
|
||||
physics_ray_query_parameters_3d.from = halo.global_transform.origin
|
||||
physics_ray_query_parameters_3d.to = get_viewport().get_camera_3d().global_transform.origin
|
||||
physics_ray_query_parameters_3d.exclude = [self]
|
||||
var ray = space_state.intersect_ray(physics_ray_query_parameters_3d)
|
||||
|
||||
if ray.size() > 0 and not ray_previously:
|
||||
halo.hide()
|
||||
elif not ray.size() > 0 and ray_previously:
|
||||
halo.show()
|
||||
|
||||
if ray.size() > 0:
|
||||
ray_previously = true
|
||||
else:
|
||||
ray_previously = false
|
||||
|
||||
|
||||
|
||||
func hit():
|
||||
var hit_effect = hit_effect_scene.instantiate()
|
||||
hit_effect.global_transform = global_transform
|
||||
get_tree().root.add_child(hit_effect)
|
||||
queue_free()
|
||||
func give_damage(target: Node, hit_position: Vector3, hit_normal: Vector3, damage: int, source_position: Vector3, type: Globals.DamageType, push: float):
|
||||
if target.has_method(&'take_damage'): # we've hit a player or something else - the ywill handle everything like effects etc.
|
||||
target.rpc(&'take_damage', get_multiplayer_authority(), hit_position, hit_normal, damage, source_position, type, push)
|
||||
else:
|
||||
# TODO take data from the material of the target and spawn an appropriate hit effect
|
||||
var hit_effect : Node = hit_effect_scene.instantiate()
|
||||
get_tree().root.add_child(hit_effect)
|
||||
|
||||
hit_effect.global_transform.origin = hit_position
|
||||
#print(impact_vfx.global_transform)
|
||||
var result = hit_effect.look_at(hit_position + hit_normal)
|
||||
|
||||
if not result: # if the look_at failed (as it will on floors and ceilings) try another approach:
|
||||
hit_effect.look_at(hit_position + hit_normal, Vector3.LEFT)
|
||||
|
||||
hit_effect.rotate(hit_normal, randf_range(0, PI * 2))
|
||||
|
||||
#print(impact_vfx.global_transform)
|
||||
|
||||
func _on_Area3D_body_entered(body):
|
||||
hit()
|
||||
var hit_normal = body.global_transform.origin - global_transform.origin # is this correct?
|
||||
give_damage(body, global_transform.origin, hit_normal,damage, source_position, Globals.DamageType.EXPLOSION, 100)
|
||||
queue_free()
|
||||
|
||||
func _on_Area3D_body_shape_entered(body_rid, body, body_shape_index, local_shape_index):
|
||||
hit()
|
||||
func _on_Timer_timeout():
|
||||
queue_free()
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=13 format=3 uid="uid://bt0lppumya6fv"]
|
||||
[gd_scene load_steps=17 format=3 uid="uid://bt0lppumya6fv"]
|
||||
|
||||
[ext_resource type="Script" path="res://Assets/Weapons/Projectile.gd" id="1_3ywpo"]
|
||||
[ext_resource type="PackedScene" uid="uid://wvxhewre31mo" path="res://Assets/Effects/ImpactExplosion.tscn" id="2_1tben"]
|
||||
|
@ -7,38 +7,42 @@
|
|||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_qjk68"]
|
||||
radius = 0.0853144
|
||||
height = 0.512485
|
||||
height = 0.547775
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_l1dmm"]
|
||||
[sub_resource type="Gradient" id="Gradient_r8j3o"]
|
||||
interpolation_mode = 2
|
||||
offsets = PackedFloat32Array(0, 0.0216998, 0.101266, 0.177215, 0.184448, 1)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 2, 1.66, 0.88, 1, 1, 0.510755, 0.116048, 1, 0.347656, 0.148293, 0.0503992, 1, 0.273438, 0.273438, 0.273438, 1, 0, 0, 0, 1)
|
||||
offsets = PackedFloat32Array(0, 0.0252525, 0.10101, 0.219697, 0.287879, 0.413357, 1)
|
||||
colors = PackedColorArray(0, 0, 0, 1, 1.1, 2.32, 3.47, 1, 2, 1.66, 0.88, 1, 1, 0.510755, 0.116048, 1, 0.699219, 0.298252, 0.101365, 1, 0.125, 0.125, 0.125, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_itq0n"]
|
||||
gradient = SubResource( "Gradient_l1dmm" )
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_3yf1e"]
|
||||
gradient = SubResource( "Gradient_r8j3o" )
|
||||
use_hdr = true
|
||||
|
||||
[sub_resource type="Curve" id="Curve_vfbna"]
|
||||
_data = [Vector2(0, 0.154545), 0.0, 5.74743, 0, 0, Vector2(0.157761, 0.6), 1.49824, 1.49824, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
_data = [Vector2(0, 0), 0.0, 3.14727, 0, 0, Vector2(0.398568, 0.763636), 1.24892, 1.24892, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_n25a7"]
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_m7hhh"]
|
||||
curve = SubResource( "Curve_vfbna" )
|
||||
|
||||
[sub_resource type="ParticlesMaterial" id="ParticlesMaterial_ckuul"]
|
||||
lifetime_randomness = 0.25
|
||||
[sub_resource type="ParticlesMaterial" id="ParticlesMaterial_mu7mc"]
|
||||
lifetime_randomness = 0.6
|
||||
emission_shape = 2
|
||||
emission_box_extents = Vector3(0, 0, 1)
|
||||
direction = Vector3(0, 0, -1)
|
||||
spread = 120.0
|
||||
spread = 5.0
|
||||
gravity = Vector3(0, 0, 0)
|
||||
initial_velocity_min = 4.85
|
||||
initial_velocity_max = 7.44
|
||||
angular_velocity_min = -5.0
|
||||
angular_velocity_max = 5.0
|
||||
damping_min = 20.0
|
||||
damping_max = 26.0
|
||||
damping_min = 13.36
|
||||
damping_max = 17.35
|
||||
angle_min = -180.0
|
||||
angle_max = 180.0
|
||||
scale_min = 1.5
|
||||
scale_max = 2.0
|
||||
scale_curve = SubResource( "CurveTexture_n25a7" )
|
||||
color_ramp = SubResource( "GradientTexture1D_itq0n" )
|
||||
scale_min = 0.5
|
||||
scale_max = 0.75
|
||||
scale_curve = SubResource( "CurveTexture_m7hhh" )
|
||||
color_ramp = SubResource( "GradientTexture1D_3yf1e" )
|
||||
hue_variation_min = -0.01
|
||||
hue_variation_max = 0.01
|
||||
anim_offset_max = 4.0
|
||||
|
@ -50,7 +54,6 @@ collision_use_scale = true
|
|||
blend_mode = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.419608, 0.419608, 0.419608, 1)
|
||||
albedo_texture = ExtResource( "4_aitcu" )
|
||||
disable_receive_shadows = true
|
||||
billboard_mode = 3
|
||||
|
@ -62,13 +65,53 @@ proximity_fade_enable = true
|
|||
[sub_resource type="QuadMesh" id="QuadMesh_gkbg3"]
|
||||
material = SubResource( "StandardMaterial3D_eernl" )
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_x5mjl"]
|
||||
offsets = PackedFloat32Array(0, 0.0696517, 0.154229, 0.241294, 0.320896, 0.425373, 0.537313, 0.634328, 0.756219, 1)
|
||||
colors = PackedColorArray(2, 2, 2, 1, 0.985075, 0.985075, 0.985075, 1, 0.500439, 0.500439, 0.500439, 1, 0.247924, 0.247924, 0.247924, 1, 0.120634, 0.120634, 0.120634, 1, 0.0580323, 0.0580323, 0.0580323, 1, 0.0304474, 0.0304474, 0.0304474, 1, 0.0187759, 0.0187759, 0.0187759, 1, 0.00932661, 0.00932661, 0.00932661, 1, 0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_5y8sa"]
|
||||
gradient = SubResource( "Gradient_x5mjl" )
|
||||
use_hdr = true
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(0.5, 0)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yhx2h"]
|
||||
blend_mode = 1
|
||||
no_depth_test = true
|
||||
shading_mode = 0
|
||||
albedo_color = Color(1, 0.529412, 0.270588, 1)
|
||||
albedo_texture = SubResource( "GradientTexture2D_5y8sa" )
|
||||
disable_receive_shadows = true
|
||||
billboard_mode = 1
|
||||
fixed_size = true
|
||||
point_size = 89.7
|
||||
proximity_fade_distance = 0.5
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_q2732"]
|
||||
material = SubResource( "StandardMaterial3D_yhx2h" )
|
||||
|
||||
[node name="Rocket" type="Node3D"]
|
||||
script = ExtResource( "1_3ywpo" )
|
||||
hit_effect_scene = ExtResource( "2_1tben" )
|
||||
speed = 25.0
|
||||
speed = 35.0
|
||||
damage = 75
|
||||
|
||||
[node name="Rocket" parent="." instance=ExtResource( "3_wqrr6" )]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0, 0)
|
||||
transform = Transform3D(-1.07092e-07, 0, -2.44998, 0, 2.44998, 0, 2.44998, 0, -1.07092e-07, 0, 0, -0.28679)
|
||||
|
||||
[node name="Cylinder005" parent="Rocket" index="0"]
|
||||
transform = Transform3D(1, 0, -7.10543e-15, 0, 1, 0, 7.10543e-15, 0, 1, 0, 0, 0)
|
||||
layers = 2
|
||||
|
||||
[node name="Cube003" parent="Rocket/Cylinder005" index="0"]
|
||||
layers = 2
|
||||
|
||||
[node name="Cube004" parent="Rocket/Cylinder005" index="1"]
|
||||
layers = 2
|
||||
|
||||
[node name="Cube005" parent="Rocket/Cylinder005" index="2"]
|
||||
layers = 2
|
||||
|
||||
[node name="Area3D" type="Area3D" parent="."]
|
||||
collision_layer = 0
|
||||
|
@ -76,26 +119,43 @@ collision_mask = 11
|
|||
monitorable = false
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"]
|
||||
transform = Transform3D(0, 4.37114e-08, -1, 1, 0, 0, 0, -1, -4.37114e-08, 0, 0, 0)
|
||||
transform = Transform3D(0, 8.16337e-08, -1.86756, 1.86756, 0, 0, 0, -1.86756, -8.16337e-08, 0.000959158, 2.38419e-07, -0.307333)
|
||||
shape = SubResource( "CapsuleShape3D_qjk68" )
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0, 0.378725)
|
||||
light_color = Color(1, 0.882353, 0.462745, 1)
|
||||
light_size = 0.25
|
||||
[node name="OmniLight3D" type="SpotLight3D" parent="."]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0, 0.174589)
|
||||
light_color = Color(1, 0.529412, 0.270588, 1)
|
||||
light_size = 0.5
|
||||
shadow_enabled = true
|
||||
shadow_blur = 3.0
|
||||
spot_range = 25.0
|
||||
spot_angle = 71.7513
|
||||
|
||||
[node name="Smoke" type="GPUParticles3D" parent="OmniLight3D"]
|
||||
transform = Transform3D(0.999982, -0.000659683, 0.00600755, 0.000640738, 0.999995, 0.00315697, -0.0060096, -0.00315307, 0.999977, 0.00051539, 1.19209e-07, -0.8097)
|
||||
layers = 2
|
||||
emitting = false
|
||||
amount = 128
|
||||
lifetime = 1.26
|
||||
amount = 1024
|
||||
lifetime = 1.8
|
||||
fixed_fps = 0
|
||||
local_coords = false
|
||||
trail_length_secs = 0.72
|
||||
process_material = SubResource( "ParticlesMaterial_ckuul" )
|
||||
process_material = SubResource( "ParticlesMaterial_mu7mc" )
|
||||
draw_pass_1 = SubResource( "QuadMesh_gkbg3" )
|
||||
|
||||
[node name="Halo" type="MeshInstance3D" parent="OmniLight3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.1)
|
||||
layers = 2
|
||||
cast_shadow = 0
|
||||
mesh = SubResource( "QuadMesh_q2732" )
|
||||
skeleton = NodePath("../..")
|
||||
surface_material_override/0 = null
|
||||
|
||||
[node name="Timer" type="Timer" parent="."]
|
||||
wait_time = 10.0
|
||||
one_shot = true
|
||||
autostart = true
|
||||
|
||||
[connection signal="body_entered" from="Area3D" to="." method="_on_Area3D_body_entered"]
|
||||
[connection signal="body_shape_entered" from="Area3D" to="." method="_on_Area3D_body_shape_entered"]
|
||||
[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
|
||||
|
||||
[editable path="Rocket"]
|
||||
|
|
|
@ -116,8 +116,10 @@ var spread = spread_min
|
|||
# TODO - spawn
|
||||
|
||||
elif weapon_type == WeaponType.PROJECTILE:
|
||||
var projectile_instance : Node3D = projectile_or_tracer_scene.instantiate()
|
||||
var projectile_instance = projectile_or_tracer_scene.instantiate()
|
||||
projectile_instance.global_transform = muzzle.global_transform.looking_at(to)
|
||||
projectile_instance.source_position = player.global_transform.origin
|
||||
#projectile_instance.get_node("RayCast3D").add_exception(player)
|
||||
#projectile_instance.rotate_x(PI/2)
|
||||
get_tree().root.add_child(projectile_instance)
|
||||
|
||||
|
|
Reference in New Issue