extends CharacterMovementComponent @export var networking_path : NodePath @onready var networking = get_node(networking_path) ##################################### #Controls Settings @export var OnePressJump := false @export var UsingSprintToggle := false @export var UsingCrouchToggle := false ##################################### @export var mouse_sensitvity : float = 0.01 var player_h : float = 0 var player_v : float = 0 var reconciliate_rotate_player_back:bool = false var h_rotation :float #var v_rotation :float var direction := Vector3.FORWARD var auto_up:bool = false var previous_rotation_mode func _physics_process(delta): super._physics_process(delta) # Debug() if !networking.is_local_authority(): if input_is_moving: if gait == Global.gait.sprinting: add_movement_input(direction, current_movement_data.sprint_speed,current_movement_data.sprint_acceleration) elif gait == Global.gait.running: add_movement_input(direction, current_movement_data.run_speed,current_movement_data.run_acceleration) else: add_movement_input(direction, current_movement_data.walk_speed,current_movement_data.walk_acceleration) else: add_movement_input(direction,0,deacceleration) return #------------------ Input Movement ------------------# h_rotation = camera_root.HObject.transform.basis.get_euler().y #v_rotation = camera_root.VObject.transform.basis.get_euler().x follow_camera = true rotation_mode = Global.rotation_mode.velocity_direction if Common.is_menu_visible(): add_movement_input(direction,0,deacceleration) return if Input.is_action_pressed("INPUT_ACTION_CAMERA_MOVE_PLAYER_MOUSE") && Input.is_action_pressed("INPUT_VIEW_CAMERA_MOVE_PLAYER_FOLLOW_MOUSE"): direction = Vector3(0.0, 0.0 if is_flying == true else 0.0, -1.0) direction = direction.rotated(Vector3.UP,h_rotation).normalized() if gait == Global.gait.sprinting : add_movement_input(direction, current_movement_data.sprint_speed,current_movement_data.sprint_acceleration) elif gait == Global.gait.running: add_movement_input(direction, current_movement_data.run_speed,current_movement_data.run_acceleration) else: add_movement_input(direction, current_movement_data.walk_speed,current_movement_data.walk_acceleration) elif Input.is_action_pressed("INPUT_ACTION_ROTATE_LEFT"): rotate_in_place_X(+0.05) elif Input.is_action_pressed("INPUT_ACTION_ROTATE_RIGHT"): rotate_in_place_X(-0.05) elif Input.is_action_pressed("INPUT_ACTION_FORWARD") || Input.is_action_pressed("INPUT_ACTION_BACK") || Input.is_action_pressed("INPUT_ACTION_RIGHT") || Input.is_action_pressed("INPUT_ACTION_LEFT") : direction = Vector3(Input.get_action_strength("INPUT_ACTION_RIGHT") - Input.get_action_strength("INPUT_ACTION_LEFT"), 0.0 if is_flying == true else 0.0, Input.get_action_strength("INPUT_ACTION_BACK") - Input.get_action_strength("INPUT_ACTION_FORWARD")) direction = direction.rotated(Vector3.UP,h_rotation).normalized() if gait == Global.gait.sprinting : add_movement_input(direction, current_movement_data.sprint_speed,current_movement_data.sprint_acceleration) elif gait == Global.gait.running: add_movement_input(direction, current_movement_data.run_speed,current_movement_data.run_acceleration) else: add_movement_input(direction, current_movement_data.walk_speed,current_movement_data.walk_acceleration) elif auto_up: follow_camera = false direction = Vector3(0.0, 0.0 if is_flying == true else 0.0, 1.0) ##direction = get_current_mesh() #direction.rotated(Vector3.UP,h_rotation).normalized() direction = direction.rotated(Vector3.UP,get_current_mesh().y).normalized() ##direction = direction.rotated(get_current_mesh(),h_rotation).normalized() #direction = direction.rotated(Vector3.UP,-get_current_mesh().y).normalized() if gait == Global.gait.sprinting : add_movement_input(direction, current_movement_data.sprint_speed,current_movement_data.sprint_acceleration) elif gait == Global.gait.running: add_movement_input(direction, current_movement_data.run_speed,current_movement_data.run_acceleration) else: add_movement_input(direction, current_movement_data.walk_speed,current_movement_data.walk_acceleration) rotation_mode = Global.rotation_mode.keep_current elif reconciliate_rotate_player_back: reconciliate_rotate_player_back = rotate_in_place() else: add_movement_input(direction,0,deacceleration) #------------------ Input Crouch ------------------# if UsingCrouchToggle == false: if Input.is_action_pressed("INPUT_ACTION_CROUCH"): if stance != Global.stance.crouching: stance = Global.stance.crouching else: if stance != Global.stance.standing: stance = Global.stance.standing else: if Input.is_action_just_pressed("INPUT_ACTION_CROUCH"): stance = Global.stance.standing if stance == Global.stance.crouching else Global.stance.crouching #------------------ Sprint ------------------# if UsingSprintToggle: if Input.is_action_just_pressed("INPUT_ACTION_RUN"): if gait == Global.gait.walking: gait = Global.gait.running elif gait == Global.gait.running: gait = Global.gait.sprinting elif gait == Global.gait.sprinting: gait = Global.gait.walking else: if Input.is_action_just_pressed("INPUT_ACTION_RUN"): if gait == Global.gait.walking: gait = Global.gait.running elif gait == Global.gait.running: gait = Global.gait.sprinting if Input.is_action_just_released("INPUT_ACTION_RUN"): if gait == Global.gait.sprinting or gait == Global.gait.walking: gait = Global.gait.walking elif gait == Global.gait.running: await get_tree().create_timer(0.4).timeout if gait == Global.gait.running: gait = Global.gait.walking #------------------ Input Aim ------------------# if Input.is_action_pressed("INPUT_ACTION_AIM"): if rotation_mode != Global.rotation_mode.aiming: previous_rotation_mode = rotation_mode rotation_mode = Global.rotation_mode.aiming else: if rotation_mode == Global.rotation_mode.aiming: rotation_mode = previous_rotation_mode #------------------ Jump ------------------#= if OnePressJump == true: if Input.is_action_just_pressed("INPUT_ACTION_JUMP"): if stance != Global.stance.standing: stance = Global.stance.standing else: jump() else: if Input.is_action_pressed("INPUT_ACTION_JUMP"): if stance != Global.stance.standing: stance = Global.stance.standing else: jump() #------------------ Look At ------------------# match rotation_mode: Global.rotation_mode.velocity_direction: if input_is_moving: ik_look_at(actual_velocity + Vector3(0.0,1.0,0.0)) Global.rotation_mode.looking_direction: ik_look_at(camera_root.SpringArm.transform.basis.z * 2.0 + Vector3(0.0,1.5,0.0)) Global.rotation_mode.aiming: ik_look_at(camera_root.SpringArm.transform.basis.z * 2.0 + Vector3(0.0,1.5,0.0)) #------------------ Interaction ------------------# if Input.is_action_just_pressed("INPUT_ACTION_INTERACTION"): camera_root.Camera.get_node("InteractionRaycast").Interact() var view_changed_recently = false func _input(event): if Common.is_menu_visible(): return #if event is InputEventMouseMotion: if Input.is_action_pressed("INPUT_VIEW_CAMERA_MOVE_PLAYER_FOLLOW_MOUSE"): reconciliate_rotate_player_back = true # player_h += -event.relative.x * mouse_sensitvity # player_v += -event.relative.y * mouse_sensitvity # Common.msg_debug("player_h:" + str(player_h)) # if reconciliate_rotate_player_back: # Common.msg_debug("h_rotation:" + str(h_rotation)) # pass if Input.is_action_just_pressed("INPUT_ACTION_AUTO_UP"): auto_up = !auto_up Common.msg_debug(auto_up) # if auto_up: # rotation_mode = Global.rotation_mode.velocity_direction # update_character_movement() #------------------ Motion Warping test------------------# if event.is_action_pressed("INPUT_ACTION_FIRE"): anim_ref.active = false get_node("../MotionWarping").add_sync_position(Vector3(4.762,1.574,-1.709),Vector3(0,PI,0),"kick_target",self,mesh_ref) get_node("../AnimationPlayer").play("Kick") await get_tree().create_timer(2.6).timeout anim_ref.active = true #------------------ Change Camera View ------------------# if Input.is_action_just_released("INPUT_VIEW_SWITCH_CAMERA"): if view_changed_recently == false: view_changed_recently = true camera_root.view_angle = camera_root.view_angle + 1 if camera_root.view_angle < 2 else 0 await get_tree().create_timer(0.3).timeout view_changed_recently = false else: view_changed_recently = false if Input.is_action_just_pressed("INPUT_VIEW_SWITCH_CAMERA"): await get_tree().create_timer(0.2).timeout if view_changed_recently == false: camera_root.view_mode = camera_root.view_mode + 1 if camera_root.view_mode < 1 else 0 if camera_root.view_mode == Global.view_mode.first_person and networking.is_local_authority(): mesh_ref.visible = false else: mesh_ref.visible = true view_changed_recently = true if networking.is_local_authority(): if event.is_action_pressed("INPUT_DISPLAY_ENABLE_SDFGI"): var postprocess = preload("res://PlayerB/Maps/default_env.tres") postprocess.sdfgi_enabled = not postprocess.sdfgi_enabled postprocess.ssil_enabled = not postprocess.ssil_enabled postprocess.ssao_enabled = not postprocess.ssao_enabled postprocess.ssr_enabled = not postprocess.ssr_enabled postprocess.glow_enabled = not postprocess.glow_enabled if event.is_action_pressed("INPUT_ACTION_RAGDOLL"): ragdoll = true if rotation_mode == Global.rotation_mode.velocity_direction: if camera_root != null: if camera_root.view_mode == Global.view_mode.first_person: camera_root.view_mode = Global.view_mode.third_person #func Debug(): # $Status/Label.text = "InputSpeed : %s" % input_velocity.length() # $Status/Label2.text = "ActualSpeed : %s" % get_velocity().length()