Initial project sync
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
class_name ActionPatternExporter
|
||||
extends RefCounted
|
||||
|
||||
const ACTION_DIR := "res://resources/actions"
|
||||
|
||||
|
||||
static func export_patterns(action_dir := ACTION_DIR) -> Dictionary:
|
||||
var patterns := {}
|
||||
_collect_patterns(action_dir, patterns)
|
||||
return patterns
|
||||
|
||||
|
||||
static func to_text(action_dir := ACTION_DIR) -> String:
|
||||
var patterns := export_patterns(action_dir)
|
||||
var keys := patterns.keys()
|
||||
keys.sort()
|
||||
var lines: Array[String] = []
|
||||
for key: String in keys:
|
||||
lines.append("%s -> %s" % [key, patterns[key]])
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
static func _collect_patterns(action_dir: String, patterns: Dictionary) -> void:
|
||||
var dir := DirAccess.open(action_dir)
|
||||
if dir == null:
|
||||
return
|
||||
var subdirs := dir.get_directories()
|
||||
subdirs.sort()
|
||||
for subdir: String in subdirs:
|
||||
_collect_patterns("%s/%s" % [action_dir, subdir], patterns)
|
||||
var files := dir.get_files()
|
||||
files.sort()
|
||||
for file_name: String in files:
|
||||
if not file_name.ends_with(".tres"):
|
||||
continue
|
||||
var action: Resource = load("%s/%s" % [action_dir, file_name])
|
||||
if action == null:
|
||||
continue
|
||||
if _is_air_only_action(action):
|
||||
continue
|
||||
var key := _pattern_key(action.get("input_pattern"))
|
||||
if key.is_empty():
|
||||
continue
|
||||
patterns[key] = StringName(str(action.get("id")))
|
||||
|
||||
|
||||
static func _pattern_key(pattern: Variant) -> String:
|
||||
if not pattern is Array:
|
||||
return ""
|
||||
var key := ""
|
||||
for symbol: Variant in pattern:
|
||||
key += str(symbol)
|
||||
return key.replace(" ", "").to_upper()
|
||||
|
||||
|
||||
static func _is_air_only_action(action: Resource) -> bool:
|
||||
var states = action.get("allowed_ground_states")
|
||||
return states is Array and states.size() == 1 and states[0] == &"Airborne"
|
||||
Reference in New Issue
Block a user