New BoundFrog scene manages rope + frog

This commit is contained in:
Jakob Feldmann 2023-01-03 19:23:45 +01:00
parent 67031e101b
commit d710219cfd
10 changed files with 61 additions and 58 deletions

View File

@ -1,13 +1,18 @@
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 end_pos := Vector2.ZERO
onready var rope: Node2D = null
func _ready() -> void:
rope = Rope.instance()
add_child(rope)
rope.spawn_rope($AnchorPos.global_position, Vector2($AnchorPos.global_position.x + 200, $AnchorPos.global_position.y))
rope.end_attached_node = $WhatAreFrog1
pass
func _on_LevelTemplate_ready() -> void:
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)

View File

@ -10,4 +10,6 @@ script = ExtResource( 3 )
[node name="WhatAreFrog" parent="." instance=ExtResource( 1 )]
[node name="RopeAnchor" parent="." instance=ExtResource( 2 )]
position = Vector2( -53, 10 )
position = Vector2( -136, 11 )
[editable path="RopeAnchor"]

View File

@ -7,19 +7,15 @@ onready var orientation: RayCast2D = $Orientation
onready var jump_timer: Timer
export var score := 100
export var chain_length := 100
export var chained := true
var start_x = 0
var in_air = false
var died = false
func _ready():
jump_timer = Timer.new()
jump_timer.connect("timeout", self, "jump")
add_child(jump_timer)
if chained:
pass
# TODO adapt to groups
# TODO Engine error here(what does it WANT???)
@ -33,7 +29,7 @@ func execute_movement(delta: float) -> void:
velocity.y += _gravity * delta
if sign(velocity.x) != orientation.cast_to.x:
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()):
velocity = Vector2(0,0)
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:
queue_free()
GlobalState.score += score
if(!died):
GlobalState.score += score
died = true
#queue_free()
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
die()
func searching() -> Vector2:
if(is_on_floor()):
if(jump_timer.is_stopped()):

View File

@ -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://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/Contraptions/Rope/RopeAnchor.tscn" type="PackedScene" id=4]
[sub_resource type="RectangleShape2D" id=1]
extents = Vector2( 2.72463, 1.17848 )
@ -62,6 +61,15 @@ position = Vector2( 0, 6.48802 )
scale = Vector2( 5.68128, 5.29182 )
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"]]
modulate = Color( 0, 0.0392157, 1, 1 )
position = Vector2( 0, -6.44095 )
@ -80,7 +88,5 @@ position = Vector2( 5.96046e-07, 2.5 )
scale = Vector2( 1.03, 1.04 )
shape = SubResource( 3 )
[node name="RopeAnchor" parent="." instance=ExtResource( 4 )]
[connection signal="body_entered" from="StompDetector" to="." method="_on_StompDetector_body_entered"]
[connection signal="area_entered" from="EnemySkin" to="." method="_on_EnemySkin_area_entered"]

View File

@ -19,9 +19,10 @@ func _ready() -> void:
# Game logic consequences of state
func _state_logic(delta):
var state_action_ref = funcref(parent, self.state)
parent.velocity = state_action_ref.call_func()
parent.execute_movement(delta)
if(!(parent.died && parent.is_on_floor())):
var state_action_ref = funcref(parent, self.state)
parent.velocity = state_action_ref.call_func()
parent.execute_movement(delta)
func _get_transition(_delta):

View File

@ -7,8 +7,6 @@ var rope_close_tolerance := 2.0
var rope_pieces := []
var rope_piece_positions : PoolVector2Array= []
var end_attached_node: Node2D = null
export var mouse_follow := false
onready var rope_start
@ -18,11 +16,6 @@ onready var rope_end_joint
func _physics_process(_delta: float) -> void:
#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):
rope_end.global_position = get_global_mouse_position()
rope_piece_positions.resize(0)
@ -30,15 +23,16 @@ func _physics_process(_delta: float) -> void:
if !rope_piece_positions.empty():
update()
func spawn_rope(start_pos: Vector2, end_pos: Vector2):
rope_start = RopeAnchor.instance()
rope_end = RopeAnchor.instance()
rope_start_joint = rope_start.get_node("cshape/pjoint")
rope_end_joint = rope_end.get_node("cshape/pjoint")
add_child(rope_start, true)
add_child(rope_end, true)
rope_start.global_position = start_pos
rope_end.global_position = end_pos
func spawn_rope(start_pos: Vector2, end_pos: Vector2, new_anchors: bool = true):
if(new_anchors):
rope_start = RopeAnchor.instance()
rope_end = RopeAnchor.instance()
rope_start_joint = rope_start.get_node("cshape/pjoint")
rope_end_joint = rope_end.get_node("cshape/pjoint")
add_child(rope_start, true)
add_child(rope_end, true)
rope_start.global_position = start_pos
rope_end.global_position = end_pos
start_pos = rope_start_joint.global_position
end_pos = rope_end_joint.global_position
var dist = start_pos.distance_to(end_pos)
@ -84,4 +78,4 @@ func get_piece_positions() -> Array:
return rope_points
func _draw() -> void:
draw_polyline(rope_piece_positions, Color.blue, 2.0)
draw_polyline(rope_piece_positions, Color.blue, 1.2)

View File

@ -1,6 +1,6 @@
[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]
radius = 2.0
@ -23,5 +23,5 @@ bias = 0.1
softness = 0.1
[node name="Sprite" type="Sprite" parent="."]
scale = Vector2( 0.1875, 0.1875 )
scale = Vector2( 0.25, 0.245353 )
texture = ExtResource( 1 )

View File

@ -9,7 +9,7 @@ height = 1.0
[node name="RigidBody2D" type="RigidBody2D"]
collision_layer = 256
collision_mask = 8
gravity_scale = 3.0
gravity_scale = 0.2
linear_damp = 1.0
angular_damp = 1.0
script = ExtResource( 1 )

View File

@ -6,10 +6,14 @@ var end_pos := Vector2.ZERO
onready var rope: Node2D = null
func _ready() -> void:
rope = Rope.instance()
add_child(rope)
rope.spawn_rope($AnchorPos.global_position, Vector2($AnchorPos.global_position.x + 200, $AnchorPos.global_position.y))
rope.end_attached_node = $WhatAreFrog1
pass
# rope = Rope.instance()
# add_child(rope)
# 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):
if event is InputEventMouseButton && !event.is_pressed():

File diff suppressed because one or more lines are too long