From 4920bcaa161ca384b04e1c98ddb6848e0c1618a7 Mon Sep 17 00:00:00 2001 From: teatov Date: Thu, 27 Feb 2025 03:39:49 +1000 Subject: [PATCH] add cursor arrow --- scenes/player.tscn | 4 ++-- scenes/test.tscn | 2 ++ scenes/ui/cursor.tscn | 17 +++++++++++++++++ scripts/globals/cursor.gd | 20 ++++++++++++-------- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/scenes/player.tscn b/scenes/player.tscn index 2ec4ce2..9c1424d 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -121,7 +121,7 @@ bones/6/rotation = Quaternion(-0.0323581, 2.46001e-07, 8.00608e-09, 0.999476) bones/7/rotation = Quaternion(0.123965, -2.40098e-07, -2.92456e-09, 0.992287) bones/7/scale = Vector3(1, 1, 1) bones/8/rotation = Quaternion(-0.0917916, -2.67583e-15, 2.18848e-08, 0.995778) -bones/9/position = Vector3(-0.0739514, 0.0118088, 0.0814874) +bones/9/position = Vector3(-0.074, 0.011816, 0.0814253) bones/9/rotation = Quaternion(1.15202e-07, 0.707107, 0.707107, -5.33851e-08) bones/9/scale = Vector3(1, 1, 1) bones/21/rotation = Quaternion(0.19747, 0.678974, 0.678974, -0.19747) @@ -135,7 +135,7 @@ bones/45/scale = Vector3(1, 1, 1) bones/46/rotation = Quaternion(-0.0181733, 2.38379e-07, 1.14098e-08, 0.999835) bones/47/rotation = Quaternion(-1.20807e-07, 0.993087, -0.117383, 7.85287e-07) bones/49/rotation = Quaternion(-0.034235, -3.57418e-07, 8.86969e-08, 0.999414) -bones/50/rotation = Quaternion(-0.0755608, -0.703058, -0.703058, 0.0755608) +bones/50/rotation = Quaternion(0.0873136, -0.701695, -0.701695, -0.0873136) bones/51/rotation = Quaternion(0.403888, -2.98082e-07, -3.85178e-07, 0.914808) bones/51/scale = Vector3(1, 1, 1) bones/52/rotation = Quaternion(-0.512846, 3.82068e-07, 4.27952e-07, 0.858481) diff --git a/scenes/test.tscn b/scenes/test.tscn index 4648854..3d3d571 100644 --- a/scenes/test.tscn +++ b/scenes/test.tscn @@ -6,6 +6,8 @@ [ext_resource type="PackedScene" uid="uid://cksoaevb5sloo" path="res://scenes/enemies/projectile_spawner.tscn" id="4_84n74"] [sub_resource type="Environment" id="Environment_wctar"] +tonemap_mode = 3 +tonemap_white = 16.0 [node name="Test" type="Node"] diff --git a/scenes/ui/cursor.tscn b/scenes/ui/cursor.tscn index 82599b0..bc884d2 100644 --- a/scenes/ui/cursor.tscn +++ b/scenes/ui/cursor.tscn @@ -59,3 +59,20 @@ grow_vertical = 2 pivot_offset = Vector2(-14, 7) texture = ExtResource("1_77wok") expand_mode = 1 + +[node name="CursorArrow" type="TextureRect" parent="CursorBase"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = 14.0 +offset_top = -4.0 +offset_right = 43.0 +offset_bottom = 4.0 +grow_horizontal = 2 +grow_vertical = 2 +pivot_offset = Vector2(-14, 4) +texture = ExtResource("1_77wok") +expand_mode = 1 diff --git a/scripts/globals/cursor.gd b/scripts/globals/cursor.gd index ebfb5e0..dee2d14 100644 --- a/scripts/globals/cursor.gd +++ b/scripts/globals/cursor.gd @@ -7,6 +7,7 @@ var _side: float @onready var _base: Control = $CursorBase # @onready var _circle: Control = $CursorBase/CursorCircle @onready var _bat: Control = $CursorBase/CursorBat +@onready var _arrow: Control = $CursorBase/CursorArrow func _ready() -> void: @@ -25,7 +26,10 @@ func _process(delta: float) -> void: var cursor_pos_world := player.attack.global_position + player.aiming.aim_offset var cursor_pos_screen := Referencer.main_camera.unproject_position(cursor_pos_world) - _base.position = cursor_pos_screen - _base.size / 2 + _base.position = ( + cursor_pos_screen.clamp(Vector2.ZERO, get_viewport().get_visible_rect().size) + - _base.size / 2 + ) _side = lerpf( _side, @@ -33,13 +37,13 @@ func _process(delta: float) -> void: side_change_speed * delta ) - var rotation_point_world := ( - cursor_pos_world - + player.aiming.aim_offset.normalized().rotated(Vector3.UP, _side) + var aim_offset_normalized := player.aiming.aim_offset.normalized() + var bat_rotation_point_screen := Referencer.main_camera.unproject_position( + cursor_pos_world + aim_offset_normalized.rotated(Vector3.UP, _side) ) - var rotation_point_screen := Referencer.main_camera.unproject_position( - rotation_point_world + var arrow_rotation_point_screen := Referencer.main_camera.unproject_position( + cursor_pos_world + aim_offset_normalized ) - var angle := cursor_pos_screen.angle_to_point(rotation_point_screen) - _bat.rotation = angle + _bat.rotation = cursor_pos_screen.angle_to_point(bat_rotation_point_screen) + _arrow.rotation = cursor_pos_screen.angle_to_point(arrow_rotation_point_screen)