Attach momentum to elevator
This commit is contained in:
@ -1,8 +1,9 @@
|
|||||||
[gd_scene load_steps=6 format=2]
|
[gd_scene load_steps=8 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Assets/Art/Objects/elevator/elevator.png" type="Texture" id=1]
|
[ext_resource path="res://Assets/Art/Objects/elevator/elevator.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://Scripts/Entities/Elevator.gd" type="Script" id=2]
|
[ext_resource path="res://Scripts/Entities/Elevator.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://Scripts/Component/ElevatorControls.gd" type="Script" id=3]
|
[ext_resource path="res://Scripts/Component/ElevatorControls.gd" type="Script" id=3]
|
||||||
|
[ext_resource path="res://Scripts/Component/LandingArea.gd" type="Script" id=4]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=1]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 16, 2 )
|
extents = Vector2( 16, 2 )
|
||||||
@ -10,6 +11,9 @@ extents = Vector2( 16, 2 )
|
|||||||
[sub_resource type="RectangleShape2D" id=2]
|
[sub_resource type="RectangleShape2D" id=2]
|
||||||
extents = Vector2( 10, 16 )
|
extents = Vector2( 10, 16 )
|
||||||
|
|
||||||
|
[sub_resource type="RectangleShape2D" id=3]
|
||||||
|
extents = Vector2( 16, 1 )
|
||||||
|
|
||||||
[node name="Elevator" type="Node2D"]
|
[node name="Elevator" type="Node2D"]
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
@ -40,3 +44,10 @@ script = ExtResource( 3 )
|
|||||||
|
|
||||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="ElevatorControls"]
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="ElevatorControls"]
|
||||||
shape = SubResource( 2 )
|
shape = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="LandingArea" type="Area2D" parent="."]
|
||||||
|
script = ExtResource( 4 )
|
||||||
|
|
||||||
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="LandingArea"]
|
||||||
|
position = Vector2( 0, 15 )
|
||||||
|
shape = SubResource( 3 )
|
||||||
|
@ -40,7 +40,7 @@ reset_after_dialog = true
|
|||||||
position = Vector2( 182.674, 166.939 )
|
position = Vector2( 182.674, 166.939 )
|
||||||
|
|
||||||
[node name="Player" parent="." instance=ExtResource( 3 )]
|
[node name="Player" parent="." instance=ExtResource( 3 )]
|
||||||
position = Vector2( 32.6224, 160.876 )
|
position = Vector2( -418.613, 159.247 )
|
||||||
|
|
||||||
[node name="GUI" parent="." instance=ExtResource( 4 )]
|
[node name="GUI" parent="." instance=ExtResource( 4 )]
|
||||||
|
|
||||||
|
25
client/Scripts/Component/LandingArea.gd
Normal file
25
client/Scripts/Component/LandingArea.gd
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
extends Area2D
|
||||||
|
|
||||||
|
var player_node
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
connect("body_entered", self, "_on_body_enter")
|
||||||
|
connect("body_exited", self, "_on_body_exit")
|
||||||
|
set_process(false)
|
||||||
|
|
||||||
|
func _on_body_enter(body):
|
||||||
|
if body.has_method("user_input"):
|
||||||
|
player_node = body
|
||||||
|
set_process(true)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_body_exit(body):
|
||||||
|
if body.has_method("user_input"):
|
||||||
|
body.floor_speed = Vector2.ZERO
|
||||||
|
set_process(false)
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
if get_parent().motion.y > 0:
|
||||||
|
player_node.floor_speed = get_parent().motion
|
||||||
|
else:
|
||||||
|
player_node.floor_speed = Vector2.ZERO
|
@ -44,6 +44,8 @@ func start_moving(index):
|
|||||||
func stop_moving():
|
func stop_moving():
|
||||||
emit_signal("elevator_stopped")
|
emit_signal("elevator_stopped")
|
||||||
moving = false
|
moving = false
|
||||||
|
motion = Vector2.ZERO
|
||||||
|
|
||||||
# Alert doors of updated elevator state
|
# Alert doors of updated elevator state
|
||||||
for door_path in doors:
|
for door_path in doors:
|
||||||
get_node(door_path).on_elevator_stop(current_pos)
|
get_node(door_path).on_elevator_stop(current_pos)
|
||||||
@ -54,6 +56,7 @@ func _physics_process(delta):
|
|||||||
var target_pos = intial_pos + relative_positions[current_pos]
|
var target_pos = intial_pos + relative_positions[current_pos]
|
||||||
var angle = get_angle_to(target_pos)
|
var angle = get_angle_to(target_pos)
|
||||||
var velocity = Vector2(cos(angle),sin(angle))
|
var velocity = Vector2(cos(angle),sin(angle))
|
||||||
|
motion = velocity * elevator_speed
|
||||||
global_position += velocity * elevator_speed * delta
|
global_position += velocity * elevator_speed * delta
|
||||||
|
|
||||||
# Stop when elevator is at destination
|
# Stop when elevator is at destination
|
||||||
|
@ -14,6 +14,7 @@ var jumped = false
|
|||||||
|
|
||||||
var moveMotion : float = 0 # Player Input ( <- & -> )
|
var moveMotion : float = 0 # Player Input ( <- & -> )
|
||||||
var motion : Vector2 = Vector2(0,0) # Player's current velocity
|
var motion : Vector2 = Vector2(0,0) # Player's current velocity
|
||||||
|
var floor_speed : Vector2 = Vector2.ZERO
|
||||||
|
|
||||||
var gui # Node representing GUI object
|
var gui # Node representing GUI object
|
||||||
|
|
||||||
@ -104,6 +105,7 @@ func _physics_process(delta):
|
|||||||
|
|
||||||
# Apply velocity to frame
|
# Apply velocity to frame
|
||||||
motion.x = moveMotion
|
motion.x = moveMotion
|
||||||
|
motion = motion + floor_speed
|
||||||
animation_manager(moveMotion)
|
animation_manager(moveMotion)
|
||||||
move_and_slide(motion, Vector2(0,-1))
|
move_and_slide(motion, Vector2(0,-1))
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user