extends Node2D onready var color_component = $Components/Color onready var tinted_sprite_component = $Components/TintedSprite onready var clickable_component = $Components/Clickable onready var movable_component = $Components/Movable onready var collision_component = $Components/Collision onready var is_active = false # Called when the node enters the scene tree for the first time. func _ready(): if color_component and tinted_sprite_component: print ("Connecting signals") color_component.connect("color_changed", tinted_sprite_component, "set_color_tint") if clickable_component: clickable_component.connect("clicked", self, "_on_entity_clicked") if movable_component: movable_component.connect("position_updated", self, "_on_position_updated") movable_component.target = self.transform.origin movable_component.pos = self.transform.origin if collision_component: collision_component.transform.origin = self.transform.origin func _process(delta): if is_active and color_component: var color = Color( (sin(float(OS.get_system_time_msecs()) / 1000.0) + 1.0) / 2.0, (sin(float(OS.get_system_time_msecs()) / 300.0) + 1.0) / 2.0, (sin(float(OS.get_system_time_msecs()) / 100.0) + 1.0) / 2.0 ) color_component.set_color(color) pass func _physics_process(delta): if not collision_component: return if movable_component and collision_component: var target_position = movable_component.pos * 0.5 var translation = (target_position - transform.origin) if translation.length_squared() < 0.001: return var target_velocity = translation / delta var physics_velocity = collision_component.move_and_slide(target_velocity) print ("targ pos: " + str(target_position)) print ("comp pos: " + str(collision_component.transform.origin)) print ("self pos: " + str(transform.origin)) transform.origin = collision_component.transform.origin func _on_entity_clicked(): is_active = not is_active func _on_position_updated(new_position): if not collision_component: transform.origin = new_position update() func ScreenToWorld(pos: Vector2, camera: Camera): # pos = pos - OS.get_window_safe_area().size * 0.5 # pos = pos - get_viewport().size * 0.5 var project_size = Vector2( ProjectSettings.get_setting("display/window/size/width"), ProjectSettings.get_setting("display/window/size/height") ) var window_size = OS.get_window_safe_area().size var zoom_scale = window_size.x / window_size.x pos = pos return pos func _unhandled_input(event): if event is InputEventMouseButton and event.pressed: assert(movable_component) var world_pos = ScreenToWorld(event.position, get_viewport().get_camera()) movable_component.target = world_pos