extends Node2D @export var world : World @onready var object_shadow = $"Object Shadow" var direction : Vector2i = Vector2i(1, 0) func _input(event: InputEvent) -> void: if event is InputEventMouseButton: if event.button_index == MOUSE_BUTTON_LEFT and event.pressed: var tile_position : Vector2i = world.global_position_to_tile(get_global_mouse_position()) var chunk_position : Vector2i = world.tile_pos_to_chunk_pos(tile_position) var position_in_chunk : Vector2i = tile_position - chunk_position * TileGlobals.chunk_size var chunk : Chunk = world.get_chunk_at(chunk_position) var new_arrow : Arrow = Arrow.new(direction) chunk.arrows[position_in_chunk] = new_arrow chunk.recalculate() world.updated.emit(chunk) elif event.button_index == MOUSE_BUTTON_RIGHT and event.pressed: var tile_position : Vector2i = world.global_position_to_tile(get_global_mouse_position()) var chunk_position : Vector2i = world.tile_pos_to_chunk_pos(tile_position) var position_in_chunk : Vector2i = tile_position - chunk_position * TileGlobals.chunk_size var chunk : Chunk = world.get_chunk_at(chunk_position) chunk.arrows.erase(position_in_chunk) chunk.recalculate() world.updated.emit(chunk) elif event.is_action_pressed("rotate_right"): direction = rotate_vector2i(direction) elif event.is_action_pressed("rotate_left"): direction = rotate_vector2i(direction, true) func rotate_vector2i(vector : Vector2i, counter_clockwise : bool = false) -> Vector2i: if counter_clockwise: return Vector2i(1,-1) * Vector2i(vector.y, vector.x) return Vector2i(-1,1) * Vector2i(vector.y, vector.x) func _ready(): object_shadow.z_index = 1 object_shadow.texture = ImageTexture.create_from_image(preload("res://resources/misc/arrows.png").get_layer_data(0)) func _process(delta: float) -> void: var tile_size = Vector2(TileGlobals.tile_size, TileGlobals.tile_size) var object_shadow_position = (get_global_mouse_position() - tile_size/2).snapped(tile_size) + tile_size/2 object_shadow.global_position = object_shadow_position object_shadow.look_at(object_shadow.global_position + Vector2(direction))