#Overlaps are triggering multiple times

5 messages · Page 1 of 1 (latest)

cerulean rapids
#

player script

extends KinematicBody2D

#signal player_death
#signal goal

var floating = false
var grid_size = 40
var collisions_enabled = true

onready var tween = $Tween
onready var ray = $RayCast2D

export var speed = 0.2

var inputs = {
    "move_up": Vector2.UP,
    "move_down": Vector2.DOWN,
    "move_left": Vector2.LEFT,
    "move_right": Vector2.RIGHT
}

func _ready():
    #position = position.snapped(Vector2.ONE * grid_size)
    position += Vector2.ONE * grid_size/2

func _unhandled_input(event):
    if tween.is_active():
        return
    for dir in inputs.keys():
        if event.is_action_pressed(dir):
            move(dir)

func move(dir):
    var vector_pos = inputs[dir] * grid_size
    ray.cast_to = vector_pos
    ray.force_raycast_update()
    $Tween.interpolate_property(self, "position", position, position + vector_pos, speed, Tween.TRANS_SINE,Tween.EASE_IN_OUT)
    if !ray.is_colliding():
        $Tween.start()```
#



level/main script

extends Node2D

export (PackedScene) var cars
export (PackedScene) var player

var goals_occupied = 0

onready var car_spawns = get_tree().get_nodes_in_group("CarSpawn")
onready var left_spawns = get_tree().get_nodes_in_group("SpawnGroupLeft")
onready var right_spawns = get_tree().get_nodes_in_group("SpawnGroupRight")
onready var points_areas = get_tree().get_nodes_in_group("PointsArea")
onready var lilly_pads = get_tree().get_nodes_in_group("Lillypads")

func _ready():
    #$Player.connect("player_death", self, "update_lives")
    $UI.connect("timed_out", self, "update_lives") # this is circular for now - no actually this is perfect i think
    $Water.connect("player_hit", self, "update_lives")
    for node in points_areas:
        node.connect("gained_points", self, "update_score")
    for node in lilly_pads:
        node.connect("goal_occupied", self, "_on_goal_occupied")

func update_lives():
    $UI._on_player_death()
    update_player_pos()
    $UI/TextureProgress.value = 100

func update_score(points):
    $UI._on_score_updated(points)

func _on_SpawnTimer_timeout():
    for node in left_spawns:
        var car = cars.instance()
        car.position = node.position
        add_child(car)
        car.origin = "left"
        
    for node in right_spawns:
        var car = cars.instance()
        car.position = node.position
        add_child(car)
        car.origin = "right"

func _on_goal_occupied():
    goals_occupied +=1
    update_score(200)
    print(goals_occupied)
    update_player_pos()
    if goals_occupied >= 5:
        game_won()

func update_player_pos():
    $Player.position = $PlayerSpawnPosition.position

func game_won():
    print("Game Won!")
#

_
The issue is when i overlap with one of these below

#

water script

extends Area2D

signal player_hit

func _on_Water_area_entered(area):
    if area.is_in_group("Player"):
        emit_signal("player_hit")
#

_
obstacle script

extends Area2D

signal player_hit

var origin = null

export var speed = 100

func _physics_process(delta):
    if origin != null and origin == "left":
        position.x += speed * delta
    elif origin != null and origin == "right":
        position.x -= speed * delta

func _on_ObBase_area_entered(area):
    if area.is_in_group("Player"):
        emit_signal("player_hit")