71 lines
2.1 KiB
GDScript
71 lines
2.1 KiB
GDScript
extends Node2D
|
|
|
|
class_name Item
|
|
|
|
var shape
|
|
var inventory_position : Vector2i
|
|
|
|
var draggable = true
|
|
|
|
var dragging = false
|
|
|
|
@export var connectors : Array[Connector]
|
|
|
|
var mouse_offset : Vector2
|
|
|
|
func _process(delta: float) -> void:
|
|
|
|
if Input.is_action_just_pressed("select") and Globals.selected_item == null:
|
|
var mouse_difference : Vector2 = get_global_mouse_position() - global_position + Vector2(len(shape[0])*Globals.tilesize/2,len(shape)*Globals.tilesize/2)
|
|
if mouse_difference.x > 0 and mouse_difference.y > 0 and mouse_difference.y < Globals.tilesize*len(shape) and mouse_difference.x < Globals.tilesize*len(shape[0]):
|
|
var shape_position : Vector2i = Vector2i(mouse_difference/Globals.tilesize)
|
|
if shape[shape_position.y][shape_position.x]:
|
|
dragging = true
|
|
Globals.selected_item = self
|
|
mouse_offset = -get_global_mouse_position() + global_position
|
|
if Input.is_action_just_released("select"):
|
|
dragging = false
|
|
Globals.set_deferred("selected_item", null)
|
|
|
|
if dragging:
|
|
global_position = get_global_mouse_position() + mouse_offset
|
|
|
|
if Input.is_action_just_pressed("rotate_c"):
|
|
rotate_shape()
|
|
if Input.is_action_just_pressed("rotate_cc"):
|
|
rotate_shape(true)
|
|
item_process(delta)
|
|
|
|
func item_process(delta : float) -> void:
|
|
pass
|
|
|
|
func get_head_position() -> Vector2:
|
|
var return_position = global_position
|
|
return_position -= Vector2(len(shape[0])-0.5,len(shape)-0.5) * Globals.tilesize / 2
|
|
|
|
return return_position
|
|
|
|
func rotate_shape(counter_clockwise : bool = false):
|
|
var new_arr = []
|
|
if !counter_clockwise:
|
|
for i in range(len(shape[0])):
|
|
var row = []
|
|
for j in range(len(shape)):
|
|
row.append(shape[len(shape) - j - 1][i])
|
|
new_arr.append(row)
|
|
rotation_degrees += 90
|
|
mouse_offset = Vector2(-mouse_offset.y,mouse_offset.x)
|
|
else:
|
|
for i in range(len(shape[0])):
|
|
var row = []
|
|
for j in range(len(shape)):
|
|
row.append(shape[j][len(shape[0])-i-1])
|
|
new_arr.append(row)
|
|
rotation_degrees -= 90
|
|
mouse_offset = Vector2(mouse_offset.y,-mouse_offset.x)
|
|
global_position = get_global_mouse_position() + mouse_offset
|
|
shape = new_arr
|
|
|
|
func move_away():
|
|
pass
|