update
This commit is contained in:
@@ -1,11 +1,12 @@
|
||||
class_name BattleGamepad
|
||||
extends RefCounted
|
||||
## Gamepad-Steuerung des Kampfes: Steuerkreuz bewegt einen Zeiger über Hand, eigene Wesen und Ziele,
|
||||
## A bestätigt, B bricht ab, Start beendet den Zug, Y überspringt Gegnerzüge, X macht rückgängig.
|
||||
## Gamepad-Steuerung des Kampfes: Steuerkreuz bewegt einen Zeiger über Laden, Hand, eigene Wesen
|
||||
## und Ziele, A bestätigt, B bricht ab, Start beendet den Zug, Y überspringt Gegnerzüge,
|
||||
## X macht rückgängig.
|
||||
|
||||
var screen # BattleScreen
|
||||
var active := false
|
||||
var zone := "hand"
|
||||
var zone := "shop"
|
||||
var index := 0
|
||||
var targets: Array = []
|
||||
|
||||
@@ -26,7 +27,7 @@ func button(button: int) -> void:
|
||||
if screen.confirm.visible:
|
||||
screen.confirm.visible = false
|
||||
screen.cancel_all()
|
||||
zone = "hand"
|
||||
zone = "shop"
|
||||
JOY_BUTTON_Y:
|
||||
if screen.b_skip.visible:
|
||||
screen.skip_ai = true
|
||||
@@ -41,16 +42,35 @@ func button(button: int) -> void:
|
||||
move(1)
|
||||
JOY_BUTTON_DPAD_UP, JOY_BUTTON_DPAD_DOWN:
|
||||
if zone != "target":
|
||||
zone = "own" if zone == "hand" else "hand"
|
||||
index = 0
|
||||
_next_zone(1 if button == JOY_BUTTON_DPAD_DOWN else -1)
|
||||
screen.refresh()
|
||||
|
||||
|
||||
## Wechselt den Bereich und überspringt leere (eine leere Hand ist keine Station).
|
||||
## step 0: beim aktuellen Bereich bleiben, falls er etwas enthält.
|
||||
func _next_zone(step: int) -> void:
|
||||
var order := ["shop", "hand", "own"]
|
||||
var at := order.find(zone)
|
||||
index = 0
|
||||
if step == 0 and not items().is_empty():
|
||||
return
|
||||
var dir := -1 if step < 0 else 1
|
||||
for i in order.size():
|
||||
at = posmod(at + dir, order.size())
|
||||
zone = order[at]
|
||||
if not items().is_empty():
|
||||
return
|
||||
|
||||
|
||||
func items() -> Array:
|
||||
match zone:
|
||||
"shop":
|
||||
return screen.shop_views
|
||||
"hand":
|
||||
return screen.hand_views
|
||||
"own":
|
||||
if screen.fusing: # zum Verschmelzen zählt jedes eigene Wesen, nicht nur angriffsbereite
|
||||
return screen.own_views
|
||||
return screen.own_views.filter(func(v): return v.creature.can_attack())
|
||||
"target":
|
||||
return targets
|
||||
@@ -64,9 +84,6 @@ func move(dir: int) -> void:
|
||||
|
||||
|
||||
func confirm() -> void:
|
||||
if screen.mulligan.visible:
|
||||
screen.do_mulligan([])
|
||||
return
|
||||
if screen.overlay.visible:
|
||||
screen.leave()
|
||||
return
|
||||
@@ -78,6 +95,8 @@ func confirm() -> void:
|
||||
index = clampi(index, 0, items.size() - 1)
|
||||
var item = items[index]
|
||||
match zone:
|
||||
"shop":
|
||||
screen.on_click("shop", int(item.get_meta("slot", 0)))
|
||||
"hand":
|
||||
screen.on_click("hand", item.card)
|
||||
if screen.pending != null:
|
||||
@@ -113,8 +132,8 @@ func confirm() -> void:
|
||||
for o in screen.hero_panels:
|
||||
if screen.hero_panels[o] == item:
|
||||
screen.on_click("hero", o)
|
||||
zone = "hand"
|
||||
index = 0
|
||||
zone = "own"
|
||||
_next_zone(0)
|
||||
|
||||
|
||||
## Pulsierender Rahmen als Zeiger.
|
||||
|
||||
Reference in New Issue
Block a user