From 09ae350b9e26f1d4467aefd86bc1ea3517c27f86 Mon Sep 17 00:00:00 2001 From: SlightlyObscure <33038788+SlightlyObscure@users.noreply.github.com> Date: Mon, 18 Nov 2019 16:39:26 +0100 Subject: [PATCH] mmmhhh fixes --- Characters/Player/Player.gd | 21 ++++++++++------ Characters/Player/Player.tscn | 1 + Things/Door.gd | 47 ----------------------------------- Things/Door/Door.gd | 42 ++++++++++++++++++++++++++----- Things/Door/Door.tscn | 2 +- 5 files changed, 51 insertions(+), 62 deletions(-) delete mode 100644 Things/Door.gd diff --git a/Characters/Player/Player.gd b/Characters/Player/Player.gd index 47f4bc9..91b4105 100644 --- a/Characters/Player/Player.gd +++ b/Characters/Player/Player.gd @@ -2,6 +2,7 @@ extends KinematicBody # export variables export(NodePath) var body_nodepath +export(NodePath) var lookingAt_nodepath # const const GRAVITY = -24.8 @@ -16,6 +17,7 @@ const INTERACT_DISTANCE = 5 # private members var _body: Spatial var _camera: Camera +var _lookCast: RayCast var _dir = Vector3(); var _vel = Vector3(); var _is_sprinting; @@ -27,13 +29,14 @@ func _ready(): _camera = $Body/Camera assert(null != _camera) Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) - get_node("Body/Camera/LookingAt").cast_to = Vector3(0, 0, INTERACT_DISTANCE) + _lookCast = get_node(lookingAt_nodepath) as RayCast + _lookCast.cast_to = Vector3(0, 0, INTERACT_DISTANCE) func _physics_process(delta): process_input() process_movement(delta) - check_interact() + func process_input(): @@ -86,12 +89,10 @@ func process_movement(delta): _vel = move_and_slide(_vel, Vector3(0, 1, 0), 0.05, 4, deg2rad(MAX_SLOPE_ANGLE)) func check_interact(): - if Input.is_action_just_pressed("interact"): - var ray = get_node("Body/Camera/LookingAt") - if ray.is_colliding(): - var collider = ray.get_collider() - if "being_touched" in collider: - collider.being_touched = true + if _lookCast.is_colliding(): + var collider = _lookCast.get_collider() + if "being_touched" in collider: + collider.being_touched = true func _input(event): # capture mouse movement @@ -102,4 +103,8 @@ func _input(event): var camera_rot = _body.rotation_degrees camera_rot.x = clamp(camera_rot.x, -70, 70) _body.rotation_degrees = camera_rot + + if Input.is_action_just_pressed("interact"): + check_interact() + # interact with object player is looking at diff --git a/Characters/Player/Player.tscn b/Characters/Player/Player.tscn index 8f997d0..0d5a1b9 100644 --- a/Characters/Player/Player.tscn +++ b/Characters/Player/Player.tscn @@ -11,6 +11,7 @@ collision_layer = 5 collision_mask = 5 script = ExtResource( 1 ) body_nodepath = NodePath("Body") +lookingAt_nodepath = NodePath("Body/Camera/LookingAt") [node name="Body" type="Spatial" parent="."] diff --git a/Things/Door.gd b/Things/Door.gd deleted file mode 100644 index cb458e0..0000000 --- a/Things/Door.gd +++ /dev/null @@ -1,47 +0,0 @@ -extends KinematicBody - -# export variables -export(bool) var being_touched - -# const -const OPENING_SPEED = 50 - -# private members -var _startingRotY -var _isMoving = false -var _isOpening = false -var _degrees = 0 - -# Called when the node enters the scene tree for the first time. -func _ready(): - _startingRotY = global_transform.basis.get_euler().y - pass - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - #if Input.is_action_just_pressed("interact"): - if being_touched: - _isMoving = true - _isOpening = !_isOpening - being_touched = false - - if _isMoving: - doorMove(delta) - - pass - -func doorMove(delta): - if _isOpening: - if _degrees < 100: - _degrees += OPENING_SPEED * delta - else: - _degrees = 100 - _isMoving = false - else: - if _degrees > 0: - _degrees -= OPENING_SPEED * delta - else: - _degrees = 0 - _isMoving = false - rotate_y(_degrees * PI/180 - global_transform.basis.get_euler().y + _startingRotY) - pass diff --git a/Things/Door/Door.gd b/Things/Door/Door.gd index 355993c..3dc2dc3 100644 --- a/Things/Door/Door.gd +++ b/Things/Door/Door.gd @@ -1,13 +1,43 @@ extends KinematicBody -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" +# export variables +export(bool) var being_touched + +# const +const OPENING_SPEED = 50 + +# private members +var _startingRotY +var _isMoving = false +var _isOpening = false +var _degrees = 0 # Called when the node enters the scene tree for the first time. func _ready(): - pass # Replace with function body. + _startingRotY = global_transform.basis.get_euler().y # Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass +func _process(delta): + #if Input.is_action_just_pressed("interact"): + if being_touched: + _isMoving = true + _isOpening = !_isOpening + being_touched = false + + if _isMoving: + doorMove(delta) + +func doorMove(delta): + if _isOpening: + if _degrees < 100: + _degrees += OPENING_SPEED * delta + else: + _degrees = 100 + _isMoving = false + else: + if _degrees > 0: + _degrees -= OPENING_SPEED * delta + else: + _degrees = 0 + _isMoving = false + rotate_y(_degrees * PI/180 - global_transform.basis.get_euler().y + _startingRotY) diff --git a/Things/Door/Door.tscn b/Things/Door/Door.tscn index 194a394..636bb5a 100644 --- a/Things/Door/Door.tscn +++ b/Things/Door/Door.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=2] -[ext_resource path="res://Things/Door.gd" type="Script" id=1] +[ext_resource path="res://Things/Door/Door.gd" type="Script" id=1] [sub_resource type="CubeMesh" id=1]