62 lines
2.0 KiB
GDScript
62 lines
2.0 KiB
GDScript
class_name OverrideParser extends Node
|
|
|
|
func parse_overrides(source:String,users:Array[UserInfo],user_groups:Array[GroupInfo]) -> Array[OverrideItemGroup]:
|
|
var splits:PackedStringArray = source.split("\n")
|
|
print("parsing with ",splits)
|
|
var current_info:LoadoutOverrideInfo
|
|
var infos:Array[LoadoutOverrideInfo]
|
|
for line in splits:
|
|
if line.begins_with("CLASS: "):
|
|
var new_item:LoadoutOverrideInfo = LoadoutOverrideInfo.new()
|
|
new_item.class_path = line.replace("CLASS: ","")
|
|
current_info = new_item
|
|
continue
|
|
if line.begins_with("SLOT: "):
|
|
var slot:String = line.replace("SLOT: ","")
|
|
current_info.slot = slot
|
|
continue
|
|
if line.begins_with("ITEM: "):
|
|
var item:String = line.replace("ITEM: ","")
|
|
current_info.item_path = item
|
|
continue
|
|
if line.begins_with("PLAYERS: "):
|
|
var players_raw:String = line.replace("PLAYERS: ","")
|
|
var players:PackedStringArray = players_raw.split(",")
|
|
for player in players:
|
|
if player.begins_with("@"):
|
|
var user_group_name:String = player.replace("@","")
|
|
var found:bool = false
|
|
for group in user_groups:
|
|
if group.name == user_group_name:
|
|
current_info.groups.append(group)
|
|
found = true
|
|
break
|
|
if !found:
|
|
push_error("didnt find group ",user_group_name)
|
|
else:
|
|
var user_name:String = player
|
|
var found:bool = false
|
|
for user in users:
|
|
if user.name == user_name:
|
|
current_info.users.append(user)
|
|
found = true
|
|
break
|
|
if !found:
|
|
push_warning("didnt find user ",user_name)
|
|
if line.begins_with("TAG: "):
|
|
current_info.tag = line.replace("TAG: ","")
|
|
infos.append(current_info)
|
|
current_info = null
|
|
var groups:Array[OverrideItemGroup] = []
|
|
for info in infos:
|
|
var exists:bool = false
|
|
for group in groups:
|
|
if group.name == info.tag:
|
|
exists = true
|
|
group.children.append(info)
|
|
if !exists:
|
|
var new_group:OverrideItemGroup = OverrideItemGroup.new()
|
|
new_group.name = info.tag
|
|
groups.append(new_group)
|
|
return groups
|