add custom cursor
This commit is contained in:
parent
77764f2892
commit
5f1cd4b796
@ -26,6 +26,7 @@ Referencer="*res://scripts/globals/referencer.gd"
|
||||
Inputer="*res://scripts/globals/inputer.gd"
|
||||
Debugger="*res://scenes/debugger.tscn"
|
||||
Settings="*res://scripts/globals/settings.gd"
|
||||
Cursor="*res://scenes/ui/cursor.tscn"
|
||||
|
||||
[debug]
|
||||
|
||||
|
||||
61
scenes/ui/cursor.tscn
Normal file
61
scenes/ui/cursor.tscn
Normal file
@ -0,0 +1,61 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://0y0n7ltt7g4e"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://xi8bgmkq6kiq" path="res://assets/textures/shadow_decal.png" id="1_77wok"]
|
||||
[ext_resource type="Script" path="res://scripts/globals/cursor.gd" id="1_tkygf"]
|
||||
|
||||
[node name="Cursor" type="CanvasLayer"]
|
||||
process_mode = 3
|
||||
process_priority = 1000
|
||||
process_physics_priority = 1000
|
||||
layer = 128
|
||||
script = ExtResource("1_tkygf")
|
||||
|
||||
[node name="CursorBase" type="Control" parent="."]
|
||||
layout_mode = 3
|
||||
anchors_preset = 8
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -20.0
|
||||
offset_top = -20.0
|
||||
offset_right = 20.0
|
||||
offset_bottom = 20.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
pivot_offset = Vector2(20, 20)
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="CursorCircle" 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 = -13.0
|
||||
offset_top = -13.0
|
||||
offset_right = 13.0
|
||||
offset_bottom = 13.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
pivot_offset = Vector2(13, 13)
|
||||
texture = ExtResource("1_77wok")
|
||||
expand_mode = 1
|
||||
|
||||
[node name="CursorBat" 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 = -7.0
|
||||
offset_right = 59.0
|
||||
offset_bottom = 7.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
pivot_offset = Vector2(-14, 7)
|
||||
texture = ExtResource("1_77wok")
|
||||
expand_mode = 1
|
||||
44
scripts/globals/cursor.gd
Normal file
44
scripts/globals/cursor.gd
Normal file
@ -0,0 +1,44 @@
|
||||
extends CanvasLayer
|
||||
|
||||
@export var side_change_speed: float = 15
|
||||
|
||||
var _side: float
|
||||
|
||||
@onready var _base: Control = $CursorBase
|
||||
# @onready var _circle: Control = $CursorBase/CursorCircle
|
||||
@onready var _bat: Control = $CursorBase/CursorBat
|
||||
|
||||
# func _ready() -> void:
|
||||
# Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if not Referencer.player or not Referencer.main_camera:
|
||||
var mouse_pos := get_viewport().get_mouse_position()
|
||||
_base.position = mouse_pos - _base.size / 2
|
||||
_bat.visible = false
|
||||
return
|
||||
_bat.visible = true
|
||||
|
||||
var player_pos_world := Referencer.player.attack.global_position
|
||||
var player_pos_screen := Referencer.main_camera.unproject_position(player_pos_world)
|
||||
var cursor_pos_world := player_pos_world + Referencer.player.aiming.aim_offset
|
||||
var cursor_pos_screen := Referencer.main_camera.unproject_position(cursor_pos_world)
|
||||
_base.position = cursor_pos_screen - _base.size / 2
|
||||
|
||||
_side = lerpf(
|
||||
_side,
|
||||
(
|
||||
(PI / 2.0)
|
||||
* (
|
||||
1.0
|
||||
if Referencer.player.attack.side == PlayerAttack.Side.RIGHT
|
||||
else -1.0
|
||||
)
|
||||
),
|
||||
side_change_speed * delta
|
||||
)
|
||||
var angle := (
|
||||
player_pos_screen.angle_to_point(_base.position + _base.size / 2) + _side
|
||||
)
|
||||
_bat.rotation = angle
|
||||
@ -46,12 +46,10 @@ func _input(event: InputEvent) -> void:
|
||||
if mode == Mode.KB_MOUSE and event_mode == Mode.CONTROLLER:
|
||||
mode = Mode.CONTROLLER
|
||||
mode_changed.emit(mode)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
|
||||
|
||||
if mode == Mode.CONTROLLER and event_mode == Mode.KB_MOUSE:
|
||||
mode = Mode.KB_MOUSE
|
||||
mode_changed.emit(mode)
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
if Debugger.show_debug() and event.is_pressed():
|
||||
Debugger.text("input", _get_event_prompt_current_mode(event))
|
||||
|
||||
@ -4,7 +4,8 @@ extends Camera3D
|
||||
@export var _height_offset: float = 0.5
|
||||
@export var _distance: float = 50
|
||||
@export var _angle_degrees: Vector3 = Vector3(-35, -45, 0)
|
||||
@export var _aim_offset_factor: float = 0.2
|
||||
@export var _aim_offset_factor_mouse: float = 0.2
|
||||
@export var _aim_offset_factor_controller: float = 0.5
|
||||
@export var _aim_damping: float = 1
|
||||
|
||||
var _floor_height: float = 0
|
||||
@ -35,7 +36,17 @@ func _follow(delta: float) -> void:
|
||||
)
|
||||
_aim_offset = _aim_offset.lerp(new_aim_offset, _aim_damping * delta)
|
||||
|
||||
var follow_position := player_position + _aim_offset * _aim_offset_factor
|
||||
var follow_position := (
|
||||
player_position
|
||||
+ (
|
||||
_aim_offset
|
||||
* (
|
||||
_aim_offset_factor_mouse
|
||||
if Inputer.mode == Inputer.Mode.KB_MOUSE
|
||||
else _aim_offset_factor_controller
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
global_rotation_degrees = _angle_degrees
|
||||
global_position = (
|
||||
|
||||
@ -39,7 +39,6 @@ func _physics_process(delta: float) -> void:
|
||||
|
||||
|
||||
func _aiming() -> void:
|
||||
|
||||
aiming.controller_aiming(movement.move_input)
|
||||
var mouse_pos := get_viewport().get_mouse_position()
|
||||
aiming.mouse_aiming(mouse_pos, global_position, is_on_floor())
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
class_name PlayerAiming
|
||||
extends RefCounted
|
||||
|
||||
@export var _controller_aim_offset: float = 15
|
||||
@export var _controller_aim_offset: float = 6
|
||||
@export var _vertical_aim_aspect: float = 1.5
|
||||
|
||||
var aim_offset: Vector3
|
||||
|
||||
Loading…
Reference in New Issue
Block a user