111 lines
2.5 KiB
GDScript
111 lines
2.5 KiB
GDScript
extends RigidBody2D
|
|
|
|
onready var pickUpArea = $PickUpArea
|
|
onready var collision = $PhysicsCollision
|
|
export var guestName = "Dieter"
|
|
export var PICKUPTRESHOLD = 100
|
|
export var destinationColor = Color.yellow
|
|
var pickup_time
|
|
|
|
signal picked_up(color,name)
|
|
signal dropped_off_success
|
|
signal dropped_off_idle
|
|
signal dropped_off_fail
|
|
|
|
var rng = RandomNumberGenerator.new()
|
|
onready var exclusionZoneShape = $ExclusionZone/CollisionShape2D
|
|
var sprite
|
|
|
|
var delivered
|
|
|
|
enum states {
|
|
waiting,
|
|
tethered
|
|
}
|
|
var colorList = [
|
|
Color.yellow,
|
|
Color.violet,
|
|
Color.red,
|
|
Color.turquoise,
|
|
Color.orange
|
|
]
|
|
var names = [
|
|
'Dieter',
|
|
'Peter',
|
|
'Gabi',
|
|
'Ursula',
|
|
'Manni',
|
|
'Karl',
|
|
'Christa',
|
|
'Britta'
|
|
]
|
|
var currentState = states.waiting
|
|
|
|
var follow_node = null
|
|
var follow_pos = global_position
|
|
|
|
func _physics_process(delta):
|
|
#linear_velocity = linear_velocity.clamped(100)
|
|
if currentState == states.waiting:
|
|
linear_velocity.move_toward(Vector2.ZERO,5.0)
|
|
collision.disabled = false
|
|
|
|
elif currentState == states.tethered:
|
|
collision.disabled = true
|
|
mode = RigidBody2D.MODE_STATIC
|
|
var rot_dir = get_angle_to(follow_pos)
|
|
rotation += (rot_dir)
|
|
var distance = follow_pos.distance_to(global_position)
|
|
global_position = (follow_node.global_position)
|
|
pass
|
|
|
|
func _process(delta):
|
|
if delivered != null and OS.get_system_time_msecs() - delivered > 10000:
|
|
queue_free()
|
|
if visible == false:
|
|
follow_node = self
|
|
delivered = OS.get_system_time_msecs()
|
|
if follow_node != null:
|
|
if follow_node.visible == false:
|
|
follow_node = self
|
|
if follow_node == self:
|
|
currentState = states.waiting
|
|
else:
|
|
currentState = states.tethered
|
|
follow_pos = follow_node.global_position
|
|
else:
|
|
currentState = states.waiting
|
|
follow_pos = global_position
|
|
|
|
func _ready():
|
|
rng.randomize()
|
|
var spriteNum = rng.randi_range(0,100)
|
|
if spriteNum % 2 == 0:
|
|
$SpriteMarkus.visible = true
|
|
sprite = $SpriteMarkus
|
|
if spriteNum % 2 != 0:
|
|
$SpriteSam.visible = true
|
|
sprite = $SpriteSam
|
|
var n = rng.randi_range(0,4)
|
|
destinationColor = colorList[n]
|
|
sprite.modulate = destinationColor
|
|
var m = rng.randi_range(0,names.size()-1)
|
|
guestName = names[m]
|
|
|
|
func _on_PickUpArea_body_entered(body):
|
|
print(body.name)
|
|
if body.name == "Playa":
|
|
pickup_time = OS.get_system_time_msecs()
|
|
emit_signal("picked_up",destinationColor,guestName)
|
|
# start pickup process
|
|
# we are being picked up by the player
|
|
pass
|
|
|
|
func _on_PickUpArea_area_entered(area):
|
|
if area.name == "DROPOFF":
|
|
if area.destinationColor == destinationColor:
|
|
emit_signal("dropped_off_success")
|
|
else:
|
|
emit_signal("dropped_off_fail")
|
|
|