New BoundFrog scene manages rope + frog
This commit is contained in:
parent
67031e101b
commit
d710219cfd
@ -1,13 +1,18 @@
|
|||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
|
|
||||||
var Rope = preload("res://src/Contraptions/Rope/Rope.tscn")
|
var Rope = preload("res://src/Contraptions/Rope/Rope.tscn")
|
||||||
var start_pos := Vector2.ZERO
|
var start_pos := Vector2.ZERO
|
||||||
var end_pos := Vector2.ZERO
|
var end_pos := Vector2.ZERO
|
||||||
onready var rope: Node2D = null
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
rope = Rope.instance()
|
pass
|
||||||
add_child(rope)
|
|
||||||
rope.spawn_rope($AnchorPos.global_position, Vector2($AnchorPos.global_position.x + 200, $AnchorPos.global_position.y))
|
func _on_LevelTemplate_ready() -> void:
|
||||||
rope.end_attached_node = $WhatAreFrog1
|
var rope = Rope.instance()
|
||||||
|
get_parent().add_child(rope)
|
||||||
|
rope.rope_end = get_node("RopeAnchor")
|
||||||
|
rope.rope_start = get_node("WhatAreFrog")
|
||||||
|
rope.rope_end_joint = get_node("RopeAnchor/cshape/pjoint")
|
||||||
|
rope.rope_start_joint = get_node("WhatAreFrog/cshape/pjoint")
|
||||||
|
rope.spawn_rope($RopeAnchor.global_position, $RopeAnchor.global_position, false)
|
||||||
|
|||||||
@ -10,4 +10,6 @@ script = ExtResource( 3 )
|
|||||||
[node name="WhatAreFrog" parent="." instance=ExtResource( 1 )]
|
[node name="WhatAreFrog" parent="." instance=ExtResource( 1 )]
|
||||||
|
|
||||||
[node name="RopeAnchor" parent="." instance=ExtResource( 2 )]
|
[node name="RopeAnchor" parent="." instance=ExtResource( 2 )]
|
||||||
position = Vector2( -53, 10 )
|
position = Vector2( -136, 11 )
|
||||||
|
|
||||||
|
[editable path="RopeAnchor"]
|
||||||
|
|||||||
@ -7,19 +7,15 @@ onready var orientation: RayCast2D = $Orientation
|
|||||||
onready var jump_timer: Timer
|
onready var jump_timer: Timer
|
||||||
|
|
||||||
export var score := 100
|
export var score := 100
|
||||||
export var chain_length := 100
|
|
||||||
export var chained := true
|
|
||||||
|
|
||||||
var start_x = 0
|
var start_x = 0
|
||||||
var in_air = false
|
var in_air = false
|
||||||
|
var died = false
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
jump_timer = Timer.new()
|
jump_timer = Timer.new()
|
||||||
jump_timer.connect("timeout", self, "jump")
|
jump_timer.connect("timeout", self, "jump")
|
||||||
add_child(jump_timer)
|
add_child(jump_timer)
|
||||||
if chained:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# TODO adapt to groups
|
# TODO adapt to groups
|
||||||
# TODO Engine error here(what does it WANT???)
|
# TODO Engine error here(what does it WANT???)
|
||||||
@ -33,7 +29,7 @@ func execute_movement(delta: float) -> void:
|
|||||||
velocity.y += _gravity * delta
|
velocity.y += _gravity * delta
|
||||||
if sign(velocity.x) != orientation.cast_to.x:
|
if sign(velocity.x) != orientation.cast_to.x:
|
||||||
velocity.x *= -1
|
velocity.x *= -1
|
||||||
velocity = move_and_slide(velocity, FLOOR_NORMAL)
|
velocity = move_and_slide(velocity, FLOOR_NORMAL, false, 4, 0.785398,false)
|
||||||
if(is_on_floor()):
|
if(is_on_floor()):
|
||||||
velocity = Vector2(0,0)
|
velocity = Vector2(0,0)
|
||||||
if ($Left_Wallcast.is_colliding() || $Right_Wallcast.is_colliding()) && is_on_floor():
|
if ($Left_Wallcast.is_colliding() || $Right_Wallcast.is_colliding()) && is_on_floor():
|
||||||
@ -41,8 +37,10 @@ func execute_movement(delta: float) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func die() -> void:
|
func die() -> void:
|
||||||
queue_free()
|
if(!died):
|
||||||
GlobalState.score += score
|
GlobalState.score += score
|
||||||
|
died = true
|
||||||
|
#queue_free()
|
||||||
|
|
||||||
|
|
||||||
func _on_EnemySkin_area_entered(area:Area2D) -> void:
|
func _on_EnemySkin_area_entered(area:Area2D) -> void:
|
||||||
@ -50,7 +48,6 @@ func _on_EnemySkin_area_entered(area:Area2D) -> void:
|
|||||||
get_node("EnemyBody").disabled = true
|
get_node("EnemyBody").disabled = true
|
||||||
die()
|
die()
|
||||||
|
|
||||||
|
|
||||||
func searching() -> Vector2:
|
func searching() -> Vector2:
|
||||||
if(is_on_floor()):
|
if(is_on_floor()):
|
||||||
if(jump_timer.is_stopped()):
|
if(jump_timer.is_stopped()):
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
[gd_scene load_steps=8 format=2]
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/enemy/enemy.png" type="Texture" id=1]
|
[ext_resource path="res://assets/enemy/enemy.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/Actors/Enemies/Beings/WhatAreFrog.gd" type="Script" id=2]
|
[ext_resource path="res://src/Actors/Enemies/Beings/WhatAreFrog.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd" type="Script" id=3]
|
[ext_resource path="res://src/Actors/Enemies/Beings/WhatAreFrogStateMachine.gd" type="Script" id=3]
|
||||||
[ext_resource path="res://src/Contraptions/Rope/RopeAnchor.tscn" type="PackedScene" id=4]
|
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=1]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 2.72463, 1.17848 )
|
extents = Vector2( 2.72463, 1.17848 )
|
||||||
@ -62,6 +61,15 @@ position = Vector2( 0, 6.48802 )
|
|||||||
scale = Vector2( 5.68128, 5.29182 )
|
scale = Vector2( 5.68128, 5.29182 )
|
||||||
shape = SubResource( 1 )
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="cshape" type="Node2D" parent="."]
|
||||||
|
position = Vector2( 0, -3.8147e-06 )
|
||||||
|
scale = Vector2( 0.1, 0.1 )
|
||||||
|
|
||||||
|
[node name="pjoint" type="PinJoint2D" parent="cshape"]
|
||||||
|
scale = Vector2( 0.3, 0.3 )
|
||||||
|
bias = 0.9
|
||||||
|
softness = 0.1
|
||||||
|
|
||||||
[node name="StompDetector" type="Area2D" parent="." groups=["weakpoint"]]
|
[node name="StompDetector" type="Area2D" parent="." groups=["weakpoint"]]
|
||||||
modulate = Color( 0, 0.0392157, 1, 1 )
|
modulate = Color( 0, 0.0392157, 1, 1 )
|
||||||
position = Vector2( 0, -6.44095 )
|
position = Vector2( 0, -6.44095 )
|
||||||
@ -80,7 +88,5 @@ position = Vector2( 5.96046e-07, 2.5 )
|
|||||||
scale = Vector2( 1.03, 1.04 )
|
scale = Vector2( 1.03, 1.04 )
|
||||||
shape = SubResource( 3 )
|
shape = SubResource( 3 )
|
||||||
|
|
||||||
[node name="RopeAnchor" parent="." instance=ExtResource( 4 )]
|
|
||||||
|
|
||||||
[connection signal="body_entered" from="StompDetector" to="." method="_on_StompDetector_body_entered"]
|
[connection signal="body_entered" from="StompDetector" to="." method="_on_StompDetector_body_entered"]
|
||||||
[connection signal="area_entered" from="EnemySkin" to="." method="_on_EnemySkin_area_entered"]
|
[connection signal="area_entered" from="EnemySkin" to="." method="_on_EnemySkin_area_entered"]
|
||||||
|
|||||||
@ -19,9 +19,10 @@ func _ready() -> void:
|
|||||||
|
|
||||||
# Game logic consequences of state
|
# Game logic consequences of state
|
||||||
func _state_logic(delta):
|
func _state_logic(delta):
|
||||||
var state_action_ref = funcref(parent, self.state)
|
if(!(parent.died && parent.is_on_floor())):
|
||||||
parent.velocity = state_action_ref.call_func()
|
var state_action_ref = funcref(parent, self.state)
|
||||||
parent.execute_movement(delta)
|
parent.velocity = state_action_ref.call_func()
|
||||||
|
parent.execute_movement(delta)
|
||||||
|
|
||||||
|
|
||||||
func _get_transition(_delta):
|
func _get_transition(_delta):
|
||||||
|
|||||||
@ -7,8 +7,6 @@ var rope_close_tolerance := 2.0
|
|||||||
var rope_pieces := []
|
var rope_pieces := []
|
||||||
var rope_piece_positions : PoolVector2Array= []
|
var rope_piece_positions : PoolVector2Array= []
|
||||||
|
|
||||||
var end_attached_node: Node2D = null
|
|
||||||
|
|
||||||
export var mouse_follow := false
|
export var mouse_follow := false
|
||||||
|
|
||||||
onready var rope_start
|
onready var rope_start
|
||||||
@ -18,11 +16,6 @@ onready var rope_end_joint
|
|||||||
|
|
||||||
func _physics_process(_delta: float) -> void:
|
func _physics_process(_delta: float) -> void:
|
||||||
#Resize or reinitialize?
|
#Resize or reinitialize?
|
||||||
if(end_attached_node != null):
|
|
||||||
if (!is_instance_valid(end_attached_node)):
|
|
||||||
rope_end.mode = RigidBody2D.MODE_RIGID
|
|
||||||
else:
|
|
||||||
rope_end.global_position = end_attached_node.global_position
|
|
||||||
if(mouse_follow):
|
if(mouse_follow):
|
||||||
rope_end.global_position = get_global_mouse_position()
|
rope_end.global_position = get_global_mouse_position()
|
||||||
rope_piece_positions.resize(0)
|
rope_piece_positions.resize(0)
|
||||||
@ -30,15 +23,16 @@ func _physics_process(_delta: float) -> void:
|
|||||||
if !rope_piece_positions.empty():
|
if !rope_piece_positions.empty():
|
||||||
update()
|
update()
|
||||||
|
|
||||||
func spawn_rope(start_pos: Vector2, end_pos: Vector2):
|
func spawn_rope(start_pos: Vector2, end_pos: Vector2, new_anchors: bool = true):
|
||||||
rope_start = RopeAnchor.instance()
|
if(new_anchors):
|
||||||
rope_end = RopeAnchor.instance()
|
rope_start = RopeAnchor.instance()
|
||||||
rope_start_joint = rope_start.get_node("cshape/pjoint")
|
rope_end = RopeAnchor.instance()
|
||||||
rope_end_joint = rope_end.get_node("cshape/pjoint")
|
rope_start_joint = rope_start.get_node("cshape/pjoint")
|
||||||
add_child(rope_start, true)
|
rope_end_joint = rope_end.get_node("cshape/pjoint")
|
||||||
add_child(rope_end, true)
|
add_child(rope_start, true)
|
||||||
rope_start.global_position = start_pos
|
add_child(rope_end, true)
|
||||||
rope_end.global_position = end_pos
|
rope_start.global_position = start_pos
|
||||||
|
rope_end.global_position = end_pos
|
||||||
start_pos = rope_start_joint.global_position
|
start_pos = rope_start_joint.global_position
|
||||||
end_pos = rope_end_joint.global_position
|
end_pos = rope_end_joint.global_position
|
||||||
var dist = start_pos.distance_to(end_pos)
|
var dist = start_pos.distance_to(end_pos)
|
||||||
@ -84,4 +78,4 @@ func get_piece_positions() -> Array:
|
|||||||
return rope_points
|
return rope_points
|
||||||
|
|
||||||
func _draw() -> void:
|
func _draw() -> void:
|
||||||
draw_polyline(rope_piece_positions, Color.blue, 2.0)
|
draw_polyline(rope_piece_positions, Color.blue, 1.2)
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://assets/environment/blocks/approx build block.png" type="Texture" id=1]
|
[ext_resource path="res://assets/environment/blocks/random-innentile.png" type="Texture" id=1]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id=5]
|
[sub_resource type="CircleShape2D" id=5]
|
||||||
radius = 2.0
|
radius = 2.0
|
||||||
@ -23,5 +23,5 @@ bias = 0.1
|
|||||||
softness = 0.1
|
softness = 0.1
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="."]
|
[node name="Sprite" type="Sprite" parent="."]
|
||||||
scale = Vector2( 0.1875, 0.1875 )
|
scale = Vector2( 0.25, 0.245353 )
|
||||||
texture = ExtResource( 1 )
|
texture = ExtResource( 1 )
|
||||||
|
|||||||
@ -9,7 +9,7 @@ height = 1.0
|
|||||||
[node name="RigidBody2D" type="RigidBody2D"]
|
[node name="RigidBody2D" type="RigidBody2D"]
|
||||||
collision_layer = 256
|
collision_layer = 256
|
||||||
collision_mask = 8
|
collision_mask = 8
|
||||||
gravity_scale = 3.0
|
gravity_scale = 0.2
|
||||||
linear_damp = 1.0
|
linear_damp = 1.0
|
||||||
angular_damp = 1.0
|
angular_damp = 1.0
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
|
|||||||
@ -6,10 +6,14 @@ var end_pos := Vector2.ZERO
|
|||||||
onready var rope: Node2D = null
|
onready var rope: Node2D = null
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
rope = Rope.instance()
|
pass
|
||||||
add_child(rope)
|
# rope = Rope.instance()
|
||||||
rope.spawn_rope($AnchorPos.global_position, Vector2($AnchorPos.global_position.x + 200, $AnchorPos.global_position.y))
|
# add_child(rope)
|
||||||
rope.end_attached_node = $WhatAreFrog1
|
# rope.rope_start = get_node("BoundFrog/RopeAnchor")
|
||||||
|
# rope.rope_end = get_node("BoundFrog/WhatAreFrog")
|
||||||
|
# rope.rope_start_joint = get_node("BoundFrog/RopeAnchor/cshape/pjoint")
|
||||||
|
# rope.rope_end_joint = get_node("BoundFrog/WhatAreFrog/cshape/pjoint")
|
||||||
|
# rope.spawn_rope($BoundFrog/RopeAnchor.global_position, $BoundFrog.global_position, false)
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
if event is InputEventMouseButton && !event.is_pressed():
|
if event is InputEventMouseButton && !event.is_pressed():
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user