104 lines
2.7 KiB
GDScript
104 lines
2.7 KiB
GDScript
extends Node2D
|
|
|
|
@onready var positions = $Positions
|
|
@onready var collision = $CollisionTest
|
|
|
|
var lastDirection = null
|
|
|
|
func getPositions():
|
|
return positions.get_children()
|
|
|
|
func checkDirection():
|
|
var leftCollision = true
|
|
var rightCollision = true
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
if await getCollidingAreas() != []:
|
|
positions.position.x += GLOBAL.GRID
|
|
collision.position.x += GLOBAL.GRID
|
|
if await getCollidingAreas() == []:
|
|
rightCollision = false
|
|
else:
|
|
rightCollision = true
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
if await getCollidingAreas() != []:
|
|
positions.position.x -= GLOBAL.GRID
|
|
collision.position.x -= GLOBAL.GRID
|
|
if await getCollidingAreas() == []:
|
|
leftCollision = false
|
|
else:
|
|
leftCollision = true
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
if not rightCollision:
|
|
positions.position.x += GLOBAL.GRID
|
|
collision.position.x += GLOBAL.GRID
|
|
elif not leftCollision:
|
|
positions.position.x -= GLOBAL.GRID
|
|
collision.position.x -= GLOBAL.GRID
|
|
else:
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
|
|
func turn(direction,newPosition):
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
position = newPosition
|
|
match direction:
|
|
GLOBAL.Direction.LEFT:
|
|
positions.rotation_degrees += 90
|
|
collision.rotation_degrees += 90
|
|
if await getCollidingAreas() != []:
|
|
checkDirection()
|
|
if await getCollidingAreas() != []:
|
|
positions.rotation_degrees += 90
|
|
collision.rotation_degrees += 90
|
|
|
|
GLOBAL.Direction.RIGHT:
|
|
positions.rotation_degrees -= 90
|
|
collision.rotation_degrees -= 90
|
|
if await getCollidingAreas() != []:
|
|
checkDirection()
|
|
if await getCollidingAreas() != []:
|
|
positions.rotation_degrees -= 90
|
|
collision.rotation_degrees -= 90
|
|
#positions.rotation_degrees += 90
|
|
#collision.rotation_degrees += 90
|
|
|
|
|
|
|
|
func getCollidingAreas():
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
var collidingAreas = []
|
|
for i in collision.get_overlapping_areas():
|
|
if i.is_in_group("Block"):
|
|
if i.UID != GLOBAL.currentUID:
|
|
collidingAreas.append(i)
|
|
else:
|
|
collidingAreas.append(i)
|
|
return collidingAreas
|
|
|
|
|
|
#func _on_collision_test_area_entered(area: Area2D) -> void:
|
|
#if lastDirection == null:
|
|
#checkLeft()
|
|
#else:
|
|
#if lastDirection == GLOBAL.Direction.LEFT:
|
|
#print(getCollidingAreas())
|
|
#checkRight()
|
|
#if lastDirection == GLOBAL.Direction.LEFT:
|
|
#print(getCollidingAreas())
|
|
#print(collision.get_overlapping_areas())
|
|
#print(getCollidingAreas())
|
|
#print(checkLeft())
|
|
#print(checkRight())
|
|
|
|
func reset(newPosition):
|
|
position = newPosition
|
|
positions.position.x = 0
|
|
collision.position.x = 0
|
|
rotation_degrees = 0
|