Files
hank/hank-godot/scripts/Alt.gd
Nat Quayle Nelson b0a3c0b3d9
Some checks failed
/ test (push) Failing after 41s
Make hank work in GDScript
2025-10-30 21:42:19 -05:00

107 lines
2.6 KiB
GDScript

class_name Alt
static var behaviorMap: Array[Variant] = []
var behavior: AltBehavior.AltBehavior
var outputs: Array[Output]
func _init(behavior2: AltBehavior.AltBehavior, outputs2: Array[Output]) -> void:
self.behavior = behavior2
self.outputs = outputs2
static func parse(buffer: HankBuffer) -> Variant:
var rawExpr: String = Extensions.unwrap(buffer.findNestedExpression("{", "}", 0, true)).checkValue()
var tempString
if true:
var s: String = rawExpr.substr(1, rawExpr.length() - 2)
var l: int = s.length()
var r: int = 0
while (r < l && StringTools.isSpace(s, r)):
r += 1
if (r > 0):
tempString = s.substr(r, l - r)
else:
tempString = s
var expr: String = tempString
if (behaviorMap.size() == 0):
behaviorMap.push_back({
"key": ">",
"value": AltBehavior.AltBehavior.Sequence
})
behaviorMap.push_back({
"key": "!",
"value": AltBehavior.AltBehavior.OnceOnly
})
behaviorMap.push_back({
"key": "&",
"value": AltBehavior.AltBehavior.Cycle
})
behaviorMap.push_back({
"key": "%",
"value": AltBehavior.AltBehavior.Shuffle
})
behaviorMap.push_back({
"key": "sequence:",
"value": AltBehavior.AltBehavior.Sequence
})
behaviorMap.push_back({
"key": "once:",
"value": AltBehavior.AltBehavior.OnceOnly
})
behaviorMap.push_back({
"key": "cycle:",
"value": AltBehavior.AltBehavior.Cycle
})
behaviorMap.push_back({
"key": "shuffle:",
"value": AltBehavior.AltBehavior.Shuffle
})
var behavior2: AltBehavior.AltBehavior = AltBehavior.AltBehavior.Sequence
if true:
var _g: int = 0
var _g1: Array[Variant] = behaviorMap
while (_g < _g1.size()):
var prefix: Variant = _g1[_g]
_g += 1
if (StringTools.startsWith(expr, prefix.get("key"))):
expr = StringTools.trim(expr.substr(prefix.get("key").length()))
behavior2 = prefix.get("value")
break
var outputsBuffer: HankBuffer = HankBuffer.Dummy(expr)
var eachOutputExpr: Array[String] = outputsBuffer.rootSplit("|")
if (eachOutputExpr.size() == 1):
return { "_index": 1 }
var tempArray
if true:
var _g: Array[Output] = ([] as Array[Output])
if true:
var _g1: int = 0
while (_g1 < eachOutputExpr.size()):
var outputExpr: String = eachOutputExpr[_g1]
_g1 += 1
var tempString1
if true:
var l: int = outputExpr.length()
var r: int = 0
while (r < l && StringTools.isSpace(outputExpr, r)):
r += 1
if (r > 0):
tempString1 = outputExpr.substr(r, l - r)
else:
tempString1 = outputExpr
_g.push_back(Output.parse(HankBuffer.Dummy(tempString1), true))
tempArray = _g
buffer.take(rawExpr.length())
return { "_index": 0, "v": Alt.new(behavior2, tempArray) }