summaryrefslogtreecommitdiff
path: root/godot/scripts/cameras/PlayerCamGDS.gd
diff options
context:
space:
mode:
authorAnson Bridges <bridges.anson@gmail.com>2022-09-13 18:15:01 -0400
committerAnson Bridges <bridges.anson@gmail.com>2022-09-13 18:15:01 -0400
commit4068e66756966983973ab20b68ec5382e398548b (patch)
treec2215e65167c7f6aced272da371214985cce16f5 /godot/scripts/cameras/PlayerCamGDS.gd
parente2f3e4bd7118c8f55d20b29d76cb9a13acf72f8b (diff)
incomplete airplane implementation (needs addl. network sync)
Diffstat (limited to 'godot/scripts/cameras/PlayerCamGDS.gd')
-rw-r--r--godot/scripts/cameras/PlayerCamGDS.gd79
1 files changed, 79 insertions, 0 deletions
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