From 1d347e770fddcdd051890cdf070fd2779ab113bf Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Mon, 19 Sep 2022 17:44:22 -0400 Subject: problems: player controller perf, boat perf, NAVSERVER PERF --- src/camera_controller/PlayerCam.gd | 79 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/camera_controller/PlayerCam.gd (limited to 'src/camera_controller/PlayerCam.gd') diff --git a/src/camera_controller/PlayerCam.gd b/src/camera_controller/PlayerCam.gd new file mode 100644 index 0000000..382ec06 --- /dev/null +++ b/src/camera_controller/PlayerCam.gd @@ -0,0 +1,79 @@ +extends ClippedCamera + +var _modes: PoolStringArray = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"] +var mode: String = "STATIC" #STATIC, FIRSTPERSON, THIRDPERSON, ARM, FREECAM + +#first/third person variables +var head: Spatial = null +var neck: Spatial = null +var player: RigidBody = null + +#third person/arm variables +var arm: SpringArm = null + +var mouse_axis: Vector2 +var mouse_sensitivity: float = 12.0 + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + current = true + +func _input(event: InputEvent): + if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED: + mouse_axis = event.relative + match mode: + "FIRSTPERSON": + mouse_firstperson() + "THIRDPERSON": + mouse_thirdperson() + "STATIC": + pass + "ARM": + mouse_arm() + "FREECAM": + mouse_freecam() + _: + pass + +func attach(new_parent: Node, c_mode: String, extra_path: String = "."): + if get_parent(): + get_parent().remove_child(self) + if c_mode in _modes: + mode = c_mode + if mode == "FIRSTPERSON": + head = new_parent.head; neck = new_parent.neck; + arm = null; + elif mode == "THIRDPERSON": + head = new_parent.head; neck = new_parent.neck; + arm = new_parent.arm + elif mode == "ARM": + head = null; neck = null; + arm = new_parent.arm + else: + head = null; neck = null; arm = null; + new_parent.get_node(extra_path).add_child(self) + transform = Transform.IDENTITY + +func mouse_firstperson() -> void: + if mouse_axis.length_squared() > 0: + var horizontal: float = -mouse_axis.x * (mouse_sensitivity / 100) + var vertical: float = -mouse_axis.y * (mouse_sensitivity / 100) + + neck.rotate_y(deg2rad(horizontal)) + head.rotate_x(deg2rad(vertical)) + + #vertical clamp + head.rotation_degrees.x = clamp(head.rotation_degrees.x, -90, 90) + +func mouse_thirdperson() -> void: + arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-90,90) + arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100) + head.rotation_degrees.x = arm.rotation_degrees.x + neck.rotation_degrees.y = arm.rotation_degrees.y + +func mouse_arm() -> void: + arm.rotation_degrees.x = clamp(rotation_degrees.x-mouse_axis.y*(mouse_sensitivity / 100),-70,70) + arm.rotation_degrees.y -= mouse_axis.x*(mouse_sensitivity / 100) + +func mouse_freecam() -> void: + pass -- cgit v1.2.3