small racing game im working on
Diffstat (limited to 'ui/mc-ls.gd')
-rw-r--r--ui/mc-ls.gd53
1 files changed, 53 insertions, 0 deletions
diff --git a/ui/mc-ls.gd b/ui/mc-ls.gd
new file mode 100644
index 0000000..417db4e
--- /dev/null
+++ b/ui/mc-ls.gd
@@ -0,0 +1,53 @@
+extends VBoxContainer
+
+var players: Dictionary = {}
+var pictures: Dictionary = {}
+
+@export var ls: LabelSettings
+@export var pad: Texture2D
+@export var kbd: Texture2D
+
+func on_change() -> void:
+ var ks := pictures.keys()
+ for i in pictures.size():
+ (pictures[ks[i]].get_child(0) as Label).text = str(i + 1)
+
+func _input(event: InputEvent) -> void:
+ if not event.is_pressed():
+ return
+ if event.is_action("ui_cancel") and players.has(event.device):
+ players.erase(event.device)
+ var t := get_tree().create_tween().set_ease(Tween.EASE_IN_OUT).set_trans(Tween.TRANS_BACK)
+ var p: TextureRect = pictures[event.device]
+ pictures.erase(event.device)
+ var gp := p.global_position
+ remove_child(p) # move out to free space
+ owner.add_child(p)
+ p.global_position = gp
+ t.tween_property(p, ^"position", Vector2(-130, p.position.y), .3)
+ t.tween_callback(p.queue_free)
+ on_change()
+ elif good(event) and !players.has(event.device):
+ pictures[event.device] = maketex(pad if event is InputEventJoypadButton else kbd)
+ players[event.device] = true
+ on_change()
+
+func good(e: InputEvent) -> bool:
+ var bads := [InputEventJoypadMotion, InputEventMIDI, InputEventMouseButton, InputEventMouseMotion, InputEventScreenTouch, InputEventScreenDrag, InputEventGesture]
+ for bad in bads:
+ if e == bad:
+ return false
+ return true
+
+func maketex(t: Texture2D) -> TextureRect:
+ @warning_ignore("shadowed_variable_base_class")
+ var tr := TextureRect.new()
+ tr.texture = t
+ tr.expand_mode = TextureRect.EXPAND_KEEP_SIZE
+ tr.stretch_mode = TextureRect.STRETCH_KEEP
+ var l := Label.new()
+ l.label_settings = ls
+ l.position.x = 100
+ tr.add_child(l)
+ add_child(tr)
+ return tr