knockoff/items/item.gd

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