Conveyor sideloading

This commit is contained in:
Rendo 2025-10-14 23:54:09 +05:00
commit 81451bd356
14 changed files with 243 additions and 17 deletions

View file

@ -1,20 +1,65 @@
extends Node2D
@onready var inventory : ConveyorInventory = get_parent().inventory
@onready var parent_structure : Structure = get_parent()
@onready var inventory : ConveyorInventory = parent_structure.inventory
@onready var animator : AnimationPlayer = $"../AnimationPlayer"
func _ready() -> void:
sync_animations.call_deferred()
func sync_animations() -> void:
animator.seek(ConveyorManager.sync_time,true)
func _draw() -> void:
for i in range(inventory.capacity):
if inventory.internal_array[i].amount > 0:
var calculated_position = Vector2(-8,0)+Vector2(16/inventory.capacity*i+16/inventory.capacity*inventory.progress_array[i],0)
draw_texture(inventory.internal_array[i].held_item.preview,calculated_position - inventory.internal_array[i].held_item.preview.get_size()/2.0)
var calculated_position = calculate_position(i) - inventory.internal_array[i].held_item.preview.get_size()/2.0
draw_texture(inventory.internal_array[i].held_item.preview,calculated_position)
func _process(delta: float) -> void:
inventory.advance(delta)
queue_redraw()
var right : Structure = get_parent().get_relative(Vector2.RIGHT)
if right == null or right.inventory.can_add() == false:
var next : Structure = get_next()
if next == null or next.inventory.can_add_from_side(Globals.facing_difference(next.facing,parent_structure.facing)) == false:
return
var popped = inventory.pop()
if popped == null:
return
right.inventory.add(popped)
next.inventory.add_from_side(popped,Globals.facing_difference(next.facing,parent_structure.facing))
func calculate_position(index: int) -> Vector2:
var indexed_part = 16.0 / inventory.capacity
match parent_structure.facing:
Structure.Facing.RIGHT:
return Vector2.LEFT*8 + Vector2.RIGHT * indexed_part * (index + inventory.progress_array[index])
Structure.Facing.DOWN:
return Vector2.UP*8 + Vector2.DOWN * indexed_part * (index + inventory.progress_array[index])
Structure.Facing.LEFT:
return Vector2.RIGHT*8 + Vector2.LEFT * indexed_part * (index + inventory.progress_array[index])
Structure.Facing.UP:
return Vector2.DOWN*8 + Vector2.UP * indexed_part * (index + inventory.progress_array[index])
return Vector2.ZERO
func get_next() -> Structure:
match parent_structure.facing:
Structure.Facing.RIGHT:
return parent_structure.get_relative(Vector2(1,0))
Structure.Facing.DOWN:
return parent_structure.get_relative(Vector2(0,1))
Structure.Facing.LEFT:
return parent_structure.get_relative(Vector2(-1,0))
Structure.Facing.UP:
return parent_structure.get_relative(Vector2(0,-1))
return null
func _on_conveyor_switched_facing(to: Structure.Facing) -> void:
match to:
Structure.Facing.RIGHT:
animator.play("right")
Structure.Facing.DOWN:
animator.play("down")
Structure.Facing.LEFT:
animator.play("left")
Structure.Facing.UP:
animator.play("up")
sync_animations()