factory-expansion/logic/world/world.gd

53 lines
1.3 KiB
GDScript

extends Node
class_name World
var chunks : Dictionary[Vector2i, Chunk]
var tps = 1
var update_timer = 0
signal updated(chunk : Chunk)
func get_chunk_at(position : Vector2i) -> Chunk:
if chunks.has(position): return chunks[position]
var new_chunk : Chunk = Chunk.new(position)
chunks[position] = new_chunk
return new_chunk
func tile_pos_to_chunk_pos(position : Vector2i) -> Vector2i:
return floor(Vector2(position) / TileGlobals.chunk_size)
func _ready() -> void:
pass
func set_tile(position : Vector2i, tile_id : int):
var chunk_position : Vector2i = tile_pos_to_chunk_pos(position)
var position_in_chunk = position - chunk_position * TileGlobals.chunk_size
var chunk : Chunk = get_chunk_at(chunk_position)
chunk.set_tile(position_in_chunk, tile_id)
updated.emit(chunk)
func add_item(position : Vector2i, item : Item):
var chunk_position : Vector2i = tile_pos_to_chunk_pos(position)
var position_in_chunk = position - chunk_position * TileGlobals.chunk_size
var chunk : Chunk = get_chunk_at(chunk_position)
func global_position_to_tile(position : Vector2) -> Vector2i:
return Vector2i(floor(position/TileGlobals.tile_size))
func update_chunks():
for chunk in chunks.values():
if chunk.update():
updated.emit(chunk)
func _process(delta):
update_timer -= delta
if update_timer <= 0:
update_timer = 1/tps
update_chunks()