add player with basic movement
This commit is contained in:
parent
acbad4aadf
commit
6f399db783
@ -41,8 +41,9 @@ stream_6/stream = ExtResource("15_w7o33")
|
||||
|
||||
[sub_resource type="AudioStreamPolyphonic" id="AudioStreamPolyphonic_6rsff"]
|
||||
|
||||
[node name="GameKey" type="Node3D" node_paths=PackedStringArray("_skeleton_primary", "_skeleton_secondary", "_nub_mesh", "_upper_left_label", "_upper_right_label", "_lower_left_label", "_lower_right_label", "_center_label", "_press_light", "_adjacency_light", "_sfx_player")]
|
||||
[node name="GameKey" type="Node3D" node_paths=PackedStringArray("player_pos_marker", "_skeleton_primary", "_skeleton_secondary", "_nub_mesh", "_upper_left_label", "_upper_right_label", "_lower_left_label", "_lower_right_label", "_center_label", "_press_light", "_adjacency_light", "_sfx_player")]
|
||||
script = ExtResource("1_sypr4")
|
||||
player_pos_marker = NodePath("PlayerPosMarker")
|
||||
_skeleton_primary = NodePath("ModelPrimary/KeyArmature/Skeleton3D")
|
||||
_skeleton_secondary = NodePath("ModelSecondary/KeyArmature/Skeleton3D")
|
||||
_nub_mesh = NodePath("ModelPrimary/NubMesh")
|
||||
@ -158,6 +159,9 @@ text = "A"
|
||||
font_size = 48
|
||||
outline_size = 0
|
||||
|
||||
[node name="PlayerPosMarker" type="Marker3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, 0)
|
||||
|
||||
[node name="PressLight" type="OmniLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.6, 0)
|
||||
visible = false
|
||||
|
||||
16
scenes/player.tscn
Normal file
16
scenes/player.tscn
Normal file
@ -0,0 +1,16 @@
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b8gu0udt0ow8t"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dmfdlb4ae57qv" path="res://scripts/player.gd" id="1_3vyb7"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_u8vuu"]
|
||||
|
||||
[node name="Player" type="Node3D"]
|
||||
script = ExtResource("1_3vyb7")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
mesh = SubResource("BoxMesh_u8vuu")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.310767, 0, 0, 0, 0.310767, 0, 0, 0, 0.310767, 0, 0.5, 0.63)
|
||||
mesh = SubResource("BoxMesh_u8vuu")
|
||||
@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://djmj08xtpgpgk"]
|
||||
[gd_scene load_steps=7 format=3 uid="uid://djmj08xtpgpgk"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dl5jgx2ucmvk7" path="res://scenes/game_keyboard.tscn" id="1_da6vm"]
|
||||
[ext_resource type="PackedScene" uid="uid://b8gu0udt0ow8t" path="res://scenes/player.tscn" id="2_51e2l"]
|
||||
[ext_resource type="PackedScene" uid="uid://df16rl6w7vvw" path="res://scenes/debug_key_display.tscn" id="2_st4qh"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_errlg"]
|
||||
@ -42,5 +43,8 @@ environment = SubResource("Environment_ij1v8")
|
||||
|
||||
[node name="GameKeyboard" parent="." instance=ExtResource("1_da6vm")]
|
||||
|
||||
[node name="Player" parent="." node_paths=PackedStringArray("_keyboard") instance=ExtResource("2_51e2l")]
|
||||
_keyboard = NodePath("../GameKeyboard")
|
||||
|
||||
[node name="DebugKeyDisplay" parent="." node_paths=PackedStringArray("_keyboard") instance=ExtResource("2_st4qh")]
|
||||
_keyboard = NodePath("../GameKeyboard")
|
||||
|
||||
@ -2,6 +2,8 @@ class_name GameKey extends Node3D
|
||||
|
||||
#region variables
|
||||
@export_group("References")
|
||||
@export var player_pos_marker: Node3D
|
||||
|
||||
@export var _skeleton_primary: Skeleton3D
|
||||
@export var _skeleton_secondary: Skeleton3D
|
||||
@export var _nub_mesh: MeshInstance3D
|
||||
@ -38,6 +40,7 @@ class_name GameKey extends Node3D
|
||||
@export var _release_sfx: AudioStream
|
||||
|
||||
var props: KeyProps
|
||||
var player_transform: Transform3D
|
||||
|
||||
var _keyboard: GameKeyboard
|
||||
var _is_pressed: bool
|
||||
@ -93,7 +96,7 @@ func _ready() -> void:
|
||||
_keyboard.layout_size_changed.connect(_on_keyboard_layout_size_changed)
|
||||
_keyboard.keys_requested.connect(_on_keyboard_keys_requested)
|
||||
_keyboard.is_configuring_changed.connect(_on_keyboard_is_configuring_changed)
|
||||
_keyboard.key_press_changed.connect(_on_keyboard_key_press_changed)
|
||||
_keyboard.player_key_changed.connect(_on_keyboard_player_key_changed)
|
||||
_set_labels()
|
||||
_adjacency_light.visible = false
|
||||
|
||||
@ -409,8 +412,7 @@ func _on_keyboard_is_configuring_changed(value: bool) -> void:
|
||||
_shake(0.2)
|
||||
|
||||
|
||||
func _on_keyboard_key_press_changed(game_key: GameKey, event: InputEventKey) -> void:
|
||||
if event.is_pressed():
|
||||
_adjacency_light.visible = KeyAdjacency.is_adjacent(game_key, self)
|
||||
func _on_keyboard_player_key_changed(game_key: GameKey) -> void:
|
||||
_adjacency_light.visible = KeyAdjacency.is_adjacent(game_key, self)
|
||||
|
||||
#endregion
|
||||
|
||||
@ -6,6 +6,7 @@ signal layout_size_changed(rect: Rect2)
|
||||
signal prompt_page_turned(page: int)
|
||||
signal keys_requested(filter_func: Callable)
|
||||
signal is_configuring_changed(value: bool)
|
||||
signal player_key_changed(game_key: GameKey)
|
||||
|
||||
@export_group("References")
|
||||
@export var _keys_holder: Node3D
|
||||
@ -43,7 +44,7 @@ var _requested_keys_limit: int = 0
|
||||
@onready var _pressing_lean_rad := Vector2(
|
||||
deg_to_rad(_pressing_lean_deg.x), deg_to_rad(_pressing_lean_deg.y)
|
||||
)
|
||||
@onready var _default_rotation: Vector3 = rotation
|
||||
@onready var _default_rotation: Vector3 = _keys_holder.rotation
|
||||
@onready
|
||||
var _polyphonic := _sfx_player.get_stream_playback() as AudioStreamPlaybackPolyphonic
|
||||
|
||||
@ -116,6 +117,21 @@ func _unhandled_input(event: InputEvent) -> void:
|
||||
func emit_key_press(game_key: GameKey, event: InputEventKey) -> void:
|
||||
key_press_changed.emit(game_key, event)
|
||||
|
||||
func emit_player_key_change(game_key: GameKey) -> void:
|
||||
player_key_changed.emit(game_key)
|
||||
|
||||
|
||||
func request_key_by_keycode(keycode: Key) -> GameKey:
|
||||
var found_key: GameKey
|
||||
var result := request_keys(
|
||||
func(game_key: GameKey) -> bool:
|
||||
return game_key.props.physical_keycode == keycode,
|
||||
1
|
||||
)
|
||||
if result:
|
||||
found_key = result[0]
|
||||
return found_key
|
||||
|
||||
|
||||
func request_keys(filter_func: Callable, limit: int = 0) -> Array[GameKey]:
|
||||
_requested_keys = []
|
||||
@ -350,7 +366,7 @@ func _reset_animations() -> void:
|
||||
|
||||
func _animate(delta: float) -> void:
|
||||
anim_time += delta * _time_scale
|
||||
rotation = _rot_sod.process(delta, _animate_rotation())
|
||||
_keys_holder.rotation = _rot_sod.process(delta, _animate_rotation())
|
||||
|
||||
|
||||
func _animate_rotation() -> Vector3:
|
||||
|
||||
51
scripts/player.gd
Normal file
51
scripts/player.gd
Normal file
@ -0,0 +1,51 @@
|
||||
class_name Player extends Node3D
|
||||
|
||||
#region variables
|
||||
@export_group("References")
|
||||
@export var _keyboard: GameKeyboard
|
||||
|
||||
var _current_key: GameKey
|
||||
var _starting_keycode: Key = KEY_H
|
||||
var _rotation: Quaternion
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region builtins
|
||||
func _ready() -> void:
|
||||
_keyboard.key_press_changed.connect(_on_keyboard_key_press_changed)
|
||||
_current_key = _keyboard.request_key_by_keycode(_starting_keycode)
|
||||
if _current_key:
|
||||
global_transform = _current_key.player_pos_marker.global_transform
|
||||
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if _current_key:
|
||||
global_position = _current_key.player_pos_marker.global_position
|
||||
var rotation_translate := (
|
||||
_current_key.get_default_transform().inverse()
|
||||
* _current_key.player_pos_marker.global_transform
|
||||
)
|
||||
global_rotation = (
|
||||
(_rotation * (rotation_translate.basis.get_rotation_quaternion()))
|
||||
. get_euler()
|
||||
)
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region event handlers
|
||||
func _on_keyboard_key_press_changed(game_key: GameKey, event: InputEventKey) -> void:
|
||||
if event.is_pressed() and KeyAdjacency.is_adjacent(_current_key, game_key):
|
||||
var look_from := (
|
||||
_current_key.player_pos_marker.transform * _current_key.transform
|
||||
)
|
||||
var look_target := game_key.player_pos_marker.transform * game_key.transform
|
||||
look_target.origin.y = look_from.origin.y
|
||||
var looking := look_from.looking_at(look_target.origin, Vector3.UP, true)
|
||||
_rotation = (looking.basis.get_rotation_quaternion())
|
||||
_current_key = game_key
|
||||
_keyboard.emit_player_key_change(game_key)
|
||||
|
||||
#endregion
|
||||
1
scripts/player.gd.uid
Normal file
1
scripts/player.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dmfdlb4ae57qv
|
||||
Loading…
Reference in New Issue
Block a user