From 4068e66756966983973ab20b68ec5382e398548b Mon Sep 17 00:00:00 2001 From: Anson Bridges Date: Tue, 13 Sep 2022 18:15:01 -0400 Subject: incomplete airplane implementation (needs addl. network sync) --- godot/scripts/cameras/PlayerCamGDS.gd | 79 +++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 godot/scripts/cameras/PlayerCamGDS.gd (limited to 'godot/scripts/cameras/PlayerCamGDS.gd') diff --git a/godot/scripts/cameras/PlayerCamGDS.gd b/godot/scripts/cameras/PlayerCamGDS.gd new file mode 100644 index 0000000..ec46cf8 --- /dev/null +++ b/godot/scripts/cameras/PlayerCamGDS.gd @@ -0,0 +1,79 @@ +extends ClippedCamera + +var _modes = ["STATIC", "FIRSTPERSON", "THIRDPERSON", "ARM", "FREECAM"] +var mode = "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 = 12.0 + +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + current = true + +func _input(event): + 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, extra_path = "."): + 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