Erster Prototyp
This commit is contained in:
parent
2da5af8954
commit
885351b624
48 changed files with 1350 additions and 0 deletions
150
scenes/Block/block.gd
Normal file
150
scenes/Block/block.gd
Normal file
|
|
@ -0,0 +1,150 @@
|
|||
extends Node2D
|
||||
|
||||
var secretPosition = Vector2()
|
||||
|
||||
@onready var blockParts = $BlockParts
|
||||
@onready var stopTimer = $stopTimer
|
||||
|
||||
var stopped = false
|
||||
|
||||
var type : GLOBAL.BLOCKTYPES = GLOBAL.BLOCKTYPES.LIGHT
|
||||
|
||||
var TestPositions : Dictionary = {
|
||||
1: $"Tests/Position 1",
|
||||
2: $"Tests/Position 2",
|
||||
3: $"Tests/Position 3",
|
||||
4: $"Tests/Position 4",
|
||||
}
|
||||
|
||||
var Positions : Dictionary = {
|
||||
1: $"Position 1",
|
||||
2: $"Position 2",
|
||||
3: $"Position 3",
|
||||
4: $"Position 4"
|
||||
}
|
||||
|
||||
var currentRotation = 1
|
||||
|
||||
var id = 0
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
secretPosition = position
|
||||
generateBlockParts()
|
||||
self.modulate = Color.from_hsv((randi() % 12) / 12.0, 1, 1)
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
position = secretPosition.snapped(Vector2(64,64))
|
||||
if not isCollidingBOTTOM() and( GLOBAL.hasSelectedSpeed or (self != GLOBAL.currentBlock)) :
|
||||
secretPosition.y += GLOBAL.currentSpeed * delta * 30
|
||||
if self == GLOBAL.currentBlock and not stopped:
|
||||
#if not isCollidingBOTTOM():
|
||||
# secretPosition.y += GLOBAL.SPEED.MAX * delta * 30
|
||||
#else:
|
||||
if stopTimer.is_stopped():
|
||||
stopTimer.start(0.7)
|
||||
#secretPosition = secretPosition.snapped(Vector2(64,64))
|
||||
|
||||
|
||||
if Input.is_action_just_pressed("rotate_left"):
|
||||
if not isNextRotationColliding(1):
|
||||
currentRotation = interpolateRotation(1)
|
||||
rotateBlock()
|
||||
elif not isNextRotationColliding(1,1):
|
||||
currentRotation = interpolateRotation(1,1)
|
||||
rotateBlock()
|
||||
elif Input.is_action_just_pressed("rotate_right"):
|
||||
if not isNextRotationColliding(2):
|
||||
currentRotation = interpolateRotation(2)
|
||||
rotateBlock()
|
||||
elif not isNextRotationColliding(2,1):
|
||||
currentRotation = interpolateRotation(2,1)
|
||||
rotateBlock()
|
||||
elif Input.is_action_just_pressed("left"):
|
||||
if not isCollidingLeft():
|
||||
secretPosition.x -= GLOBAL.GRID
|
||||
elif Input.is_action_just_pressed("right"):
|
||||
if not isCollidingRIGHT():
|
||||
secretPosition.x += GLOBAL.GRID
|
||||
|
||||
func isCollidingTOP() -> bool:
|
||||
for i in blockParts.get_children():
|
||||
if i.getCollisionTOP():
|
||||
return true
|
||||
return false
|
||||
|
||||
func isCollidingLeft() -> bool:
|
||||
for i in blockParts.get_children():
|
||||
if i.getCollisionLEFT():
|
||||
return true
|
||||
return false
|
||||
|
||||
func isCollidingRIGHT() -> bool:
|
||||
for i in blockParts.get_children():
|
||||
if i.getCollisionRIGHT():
|
||||
return true
|
||||
return false
|
||||
|
||||
func isCollidingBOTTOM() -> bool:
|
||||
for i in blockParts.get_children():
|
||||
if i.getCollisionBOTTOM():
|
||||
return true
|
||||
return false
|
||||
|
||||
|
||||
func generateBlockParts():
|
||||
for i in Positions[1].get_children():
|
||||
var blockPart = load("res://scenes/Block/block_part.tscn").instantiate()
|
||||
blockPart.position = i.position# + Vector2( GLOBAL.GRID / 2, GLOBAL.GRID / 2)
|
||||
blockParts.add_child(blockPart)
|
||||
|
||||
func rotateBlock():
|
||||
for i in blockParts.get_children().size():
|
||||
blockParts.get_children()[i].position = Positions[currentRotation].get_children()[i].position
|
||||
|
||||
func interpolateRotation(direction, additions=0):
|
||||
match direction:
|
||||
1:
|
||||
if currentRotation + 1 > 4:
|
||||
return 1 + additions
|
||||
elif currentRotation + (1 + additions) > 4:
|
||||
return 1
|
||||
elif currentRotation + (1 + additions) <= 4:
|
||||
return currentRotation + (1 + additions)
|
||||
|
||||
2:
|
||||
if currentRotation - 1 < 1:
|
||||
return 4 - additions
|
||||
elif currentRotation - (1 + additions) < 1:
|
||||
return 4
|
||||
elif currentRotation - (1 + additions) >= 1:
|
||||
return currentRotation - (1 + additions)
|
||||
|
||||
func isNextRotationColliding(direction, additions=0):
|
||||
var colliding = false
|
||||
match direction:
|
||||
1:
|
||||
for i in TestPositions[interpolateRotation(1, additions)].get_overlapping_areas():
|
||||
if not i.get_parent().get_parent() == TestPositions[interpolateRotation(1, additions)].get_parent().get_parent():
|
||||
colliding = true
|
||||
return colliding#TestPositions[interpolateRotation(1, additions)].has_overlapping_areas()
|
||||
2:
|
||||
for i in TestPositions[interpolateRotation(2, additions)].get_overlapping_areas():
|
||||
if not i.get_parent().get_parent() == TestPositions[interpolateRotation(2, additions)].get_parent().get_parent():
|
||||
colliding = true
|
||||
return colliding#TestPositions[interpolateRotation(2, additions)].has_overlapping_areas()
|
||||
|
||||
|
||||
func setId(newID):
|
||||
id = newID
|
||||
|
||||
func setType(newType):
|
||||
type = newType
|
||||
|
||||
func _on_stop_timer_timeout() -> void:
|
||||
if isCollidingBOTTOM():
|
||||
$Tests.queue_free()
|
||||
for i in Positions:
|
||||
Positions[i].queue_free()
|
||||
stopped = true
|
||||
Loading…
Add table
Add a link
Reference in a new issue