weapon select tweaks added joy support
This commit is contained in:
BIN
assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png
Normal file
BIN
assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.2 KiB |
34
assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png.import
Normal file
34
assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png.import
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://r81nhtx6mf5t"
|
||||||
|
path="res://.godot/imported/Cursor 1@0.5x.png-270a2d0b10532a3d12e94be67559efa3.ctex"
|
||||||
|
metadata={
|
||||||
|
"vram_texture": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png"
|
||||||
|
dest_files=["res://.godot/imported/Cursor 1@0.5x.png-270a2d0b10532a3d12e94be67559efa3.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=0
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=false
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=1
|
||||||
6365
assets/UI/Edit Files/mouse.ai
Normal file
6365
assets/UI/Edit Files/mouse.ai
Normal file
File diff suppressed because it is too large
Load Diff
@@ -129,7 +129,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0341401, -0.111267)
|
|||||||
transform = Transform3D(1, -2.5409e-11, -1.16415e-10, 3.69482e-12, 1, 0, 1.16415e-10, 2.32831e-10, 1, 0.269894, -0.199195, -0.580209)
|
transform = Transform3D(1, -2.5409e-11, -1.16415e-10, 3.69482e-12, 1, 0, 1.16415e-10, 2.32831e-10, 1, 0.269894, -0.199195, -0.580209)
|
||||||
|
|
||||||
[node name="Flashlight" type="SpotLight3D" parent="Head/Recoil/Camera3D/WeaponHolder"]
|
[node name="Flashlight" type="SpotLight3D" parent="Head/Recoil/Camera3D/WeaponHolder"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.183578, -0.664453)
|
transform = Transform3D(1, -1.08571e-11, -5.82077e-11, 3.75167e-12, 1, 0, 5.82077e-11, 1.16415e-10, 1, -0.000444638, -0.184371, 0.0974539)
|
||||||
light_color = Color(1, 1, 0.898039, 1)
|
light_color = Color(1, 1, 0.898039, 1)
|
||||||
light_energy = 0.0
|
light_energy = 0.0
|
||||||
light_projector = ExtResource("4_x670l")
|
light_projector = ExtResource("4_x670l")
|
||||||
|
|||||||
44
demo/components/Player.tscn
Normal file
44
demo/components/Player.tscn
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
[gd_scene load_steps=7 format=3 uid="uid://domhm87hbhbg1"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://demo/src/Player.gd" id="1_nm1yx"]
|
||||||
|
[ext_resource type="Script" path="res://demo/src/CameraManager.gd" id="2_loos7"]
|
||||||
|
|
||||||
|
[sub_resource type="SphereShape3D" id="SphereShape3D_smq6u"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_lwhhq"]
|
||||||
|
height = 1.5
|
||||||
|
|
||||||
|
[sub_resource type="SeparationRayShape3D" id="SeparationRayShape3D_twc2s"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleMesh" id="CapsuleMesh_lsqiy"]
|
||||||
|
|
||||||
|
[node name="Player" type="CharacterBody3D"]
|
||||||
|
collision_layer = 2
|
||||||
|
script = ExtResource("1_nm1yx")
|
||||||
|
|
||||||
|
[node name="CameraManager" type="Node3D" parent="."]
|
||||||
|
script = ExtResource("2_loos7")
|
||||||
|
|
||||||
|
[node name="Arm" type="SpringArm3D" parent="CameraManager"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 0.906308, 0.422618, 0, -0.422618, 0.906308, 0, 2.32515, -0.0321627)
|
||||||
|
shape = SubResource("SphereShape3D_smq6u")
|
||||||
|
spring_length = 6.0
|
||||||
|
margin = 0.5
|
||||||
|
|
||||||
|
[node name="Camera3D" type="Camera3D" parent="CameraManager/Arm"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
near = 0.25
|
||||||
|
far = 16384.0
|
||||||
|
|
||||||
|
[node name="CollisionShapeBody" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.25, 0)
|
||||||
|
shape = SubResource("CapsuleShape3D_lwhhq")
|
||||||
|
|
||||||
|
[node name="CollisionShapeRay" type="CollisionShape3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 1, 0)
|
||||||
|
shape = SubResource("SeparationRayShape3D_twc2s")
|
||||||
|
|
||||||
|
[node name="Body" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||||
|
mesh = SubResource("CapsuleMesh_lsqiy")
|
||||||
81
demo/src/Player.gd
Normal file
81
demo/src/Player.gd
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
extends CharacterBody3D
|
||||||
|
|
||||||
|
@export var MOVE_SPEED: float = 50.0
|
||||||
|
@export var JUMP_SPEED: float = 2.0
|
||||||
|
@export var first_person: bool = false :
|
||||||
|
set(p_value):
|
||||||
|
first_person = p_value
|
||||||
|
if first_person:
|
||||||
|
var tween: Tween = create_tween()
|
||||||
|
tween.tween_property($CameraManager/Arm, "spring_length", 0.0, .33)
|
||||||
|
tween.tween_callback($Body.set_visible.bind(false))
|
||||||
|
else:
|
||||||
|
$Body.visible = true
|
||||||
|
create_tween().tween_property($CameraManager/Arm, "spring_length", 6.0, .33)
|
||||||
|
|
||||||
|
@export var gravity_enabled: bool = true :
|
||||||
|
set(p_value):
|
||||||
|
gravity_enabled = p_value
|
||||||
|
if not gravity_enabled:
|
||||||
|
velocity.y = 0
|
||||||
|
|
||||||
|
@export var collision_enabled: bool = true :
|
||||||
|
set(p_value):
|
||||||
|
collision_enabled = p_value
|
||||||
|
$CollisionShapeBody.disabled = ! collision_enabled
|
||||||
|
$CollisionShapeRay.disabled = ! collision_enabled
|
||||||
|
|
||||||
|
|
||||||
|
func _physics_process(p_delta) -> void:
|
||||||
|
var direction: Vector3 = get_camera_relative_input()
|
||||||
|
var h_veloc: Vector2 = Vector2(direction.x, direction.z) * MOVE_SPEED
|
||||||
|
if Input.is_key_pressed(KEY_SHIFT):
|
||||||
|
h_veloc *= 2
|
||||||
|
velocity.x = h_veloc.x
|
||||||
|
velocity.z = h_veloc.y
|
||||||
|
if gravity_enabled:
|
||||||
|
velocity.y -= 40 * p_delta
|
||||||
|
move_and_slide()
|
||||||
|
|
||||||
|
|
||||||
|
# Returns the input vector relative to the camera. Forward is always the direction the camera is facing
|
||||||
|
func get_camera_relative_input() -> Vector3:
|
||||||
|
var input_dir: Vector3 = Vector3.ZERO
|
||||||
|
if Input.is_key_pressed(KEY_A): # Left
|
||||||
|
input_dir -= %Camera3D.global_transform.basis.x
|
||||||
|
if Input.is_key_pressed(KEY_D): # Right
|
||||||
|
input_dir += %Camera3D.global_transform.basis.x
|
||||||
|
if Input.is_key_pressed(KEY_W): # Forward
|
||||||
|
input_dir -= %Camera3D.global_transform.basis.z
|
||||||
|
if Input.is_key_pressed(KEY_S): # Backward
|
||||||
|
input_dir += %Camera3D.global_transform.basis.z
|
||||||
|
if Input.is_key_pressed(KEY_E) or Input.is_key_pressed(KEY_SPACE): # Up
|
||||||
|
velocity.y += JUMP_SPEED + MOVE_SPEED*.016
|
||||||
|
if Input.is_key_pressed(KEY_Q): # Down
|
||||||
|
velocity.y -= JUMP_SPEED + MOVE_SPEED*.016
|
||||||
|
if Input.is_key_pressed(KEY_KP_ADD) or Input.is_key_pressed(KEY_EQUAL):
|
||||||
|
MOVE_SPEED = clamp(MOVE_SPEED + .5, 5, 9999)
|
||||||
|
if Input.is_key_pressed(KEY_KP_SUBTRACT) or Input.is_key_pressed(KEY_MINUS):
|
||||||
|
MOVE_SPEED = clamp(MOVE_SPEED - .5, 5, 9999)
|
||||||
|
return input_dir
|
||||||
|
|
||||||
|
|
||||||
|
func _input(p_event: InputEvent) -> void:
|
||||||
|
if p_event is InputEventMouseButton and p_event.pressed:
|
||||||
|
if p_event.button_index == MOUSE_BUTTON_WHEEL_UP:
|
||||||
|
MOVE_SPEED = clamp(MOVE_SPEED + 5, 5, 9999)
|
||||||
|
elif p_event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
|
||||||
|
MOVE_SPEED = clamp(MOVE_SPEED - 5, 5, 9999)
|
||||||
|
|
||||||
|
elif p_event is InputEventKey:
|
||||||
|
if p_event.pressed:
|
||||||
|
if p_event.keycode == KEY_V:
|
||||||
|
first_person = ! first_person
|
||||||
|
elif p_event.keycode == KEY_G:
|
||||||
|
gravity_enabled = ! gravity_enabled
|
||||||
|
elif p_event.keycode == KEY_C:
|
||||||
|
collision_enabled = ! collision_enabled
|
||||||
|
|
||||||
|
# Else if up/down released
|
||||||
|
elif p_event.keycode in [ KEY_Q, KEY_E, KEY_SPACE ]:
|
||||||
|
velocity.y = 0
|
||||||
@@ -11,7 +11,7 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="First Person Test"
|
config/name="First Person Test"
|
||||||
run/main_scene="res://scenes/asset_checker.tscn"
|
run/main_scene="res://assets/blockout_2.tscn"
|
||||||
config/features=PackedStringArray("4.3", "Forward Plus")
|
config/features=PackedStringArray("4.3", "Forward Plus")
|
||||||
config/icon="res://icon.svg"
|
config/icon="res://icon.svg"
|
||||||
|
|
||||||
@@ -27,6 +27,7 @@ HelperFuncs="*res://scripts/HelperFuncs.gd"
|
|||||||
[display]
|
[display]
|
||||||
|
|
||||||
window/size/mode=3
|
window/size/mode=3
|
||||||
|
mouse_cursor/custom_image="res://assets/UI/Edit Files/0.5x/Cursor 1@0.5x.png"
|
||||||
|
|
||||||
[editor]
|
[editor]
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ const ADS_POS = Vector3(0,-.05,-.45)
|
|||||||
#JOYSTICK SETTINGS
|
#JOYSTICK SETTINGS
|
||||||
const JOYSTICK_SENSITIVITY = .06
|
const JOYSTICK_SENSITIVITY = .06
|
||||||
var adj_sensitivity = JOYSTICK_SENSITIVITY
|
var adj_sensitivity = JOYSTICK_SENSITIVITY
|
||||||
const R_JOYSTICK_DEADZONE = 0.05
|
const R_JOYSTICK_DEADZONE = 0.1
|
||||||
const L_JOYSTICK_DEADZONE = .2
|
const L_JOYSTICK_DEADZONE = .2
|
||||||
const L_JOYSTICK_SENSITIVITY = .1
|
const L_JOYSTICK_SENSITIVITY = .1
|
||||||
|
|
||||||
@@ -392,7 +392,6 @@ func _physics_process(delta):
|
|||||||
|
|
||||||
if Input.is_action_just_pressed("weapon_select"):
|
if Input.is_action_just_pressed("weapon_select"):
|
||||||
weapon_select_menu.open()
|
weapon_select_menu.open()
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_CONFINED_HIDDEN)
|
|
||||||
controlled_elsewhere = true
|
controlled_elsewhere = true
|
||||||
gamespeed_controlled = true
|
gamespeed_controlled = true
|
||||||
Engine.time_scale = .01
|
Engine.time_scale = .01
|
||||||
@@ -401,8 +400,9 @@ func _physics_process(delta):
|
|||||||
if selection != null and selection != level_control.current_gun_index :
|
if selection != null and selection != level_control.current_gun_index :
|
||||||
weapon_select(selection)
|
weapon_select(selection)
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
controlled_elsewhere = false
|
|
||||||
gamespeed_controlled = false
|
gamespeed_controlled = false
|
||||||
|
await get_tree().create_timer(.2).timeout
|
||||||
|
controlled_elsewhere = false
|
||||||
|
|
||||||
#interact button
|
#interact button
|
||||||
if Input.is_action_just_pressed("interact"):
|
if Input.is_action_just_pressed("interact"):
|
||||||
@@ -459,16 +459,17 @@ func joypad_walk():
|
|||||||
return dir_out
|
return dir_out
|
||||||
|
|
||||||
func joypad_look(delta):
|
func joypad_look(delta):
|
||||||
# Joypad right stick look control
|
if !controlled_elsewhere:
|
||||||
var xAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_X)
|
# Joypad right stick look control
|
||||||
var yAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_Y)
|
var xAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_X)
|
||||||
var aim_assist
|
var yAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_Y)
|
||||||
|
var aim_assist
|
||||||
|
|
||||||
if abs(xAxis) > R_JOYSTICK_DEADZONE:
|
if abs(xAxis) > R_JOYSTICK_DEADZONE:
|
||||||
self.rotate_y(-xAxis * JOYSTICK_SENSITIVITY * 1)
|
self.rotate_y(-xAxis * JOYSTICK_SENSITIVITY * 1)
|
||||||
if abs(yAxis) > R_JOYSTICK_DEADZONE:
|
if abs(yAxis) > R_JOYSTICK_DEADZONE:
|
||||||
head.rotate_x(-yAxis * JOYSTICK_SENSITIVITY * 1)
|
head.rotate_x(-yAxis * JOYSTICK_SENSITIVITY * 1)
|
||||||
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85))
|
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-90), deg_to_rad(85))
|
||||||
|
|
||||||
func flashlight_toggle():
|
func flashlight_toggle():
|
||||||
if flashlight_on:
|
if flashlight_on:
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ extends Control
|
|||||||
|
|
||||||
@export var line_width : int = 4
|
@export var line_width : int = 4
|
||||||
|
|
||||||
|
@onready var player: CharacterBody3D = $"../../../.."
|
||||||
@onready var level_control = get_tree().current_scene
|
@onready var level_control = get_tree().current_scene
|
||||||
|
|
||||||
|
var selecting
|
||||||
var options = []
|
var options = []
|
||||||
|
|
||||||
const outer_radius : int = 500
|
const outer_radius : int = 500
|
||||||
@@ -17,10 +20,13 @@ const IMAGE_SIZE = Vector2(512,512)
|
|||||||
var selection
|
var selection
|
||||||
|
|
||||||
func open():
|
func open():
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
|
||||||
|
selecting = true
|
||||||
show()
|
show()
|
||||||
update_weapon_list()
|
update_weapon_list()
|
||||||
|
|
||||||
func close():
|
func close():
|
||||||
|
selecting = false
|
||||||
hide()
|
hide()
|
||||||
return selection
|
return selection
|
||||||
|
|
||||||
@@ -29,20 +35,33 @@ func _ready() -> void:
|
|||||||
update_weapon_list()
|
update_weapon_list()
|
||||||
SignalBus.weapon_list_changed.connect(update_weapon_list)
|
SignalBus.weapon_list_changed.connect(update_weapon_list)
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if selecting:
|
||||||
|
const MOUSE_DEADZONE = .01
|
||||||
|
if event is InputEventMouseMotion:
|
||||||
|
if abs(event.relative.x) > MOUSE_DEADZONE or abs(event.relative.x) > MOUSE_DEADZONE:
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
|
if selecting:
|
||||||
var mouse_pos = get_local_mouse_position()
|
var mouse_pos = get_local_mouse_position()
|
||||||
var mouse_radius = mouse_pos.length()
|
var mouse_radius = mouse_pos.length()
|
||||||
|
|
||||||
if mouse_radius < inner_radius:
|
if mouse_radius < inner_radius:
|
||||||
selection = null
|
selection = null
|
||||||
else:
|
else:
|
||||||
var mouse_rads = fposmod(mouse_pos.angle() * -1, TAU)
|
var mouse_rads = fposmod(mouse_pos.angle() * -1, TAU)
|
||||||
selection = ceil((mouse_rads / TAU) * (len(options)+1))
|
selection = ceil((mouse_rads / TAU) * (len(options)))
|
||||||
|
|
||||||
queue_redraw()
|
var joy_input = joypad_select()
|
||||||
|
if abs(joy_input) > Vector2.ZERO:
|
||||||
|
var joy_rads = fposmod(joypad_select().angle() * -1, TAU)
|
||||||
|
selection = ceil((joy_rads / TAU) * (len(options)))
|
||||||
|
|
||||||
|
|
||||||
|
queue_redraw()
|
||||||
|
|
||||||
func _draw():
|
func _draw():
|
||||||
var offset = IMAGE_SIZE/ -2
|
var offset = IMAGE_SIZE/ -2
|
||||||
@@ -102,3 +121,15 @@ func _draw():
|
|||||||
|
|
||||||
func update_weapon_list():
|
func update_weapon_list():
|
||||||
options = level_control.held_guns
|
options = level_control.held_guns
|
||||||
|
|
||||||
|
func joypad_select():
|
||||||
|
var joy_out = Vector2.ZERO
|
||||||
|
# Joypad right stick look control
|
||||||
|
var xAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_X)
|
||||||
|
var yAxis = Input.get_joy_axis(0,JOY_AXIS_RIGHT_Y)
|
||||||
|
|
||||||
|
if abs(xAxis) > player.R_JOYSTICK_DEADZONE:
|
||||||
|
joy_out.x = xAxis
|
||||||
|
if abs(yAxis) > player.R_JOYSTICK_DEADZONE:
|
||||||
|
joy_out.y = yAxis
|
||||||
|
return joy_out
|
||||||
|
|||||||
Reference in New Issue
Block a user