🎉
This commit is contained in:
commit
94bfe2754e
107 changed files with 2557 additions and 0 deletions
65
GameGrid.gd
Normal file
65
GameGrid.gd
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
extends Node2D
|
||||
class_name GameGrid
|
||||
|
||||
var grid_content: Dictionary = {}
|
||||
@onready var tile_map: TileMapLayer = get_tree().root.get_node("Node2D/TileMap")
|
||||
|
||||
func _ready():
|
||||
var belt1 = preload("res://ConveyorBelt.tscn").instantiate()
|
||||
place_building(belt1, Vector2i(0, 0), Vector2i.RIGHT)
|
||||
|
||||
var belt2 = preload("res://ConveyorBelt.tscn").instantiate()
|
||||
place_building(belt2, Vector2i(1, 0), Vector2i.RIGHT)
|
||||
|
||||
var belt4 = preload("res://ConveyorBelt.tscn").instantiate()
|
||||
place_building(belt4, Vector2i(3, 0), Vector2i.RIGHT)
|
||||
|
||||
var belt3 = preload("res://ConveyorBelt.tscn").instantiate()
|
||||
place_building(belt3, Vector2i(2, 0), Vector2i.RIGHT)
|
||||
|
||||
var spawner = preload("res://ItemSpawner.tscn").instantiate()
|
||||
spawner.modulate = Color.RED
|
||||
place_building(spawner, Vector2i(0, -1), Vector2i.DOWN)
|
||||
|
||||
var spawner2 = preload("res://ItemSpawner.tscn").instantiate()
|
||||
spawner2.modulate = Color.YELLOW
|
||||
place_building(spawner2, Vector2i(0, 1), Vector2i.UP)
|
||||
|
||||
var sink = preload("res://ItemSink.tscn").instantiate()
|
||||
place_building(sink, Vector2i(2, 1))
|
||||
|
||||
func get_content_at_grid(grid_pos: Vector2i) -> Building:
|
||||
return grid_content.get(grid_pos, null)
|
||||
|
||||
func place_building(building_node: Building, grid_pos: Vector2i, direction: Vector2i = Vector2i.ZERO) -> bool:
|
||||
if grid_content.has(grid_pos) and grid_content[grid_pos] != null:
|
||||
print("grid_pos at %s not free." % grid_pos)
|
||||
building_node.queue_free()
|
||||
return false
|
||||
|
||||
# Internal setter
|
||||
building_node.current_grid_pos = grid_pos
|
||||
building_node.direction = direction
|
||||
|
||||
var world_center = tile_map.map_to_local(grid_pos) + (Vector2.ONE * tile_map.rendering_quadrant_size) / 2
|
||||
building_node.position = world_center
|
||||
add_child(building_node)
|
||||
grid_content[grid_pos] = building_node
|
||||
print("placed %s at %s" % [building_node.name, grid_pos])
|
||||
return true
|
||||
|
||||
func remove_building(grid_pos: Vector2i) -> bool:
|
||||
if grid_content.has(grid_pos):
|
||||
var building_to_remove = grid_content[grid_pos]
|
||||
grid_content.erase(grid_pos)
|
||||
|
||||
if building_to_remove is ConveyorBelt and not building_to_remove.items_on_belt.is_empty():
|
||||
for item_data in building_to_remove.items_on_belt:
|
||||
item_data.item.queue_free()
|
||||
|
||||
building_to_remove.queue_free()
|
||||
print("removed building from %s" % grid_pos)
|
||||
return true
|
||||
|
||||
print("no building to remove at %s" % grid_pos)
|
||||
return false
|
||||
Loading…
Add table
Add a link
Reference in a new issue