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"
|
Inputer="*res://scripts/globals/inputer.gd"
|
||||||
Debugger="*res://scenes/debugger.tscn"
|
Debugger="*res://scenes/debugger.tscn"
|
||||||
Settings="*res://scripts/globals/settings.gd"
|
Settings="*res://scripts/globals/settings.gd"
|
||||||
|
Cursor="*res://scenes/ui/cursor.tscn"
|
||||||
|
|
||||||
[debug]
|
[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:
|
if mode == Mode.KB_MOUSE and event_mode == Mode.CONTROLLER:
|
||||||
mode = Mode.CONTROLLER
|
mode = Mode.CONTROLLER
|
||||||
mode_changed.emit(mode)
|
mode_changed.emit(mode)
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_HIDDEN
|
|
||||||
|
|
||||||
if mode == Mode.CONTROLLER and event_mode == Mode.KB_MOUSE:
|
if mode == Mode.CONTROLLER and event_mode == Mode.KB_MOUSE:
|
||||||
mode = Mode.KB_MOUSE
|
mode = Mode.KB_MOUSE
|
||||||
mode_changed.emit(mode)
|
mode_changed.emit(mode)
|
||||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
|
||||||
|
|
||||||
if Debugger.show_debug() and event.is_pressed():
|
if Debugger.show_debug() and event.is_pressed():
|
||||||
Debugger.text("input", _get_event_prompt_current_mode(event))
|
Debugger.text("input", _get_event_prompt_current_mode(event))
|
||||||
|
|||||||
@ -4,7 +4,8 @@ extends Camera3D
|
|||||||
@export var _height_offset: float = 0.5
|
@export var _height_offset: float = 0.5
|
||||||
@export var _distance: float = 50
|
@export var _distance: float = 50
|
||||||
@export var _angle_degrees: Vector3 = Vector3(-35, -45, 0)
|
@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
|
@export var _aim_damping: float = 1
|
||||||
|
|
||||||
var _floor_height: float = 0
|
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)
|
_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_rotation_degrees = _angle_degrees
|
||||||
global_position = (
|
global_position = (
|
||||||
|
|||||||
@ -39,7 +39,6 @@ func _physics_process(delta: float) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _aiming() -> void:
|
func _aiming() -> void:
|
||||||
|
|
||||||
aiming.controller_aiming(movement.move_input)
|
aiming.controller_aiming(movement.move_input)
|
||||||
var mouse_pos := get_viewport().get_mouse_position()
|
var mouse_pos := get_viewport().get_mouse_position()
|
||||||
aiming.mouse_aiming(mouse_pos, global_position, is_on_floor())
|
aiming.mouse_aiming(mouse_pos, global_position, is_on_floor())
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
class_name PlayerAiming
|
class_name PlayerAiming
|
||||||
extends RefCounted
|
extends RefCounted
|
||||||
|
|
||||||
@export var _controller_aim_offset: float = 15
|
@export var _controller_aim_offset: float = 6
|
||||||
@export var _vertical_aim_aspect: float = 1.5
|
@export var _vertical_aim_aspect: float = 1.5
|
||||||
|
|
||||||
var aim_offset: Vector3
|
var aim_offset: Vector3
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user