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 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)

View File

@ -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"]

View File

@ -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()):

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://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"]

View File

@ -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):

View File

@ -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)

View File

@ -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 )

View File

@ -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 )

View File

@ -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