55 lines
2.1 KiB
GDScript
55 lines
2.1 KiB
GDScript
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))
|