diff --git a/Particles/Player/AfterImage.tscn b/Particles/Player/AfterImage.tscn new file mode 100644 index 0000000..f95654a --- /dev/null +++ b/Particles/Player/AfterImage.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=3 uid="uid://bfd5g1y0u4e38"] + +[ext_resource type="Script" path="res://Particles/Scripts/FadeAway.gd" id="1_jmv86"] + +[node name="AfterImage" type="Sprite2D"] +modulate = Color(1, 1, 1, 0.752941) +show_behind_parent = true +top_level = true +visibility_layer = 257 +rotation = 0.0123838 +script = ExtResource("1_jmv86") diff --git a/Particles/Scripts/FadeAway.gd b/Particles/Scripts/FadeAway.gd new file mode 100644 index 0000000..ff74b77 --- /dev/null +++ b/Particles/Scripts/FadeAway.gd @@ -0,0 +1,20 @@ +extends Sprite2D + +@onready var parent = get_parent() + +var duration = 0.25 + +func _ready(): + self_modulate = parent.self_modulate + texture = parent.texture + scale = parent.scale + offset = parent.offset + global_position = parent.global_position + rotation = parent.rotation + + var tween = create_tween() + tween.tween_property(self, "modulate", Color8(255, 255, 255, 0), duration) + + await get_tree().create_timer(duration).timeout + + queue_free() diff --git a/Player/BasicCharacter/AnimationController.gd b/Player/BasicCharacter/AnimationController.gd index b6c7fcb..5ba4323 100644 --- a/Player/BasicCharacter/AnimationController.gd +++ b/Player/BasicCharacter/AnimationController.gd @@ -18,17 +18,34 @@ var landed = 0 @onready var slidingVariants = [$"WallslidingNeutral", $"WallslidingUp", $"WallslidingDown"] +var afterImage = preload("res://Particles/Player/AfterImage.tscn") + func disableSlidingVariants(keep=null): for variant in slidingVariants: if variant != keep: variant.emitting = false +var imageTimer = 0 +var imaging = false +var lastImage = Vector2.ZERO + func _process(delta): + var velocity = player.velocity - var grapple = $"GrappleCore" + var grapple = $"Grapple/GrappleCore" var floored = player.is_on_floor() + if velocity.length() >= 1100: + imaging = true + elif velocity.length() < 800: + imaging = false + + if (imaging or find_child("Grapple") and $"Grapple".grappling) and (global_position - lastImage).length() > 16: + var parti = afterImage.instantiate() + add_child(parti) + parti.duration = velocity.length() / 2000 + lastImage = global_position if player.isWallSliding(): var wallSlidingParticles = slidingVariants[0] if abs(velocity.y) < 150: @@ -53,6 +70,10 @@ func _process(delta): if player.isWallSliding(): rotation = lerp(rotation, deg_to_rad(30) * player.get_wall_normal().x + snappedf(rotation, PI / 2), delta * 15) else: + if Input.is_action_just_pressed("down"): + scale.x = 2 + scale.y *= 0.5 + var floorRot = player.get_floor_normal().angle() + (PI / 2) if abs(rotation - floorRot) > 0.9: diff --git a/Player/BasicCharacter/Character.tscn b/Player/BasicCharacter/Character.tscn index 1841549..76b4386 100644 --- a/Player/BasicCharacter/Character.tscn +++ b/Player/BasicCharacter/Character.tscn @@ -2,7 +2,7 @@ [ext_resource type="Texture2D" uid="uid://dvx8lliqdi3dv" path="res://Player/Skins/Square/Square.png" id="1_3vfyw"] [ext_resource type="Script" path="res://Player/BasicCharacter/CharacterController.gd" id="1_c5ycp"] -[ext_resource type="PackedScene" uid="uid://cjjrxtvufk35a" path="res://Player/Camera/camera.tscn" id="2_oahgu"] +[ext_resource type="Script" path="res://Player/Camera/CameraController.gd" id="2_yp33m"] [ext_resource type="Script" path="res://Player/BasicCharacter/AnimationController.gd" id="3_6plye"] [ext_resource type="Script" path="res://Player/GrappleHook/GrappleHook.gd" id="5_sv1u0"] [ext_resource type="Texture2D" uid="uid://bi5ofgcvid5qk" path="res://Player/GrappleHook/GrappleCenter.png" id="6_ismrc"] @@ -14,7 +14,7 @@ radius = 8.0 _data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.738916, 0), -1.78462, 0.0, 0, 0] point_count = 2 -[sub_resource type="CurveTexture" id="CurveTexture_d404m"] +[sub_resource type="CurveTexture" id="CurveTexture_1w0c6"] curve = SubResource("Curve_ky2t4") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_65t6y"] @@ -27,7 +27,7 @@ initial_velocity_max = 34.78 gravity = Vector3(0, 250, 0) scale_min = 2.0 scale_max = 2.0 -scale_curve = SubResource("CurveTexture_d404m") +scale_curve = SubResource("CurveTexture_1w0c6") [node name="Character" type="CharacterBody2D"] collision_mask = 7 @@ -35,8 +35,11 @@ floor_stop_on_slope = false floor_snap_length = 3.0 script = ExtResource("1_c5ycp") -[node name="Camera" parent="." instance=ExtResource("2_oahgu")] +[node name="Camera" type="Camera2D" parent="."] +zoom = Vector2(3, 3) +position_smoothing_enabled = true position_smoothing_speed = 20.0 +script = ExtResource("2_yp33m") [node name="BoxCollider" type="CollisionShape2D" parent="."] shape = SubResource("CircleShape2D_jbiem") @@ -44,6 +47,7 @@ shape = SubResource("CircleShape2D_jbiem") [node name="Sprite" type="Sprite2D" parent="."] self_modulate = Color(0.678431, 0.298039, 1, 1) visibility_layer = 257 +z_index = 1 rotation = 0.0123838 texture = ExtResource("1_3vfyw") script = ExtResource("3_6plye") @@ -72,10 +76,10 @@ amount = 24 process_material = SubResource("ParticleProcessMaterial_65t6y") [node name="Grapple" type="Node2D" parent="Sprite"] +modulate = Color(0, 1, 0, 1) script = ExtResource("5_sv1u0") -[node name="GrappleCore" type="Sprite2D" parent="Sprite"] -modulate = Color(0.513726, 1, 0.482353, 1) +[node name="GrappleCore" type="Sprite2D" parent="Sprite/Grapple"] texture = ExtResource("6_ismrc") [connection signal="Jumped" from="." to="Sprite" method="_on_character_jumped"] diff --git a/Player/Camera/camera.tscn b/Player/Camera/camera.tscn deleted file mode 100644 index dc06309..0000000 --- a/Player/Camera/camera.tscn +++ /dev/null @@ -1,9 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://cjjrxtvufk35a"] - -[ext_resource type="Script" path="res://Player/Camera/CameraController.gd" id="1_5yyqm"] - -[node name="Camera" type="Camera2D"] -zoom = Vector2(3, 3) -position_smoothing_enabled = true -position_smoothing_speed = 1.0 -script = ExtResource("1_5yyqm") diff --git a/Player/GrappleHook/GrappleHook.gd b/Player/GrappleHook/GrappleHook.gd index 4dea7f8..824ce8c 100644 --- a/Player/GrappleHook/GrappleHook.gd +++ b/Player/GrappleHook/GrappleHook.gd @@ -3,7 +3,7 @@ extends Node2D @onready var player = $"../../" @onready var sprite = $"../" -@onready var grappleCore = $"../GrappleCore" +@onready var grappleCore = $"GrappleCore" @onready var Smoother = $"../../../Smoother" @@ -63,6 +63,8 @@ func _physics_process(delta): if player.is_on_floor(): grapples = 2 + #$"parti".emitting = grappling + if Input.is_action_just_pressed("pullGrapple") and not proj and grapples: grapples -= 1 @@ -70,23 +72,25 @@ func _physics_process(delta): proj.position = player.position proj.rotation = moveVector.angle() - proj.modulate = Color8(0, 255, 0) + + modulate = Color8(0, 255, 0) + proj.modulate = modulate - proj.velocity = (moveVector * 1500) + player.velocity + proj.velocity = (moveVector * 1000) + player.velocity #grappleDur = 10 add_child(proj) - var parti = grappleShootParti.instantiate() - parti.rotation = proj.rotation - parti.position = proj.position - parti.process_material.initial_velocity_min = (proj.velocity.length() + player.velocity.length()) / 6 - add_child(parti) + #var parti = grappleShootParti.instantiate() + #parti.rotation = proj.rotation + #parti.position = proj.position + #parti.process_material.initial_velocity_min = (proj.velocity.length() + player.velocity.length()) / 6 + #add_child(parti) #else: if proj and grappleDur > 0 and (player.position - proj.position).length() > 15 and not Input.is_action_just_pressed("jump"): launch(delta) elif proj and grappling: - player.jumps += 1 + player.jumps = player.MAX_JUMPS player.falling = false #player.velocity.y = player.JUMP_VELOCITY grappleDur = 0 @@ -103,10 +107,10 @@ func _process(delta): projData.retractDur += delta * 4 / ((projData.retractStart - player.position).length() / 300) renderLine(proj) if projData.retractDur >= 1: - var parti = proj.get_node("parti") - parti.emitting = false - parti.modulate = proj.modulate - parti.reparent(player) + if proj.find_child("parti"): + var parti = proj.get_node("parti") + parti.emitting = false + parti.reparent(self) proj.queue_free() proj = null retractDur = 0 diff --git a/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.gd b/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.gd index bdfc0d5..0a59e3b 100644 --- a/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.gd +++ b/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.gd @@ -21,7 +21,8 @@ func _physics_process(delta): move_and_slide() - $"parti".emitting = (lastPos - position).length() > 0 + if find_child("parti"): + $"parti".emitting = (lastPos - position).length() > 0 if detecting: if lifeTime <= 0: @@ -40,4 +41,5 @@ func _physics_process(delta): detecting = false position = result.position objectHit(result.collider) + lastPos = position diff --git a/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.tscn b/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.tscn index b0993a5..a138473 100644 --- a/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.tscn +++ b/Player/GrappleHook/GrappleHookProjectile/GrappleHookProjectile.tscn @@ -8,21 +8,23 @@ _data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -2.51429, 0.0, 0, 0] point_count = 2 -[sub_resource type="CurveTexture" id="CurveTexture_f4r8k"] +[sub_resource type="CurveTexture" id="CurveTexture_h7vvv"] curve = SubResource("Curve_qnwwb") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_tkwr2"] particle_flag_align_y = true particle_flag_disable_z = true -inherit_velocity_ratio = 0.1 +inherit_velocity_ratio = -0.1 +direction = Vector3(0, 1, 0) spread = 180.0 +flatness = 1.0 initial_velocity_min = 50.0 initial_velocity_max = 50.0 gravity = Vector3(0, 0, 0) damping_min = 50.0 damping_max = 50.0 scale_max = 2.0 -scale_curve = SubResource("CurveTexture_f4r8k") +scale_curve = SubResource("CurveTexture_h7vvv") [node name="GrappleHook" type="CharacterBody2D"] top_level = true @@ -39,7 +41,7 @@ texture = ExtResource("2_sst4t") [node name="GrappleLine" type="Line2D" parent="."] top_level = true -z_index = 1 +z_index = 2 texture_repeat = 2 points = PackedVector2Array(0, 0, 33, 0) width = 4.0 @@ -53,6 +55,7 @@ round_precision = 4 [node name="GrappleBord" type="Line2D" parent="."] modulate = Color(0, 0, 0, 1) top_level = true +z_index = 1 texture_repeat = 2 points = PackedVector2Array(0, 0, 33, 0) width = 6.0 @@ -63,7 +66,7 @@ end_cap_mode = 2 round_precision = 4 [node name="parti" type="GPUParticles2D" parent="."] -amount = 100 +amount = 200 process_material = SubResource("ParticleProcessMaterial_tkwr2") lifetime = 2.0 fixed_fps = 0