107 lines
2.6 KiB
GDScript
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) }
|