diff --git a/Characters/Player.cs b/Characters/Player.cs index 26eab10..5496048 100644 --- a/Characters/Player.cs +++ b/Characters/Player.cs @@ -11,6 +11,8 @@ public sealed partial class Player : Character { private string _spriteAnim; + private TargetTracer _targetTracer; + public Vector2 DesiredTarget { get; set; } [Export] @@ -28,6 +30,8 @@ public sealed partial class Player : Character { InteractionRay = GetNode("Direction2D/InteractionRay"); + _targetTracer = GetNode("%TargetTracer"); + base._Ready(); Inventory.UsedItem += (Items.Item item) => @@ -48,6 +52,8 @@ public sealed partial class Player : Character public override void _Process(double delta) { base._Process(delta); + + _targetTracer.Rotation = DesiredTarget.Angle(); } public override void _Input(InputEvent @event) diff --git a/Characters/Player.tscn b/Characters/Player.tscn index 855c060..ad25718 100644 --- a/Characters/Player.tscn +++ b/Characters/Player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=66 format=3 uid="uid://b2254pup8k161"] +[gd_scene load_steps=67 format=3 uid="uid://b2254pup8k161"] [ext_resource type="Script" path="res://Characters/Player.cs" id="1_flygr"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_ngsgt"] @@ -31,6 +31,7 @@ [ext_resource type="Texture2D" uid="uid://d1ukste16yq6v" path="res://Assets/Sprites/Particles/player-light.png" id="15_3hahh"] [ext_resource type="Script" path="res://Utils/DamageTime.cs" id="15_4xl06"] [ext_resource type="PackedScene" uid="uid://g7wfcubs6bdd" path="res://Items/Weapons/Railgun.tscn" id="21_n8w32"] +[ext_resource type="PackedScene" uid="uid://ce0ph4wk0ylra" path="res://UI/TargetTracer.tscn" id="22_hxi53"] [ext_resource type="PackedScene" uid="uid://5y1acxl4j4n7" path="res://Items/Weapons/Pugio.tscn" id="22_mqpn7"] [ext_resource type="PackedScene" uid="uid://d1d4vg7we5rjr" path="res://Items/Weapons/Shotgun.tscn" id="22_rmciq"] @@ -452,6 +453,10 @@ stream = ExtResource("13_bxguv") [node name="HurtSound" type="AudioStreamPlayer2D" parent="Effects"] stream = ExtResource("12_vvem5") +[node name="TargetTracer" parent="Effects" instance=ExtResource("22_hxi53")] +unique_name_in_owner = true +position = Vector2(0, -4) + [node name="Camera2D" parent="." instance=ExtResource("4_ym125")] zoom = Vector2(4, 4) position_smoothing_speed = 8.0 @@ -513,6 +518,9 @@ UseTime = 0.2 [node name="DocLance" parent="Inventory" instance=ExtResource("14_bj0lo")] +[node name="RemoteTransform2D2" type="RemoteTransform2D" parent="Inventory"] +position = Vector2(0, 4) + [node name="Hurtbox" parent="." node_paths=PackedStringArray("InvincibilityTimer") instance=ExtResource("9_avyu4")] visible = false InvincibilityTimer = NodePath("Timer") @@ -527,7 +535,6 @@ shape = SubResource("RectangleShape2D_cjk6b") one_shot = true [node name="AudioListener2D" type="AudioListener2D" parent="."] -visible = false current = true [node name="Direction2D" type="Marker2D" parent="."] diff --git a/Shaders/Scrolling.gdshader b/Shaders/Scrolling.gdshader new file mode 100644 index 0000000..d78cc43 --- /dev/null +++ b/Shaders/Scrolling.gdshader @@ -0,0 +1,8 @@ +shader_type canvas_item; + +uniform float speed = 16; +uniform vec2 direction = vec2(1, 0); + +void fragment() { + COLOR = texture(TEXTURE, UV - direction * TIME * speed); +} diff --git a/UI/TargetTracer.cs b/UI/TargetTracer.cs new file mode 100644 index 0000000..7be0021 --- /dev/null +++ b/UI/TargetTracer.cs @@ -0,0 +1,20 @@ +using Godot; + +public partial class TargetTracer : Node2D +{ + private Line2D _line; + + private float Intensity + { + get => SelfModulate.A; + set + { + SelfModulate = new Color(SelfModulate, value); + } + } + + public override void _Ready() + { + _line = GetNode("Line2D"); + } +} diff --git a/UI/TargetTracer.tscn b/UI/TargetTracer.tscn new file mode 100644 index 0000000..5dd4b81 --- /dev/null +++ b/UI/TargetTracer.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=6 format=3 uid="uid://ce0ph4wk0ylra"] + +[ext_resource type="Shader" path="res://Shaders/Scrolling.gdshader" id="1_1y0lt"] +[ext_resource type="Script" path="res://UI/TargetTracer.cs" id="1_mtnfa"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_hcccp"] +shader = ExtResource("1_1y0lt") +shader_parameter/speed = 1.0 +shader_parameter/direction = Vector2(1, 0) + +[sub_resource type="Gradient" id="Gradient_0wna6"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0, 0.867133) +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_icdwl"] +gradient = SubResource("Gradient_0wna6") +width = 2 +height = 1 + +[node name="TargetTracer" type="Node2D"] +script = ExtResource("1_mtnfa") + +[node name="Line2D" type="Line2D" parent="."] +z_index = 31 +texture_repeat = 2 +material = SubResource("ShaderMaterial_hcccp") +scale = Vector2(1, 0.5) +points = PackedVector2Array(0, 0, 32, 0) +width = 2.0 +texture = SubResource("GradientTexture2D_icdwl") +texture_mode = 1