GodotComponentTest/entities/PlayerEntity.gd

69 lines
1.8 KiB
GDScript
Raw Normal View History

2022-09-21 14:09:31 +02:00
extends KinematicBody
2022-08-17 00:50:30 +02:00
2022-08-20 14:36:17 +02:00
onready var color_component = $Color
onready var tinted_sprite_component = $TintedSprite
onready var clickable_component = $Clickable
onready var movable_component = $Movable
onready var collision_component = $Collision
2022-08-17 00:50:30 +02:00
onready var is_active = false
2022-08-20 14:36:17 +02:00
2022-08-17 00:50:30 +02:00
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")
2022-08-19 18:48:54 +02:00
if movable_component:
movable_component.connect("position_updated", self, "_on_position_updated")
movable_component.target = self.transform.origin
movable_component.pos = self.transform.origin
2022-08-17 00:50:30 +02:00
2022-08-19 19:13:39 +02:00
2022-10-08 14:14:20 +02:00
func _process(_delta):
2022-08-17 00:50:30 +02:00
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
2022-08-19 19:13:39 +02:00
2022-10-08 14:14:20 +02:00
func _physics_process(_delta):
2022-08-20 00:18:16 +02:00
if not collision_component:
return
if movable_component and collision_component:
2022-08-20 14:36:17 +02:00
if movable_component.vel.length_squared() < 0.001:
2022-08-20 00:18:16 +02:00
return
2022-08-20 14:36:17 +02:00
var physics_velocity = move_and_slide(movable_component.vel)
movable_component.vel = physics_velocity
2022-08-20 00:18:16 +02:00
2022-08-17 00:50:30 +02:00
func _on_entity_clicked():
is_active = not is_active
2022-08-19 18:48:54 +02:00
2022-08-19 19:13:39 +02:00
2022-08-19 18:48:54 +02:00
func _on_position_updated(new_position):
2022-08-20 00:18:16 +02:00
if not collision_component:
transform.origin = new_position
2022-08-19 19:13:39 +02:00
2022-09-21 14:09:31 +02:00
func set_movable_target(target):
if not movable_component == null:
movable_component.target = target
2022-11-20 20:13:42 +01:00
2022-09-21 14:09:31 +02:00
func _unhandled_input_disabled(event):
print ("Player unhandled input...")
2022-08-19 19:13:39 +02:00
if event is InputEventMouseButton and event.pressed:
assert(movable_component)
2022-08-20 14:36:17 +02:00
movable_component.target = event.position