Trying something that will probably never happen
Signed-off-by: Nikolai Rodionov <allanger@badhouseplants.net>
This commit is contained in:
53
bak/aiming_modifier.gd
Normal file
53
bak/aiming_modifier.gd
Normal file
@ -0,0 +1,53 @@
|
||||
@tool
|
||||
|
||||
class_name AimingModifier
|
||||
extends SkeletonModifier3D
|
||||
|
||||
@export var look_raycast: RayCast3D
|
||||
@export var aim_raycast: RayCast3D
|
||||
|
||||
@export_enum(" ") var bone: String
|
||||
@export var aiming: bool = false
|
||||
|
||||
func _validate_property(property: Dictionary) -> void:
|
||||
if property.name == "bone":
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if skeleton:
|
||||
property.hint = PROPERTY_HINT_ENUM
|
||||
property.hint_string = skeleton.get_concatenated_bone_names()
|
||||
|
||||
func _process_modification() -> void:
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if !skeleton:
|
||||
return
|
||||
var bone_idx: int = skeleton.find_bone(bone)
|
||||
if bone_idx == -1:
|
||||
return
|
||||
|
||||
var target_position = look_raycast.get_collision_point() if look_raycast.is_colliding() else look_raycast.global_transform.origin + - look_raycast.global_transform.basis.z * 30
|
||||
var target_position_local = to_local(target_position)
|
||||
#aim_raycast.= target_position
|
||||
|
||||
var bone_pose = skeleton.get_bone_global_pose(bone_idx)
|
||||
#print(new_basis)
|
||||
|
||||
#skeleton.set_bone_global_pose(bone_idx, Transform3D(bone_pose.basis, bone_pose.origin + Vector3(0, 0, 1)))
|
||||
var gun_position = aim_raycast.global_transform.origin
|
||||
var gun_direction = (target_position - gun_position).normalized()
|
||||
if aiming:
|
||||
var new_pose = bone_pose.looking_at(target_position_local, Vector3.FORWARD, true)
|
||||
var new_basis: Basis
|
||||
new_basis.y = new_pose.basis.z
|
||||
#new_basis.y.y = -new_basis.y.y
|
||||
new_basis.z = new_pose.basis.x
|
||||
new_basis.x = new_pose.basis.y
|
||||
new_pose.basis = new_basis
|
||||
|
||||
skeleton.set_bone_global_pose(bone_idx, new_pose)
|
||||
|
||||
|
||||
func z_and_y_inverse(v : Vector3) -> Vector3 :
|
||||
var tmp: float = v.x
|
||||
v.x = v.y
|
||||
v.y = tmp
|
||||
return v
|
1
bak/aiming_modifier.gd.uid
Normal file
1
bak/aiming_modifier.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://btsjychrq887j
|
45
bak/body_follows_head_modifier.gd
Normal file
45
bak/body_follows_head_modifier.gd
Normal file
@ -0,0 +1,45 @@
|
||||
@tool
|
||||
|
||||
class_name BodyFollowsHead
|
||||
extends SkeletonModifier3D
|
||||
|
||||
@export_enum(" ") var head: String
|
||||
@export_enum(" ") var hips: String
|
||||
|
||||
func _validate_property(property: Dictionary) -> void:
|
||||
if property.name == "head":
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if skeleton:
|
||||
property.hint = PROPERTY_HINT_ENUM
|
||||
property.hint_string = skeleton.get_concatenated_bone_names()
|
||||
if property.name == "hips":
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if skeleton:
|
||||
property.hint = PROPERTY_HINT_ENUM
|
||||
property.hint_string = skeleton.get_concatenated_bone_names()
|
||||
|
||||
func _process_modification() -> void:
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if !skeleton:
|
||||
return
|
||||
var head_idx: int = skeleton.find_bone(head)
|
||||
var head_pose: Transform3D = skeleton.get_bone_global_pose(head_idx)
|
||||
var hips_idx: int = skeleton.find_bone(hips)
|
||||
var hips_pose: Transform3D = skeleton.get_bone_global_pose(hips_idx)
|
||||
|
||||
var new_basis: Basis
|
||||
new_basis.y = Vector3.UP
|
||||
|
||||
#
|
||||
#var hips_basis: Basis = hips_pose.basis
|
||||
#var head_basis: Basis = head_pose.basis
|
||||
#var head_yaw = head_basis.get_euler().y # Y-axis rotation in radians
|
||||
#var hips_euler = hips_basis.get_euler()
|
||||
#var hips_yaw = hips_euler.x
|
||||
#var new_yaw = lerp_angle(hips_yaw, head_yaw, 100)
|
||||
#hips_euler.x = new_yaw
|
||||
#hips_basis = Basis.from_euler(hips_euler)
|
||||
|
||||
# Apply the new transform back to the skeleton
|
||||
hips_pose.basis = hips_basis
|
||||
skeleton.set_bone_global_pose(hips_idx, hips_pose)
|
1
bak/body_follows_head_modifier.gd.uid
Normal file
1
bak/body_follows_head_modifier.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cw8151er1e54y
|
42
bak/look_forward_modifier.gd
Normal file
42
bak/look_forward_modifier.gd
Normal file
@ -0,0 +1,42 @@
|
||||
@tool
|
||||
|
||||
class_name LookForwardModifier
|
||||
extends SkeletonModifier3D
|
||||
|
||||
@export var target_object: Marker3D
|
||||
@export var head_marker: Marker3D
|
||||
@export_enum(" ") var bone: String
|
||||
|
||||
func _validate_property(property: Dictionary) -> void:
|
||||
if property.name == "bone":
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if skeleton:
|
||||
property.hint = PROPERTY_HINT_ENUM
|
||||
property.hint_string = skeleton.get_concatenated_bone_names()
|
||||
|
||||
func _process_modification() -> void:
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if !skeleton:
|
||||
return
|
||||
var bone_idx: int = skeleton.find_bone(bone)
|
||||
if bone_idx == -1:
|
||||
return
|
||||
|
||||
var target_position_global: Vector3 = target_object.global_position
|
||||
var target_position_local: Vector3 = to_local(target_position_global)
|
||||
var head_bone_pose: Transform3D = skeleton.get_bone_global_pose(bone_idx)
|
||||
var new_pose: Transform3D = head_bone_pose.looking_at(target_position_local, Vector3.FORWARD, true)
|
||||
|
||||
var new_basis: Basis
|
||||
new_basis.y = new_pose.basis.y
|
||||
new_basis.z = new_pose.basis.z
|
||||
new_basis.x = new_pose.basis.x
|
||||
new_pose.basis = new_basis
|
||||
|
||||
skeleton.set_bone_global_pose(bone_idx, new_pose)
|
||||
|
||||
func z_and_y_inverse(v : Vector3) -> Vector3 :
|
||||
var tmp: float = v.z
|
||||
v.z = v.y
|
||||
v.y = tmp
|
||||
return v
|
1
bak/look_forward_modifier.gd.uid
Normal file
1
bak/look_forward_modifier.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://y6hg3gyagmjh
|
4
bak/player.gd
Normal file
4
bak/player.gd
Normal file
@ -0,0 +1,4 @@
|
||||
extends Node3D
|
||||
|
||||
func _ready() -> void:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
1
bak/player.gd.uid
Normal file
1
bak/player.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://db5kuorgtnsmg
|
32
bak/player.tscn
Normal file
32
bak/player.tscn
Normal file
@ -0,0 +1,32 @@
|
||||
[gd_scene load_steps=4 format=3 uid="uid://b2ogo643mvror"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://db5kuorgtnsmg" path="res://src/scenes/player/player.gd" id="1_ytbry"]
|
||||
[ext_resource type="Script" uid="uid://fhu1ep8ym4ch" path="res://src/scenes/player/player_movement.gd" id="2_300um"]
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_4kq8i"]
|
||||
radius = 0.4
|
||||
|
||||
[node name="PlayerController" type="Node3D"]
|
||||
script = ExtResource("1_ytbry")
|
||||
|
||||
[node name="MovementController" type="CharacterBody3D" parent="."]
|
||||
transform = Transform3D(0.999941, 0, 0.0108906, 0, 1, 0, -0.0108906, 0, 0.999941, 0, 0, 0)
|
||||
script = ExtResource("2_300um")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MovementController"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.988022, 0)
|
||||
shape = SubResource("CapsuleShape3D_4kq8i")
|
||||
|
||||
[node name="H-Rotation" type="Node3D" parent="MovementController"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.45618, 0)
|
||||
|
||||
[node name="CameraMount" type="Node3D" parent="MovementController/H-Rotation"]
|
||||
transform = Transform3D(1.00035, 0, 0, 0, 1.00004, 0, -9.31323e-10, 0, 0.999999, 0, 0, 0)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="MovementController/H-Rotation/CameraMount"]
|
||||
current = true
|
||||
near = 0.01
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="MovementController/H-Rotation/CameraMount/Camera3D"]
|
||||
transform = Transform3D(0.999912, -1.77636e-15, -4.54747e-13, -1.77636e-15, 0.99991, -2.32831e-10, 0, 0, 0.999932, 0, 0, 0)
|
||||
target_position = Vector3(0, 0, -30)
|
37
bak/player_movement.gd
Normal file
37
bak/player_movement.gd
Normal file
@ -0,0 +1,37 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
const SPEED = 8.0
|
||||
const JUMP_VELOCITY = 7
|
||||
var camera_sens: float = 0.005
|
||||
@onready var h_rotation: Node3D = $"H-Rotation"
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||
var look_dir = event.relative * 1
|
||||
rotation.y -= look_dir.x * camera_sens * 1.0
|
||||
h_rotation.rotation.x = clamp(
|
||||
h_rotation.rotation.x - look_dir.y * camera_sens * 1.0, -1.5, 1.5
|
||||
)
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
# Add the gravity.
|
||||
if not is_on_floor():
|
||||
velocity += get_gravity() * delta
|
||||
else:
|
||||
# Handle jump.
|
||||
if Input.is_action_just_pressed("jump") and is_on_floor():
|
||||
velocity.y = JUMP_VELOCITY
|
||||
|
||||
# Get the input direction and handle the movement/deceleration.
|
||||
# As good practice, you should replace UI actions with custom gameplay actions.
|
||||
var input_dir := Input.get_vector("move_left", "move_right", "move_forward", "move_backward")
|
||||
var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
||||
if direction:
|
||||
velocity.x = direction.x * SPEED
|
||||
velocity.z = direction.z * SPEED
|
||||
else:
|
||||
velocity.x = move_toward(velocity.x, 0, SPEED)
|
||||
velocity.z = move_toward(velocity.z, 0, SPEED)
|
||||
|
||||
move_and_slide()
|
1
bak/player_movement.gd.uid
Normal file
1
bak/player_movement.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://fhu1ep8ym4ch
|
53
bak/shooting_modifier.gd
Normal file
53
bak/shooting_modifier.gd
Normal file
@ -0,0 +1,53 @@
|
||||
@tool
|
||||
|
||||
class_name ShootingModifier
|
||||
extends SkeletonModifier3D
|
||||
|
||||
@export var look_raycast: RayCast3D
|
||||
@export var aim_raycast: RayCast3D
|
||||
|
||||
@export_enum(" ") var bone: String
|
||||
@export var shooting: bool = false
|
||||
|
||||
func _validate_property(property: Dictionary) -> void:
|
||||
if property.name == "bone":
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if skeleton:
|
||||
property.hint = PROPERTY_HINT_ENUM
|
||||
property.hint_string = skeleton.get_concatenated_bone_names()
|
||||
|
||||
func _process_modification() -> void:
|
||||
var skeleton: Skeleton3D = get_skeleton()
|
||||
if !skeleton:
|
||||
return
|
||||
var bone_idx: int = skeleton.find_bone(bone)
|
||||
if bone_idx == -1:
|
||||
return
|
||||
|
||||
var target_position = look_raycast.get_collision_point() if look_raycast.is_colliding() else look_raycast.global_transform.origin + - look_raycast.global_transform.basis.z * 30
|
||||
var target_position_local = to_local(target_position)
|
||||
#aim_raycast.= target_position
|
||||
|
||||
var bone_pose = skeleton.get_bone_global_pose(bone_idx)
|
||||
#print(new_basis)
|
||||
|
||||
#skeleton.set_bone_global_pose(bone_idx, Transform3D(bone_pose.basis, bone_pose.origin + Vector3(0, 0, 1)))
|
||||
var gun_position = aim_raycast.global_transform.origin
|
||||
var gun_direction = (target_position - gun_position).normalized()
|
||||
if shooting:
|
||||
var new_pose = bone_pose.looking_at(target_position_local, Vector3.FORWARD, true)
|
||||
var new_basis: Basis
|
||||
new_basis.y = new_pose.basis.z
|
||||
#new_basis.y.y = -new_basis.y.y
|
||||
new_basis.z = new_pose.basis.x
|
||||
new_basis.x = new_pose.basis.y
|
||||
new_pose.basis = new_basis
|
||||
|
||||
skeleton.set_bone_global_pose(bone_idx, new_pose)
|
||||
|
||||
|
||||
func z_and_y_inverse(v : Vector3) -> Vector3 :
|
||||
var tmp: float = v.x
|
||||
v.x = v.y
|
||||
v.y = tmp
|
||||
return v
|
1
bak/shooting_modifier.gd.uid
Normal file
1
bak/shooting_modifier.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bbnh6vbh5cvtq
|
15
bak/visuals_controller.gd
Normal file
15
bak/visuals_controller.gd
Normal file
@ -0,0 +1,15 @@
|
||||
extends Node3D
|
||||
|
||||
@export var movement_controller: CharacterBody3D
|
||||
@onready var skeleton: Skeleton3D = $Model/Armature/Skeleton3D
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _physics_process(delta: float) -> void:
|
||||
global_position = movement_controller.global_position
|
||||
# -- Get the head rotation on x
|
||||
# -- Rotate the body on x
|
||||
var bone_idx: int = skeleton.find_bone("mixamorig_Head")
|
||||
if bone_idx == -1:
|
||||
return
|
||||
#global_rotation.y = head_pose.y
|
||||
pass
|
1
bak/visuals_controller.gd.uid
Normal file
1
bak/visuals_controller.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://tf0b0xiedgvx
|
Reference in New Issue
Block a user