Weapons; protected override void PopulateData(ParsedDataList data) { if (data.TryGetParsedData(0, out var weaponsData)) { EasyParser.ParseRowsData(weaponsData, Weapons, i => { var weapon = Weapons.Find(x => x.Id == weaponsData.GetString(i, 0)); if (weapon == null) { return null; } weapon.Name = weaponsData.GetString(i, 1); weapon.Damage = weaponsData.GetInt(i, 2); weapon.Range = weaponsData.GetFloat(i, 3); weapon.FireRate = weaponsData.GetFloat(i, 4); return weapon; }, true); } } }"> Weapons; protected override void PopulateData(ParsedDataList data) { if (data.TryGetParsedData(0, out var weaponsData)) { EasyParser.ParseRowsData(weaponsData, Weapons, i => { var weapon = Weapons.Find(x => x.Id == weaponsData.GetString(i, 0)); if (weapon == null) { return null; } weapon.Name = weaponsData.GetString(i, 1); weapon.Damage = weaponsData.GetInt(i, 2); weapon.Range = weaponsData.GetFloat(i, 3); weapon.FireRate = weaponsData.GetFloat(i, 4); return weapon; }, true); } } }"> Weapons; protected override void PopulateData(ParsedDataList data) { if (data.TryGetParsedData(0, out var weaponsData)) { EasyParser.ParseRowsData(weaponsData, Weapons, i => { var weapon = Weapons.Find(x => x.Id == weaponsData.GetString(i, 0)); if (weapon == null) { return null; } weapon.Name = weaponsData.GetString(i, 1); weapon.Damage = weaponsData.GetInt(i, 2); weapon.Range = weaponsData.GetFloat(i, 3); weapon.FireRate = weaponsData.GetFloat(i, 4); return weapon; }, true); } } }">
[CreateAssetMenu(menuName = "Create ParseInToSeparateObjects", fileName = "ParseInToSeparateObjects", order = 0)]
public class WeaponDatabase : ParsedScriptableObject
{
public List<WeaponData> Weapons;
protected override void PopulateData(ParsedDataList data)
{
if (data.TryGetParsedData(0, out var weaponsData))
{
EasyParser.ParseRowsData(weaponsData, Weapons, i =>
{
var weapon = Weapons.Find(x => x.Id == weaponsData.GetString(i, 0));
if (weapon == null)
{
return null;
}
weapon.Name = weaponsData.GetString(i, 1);
weapon.Damage = weaponsData.GetInt(i, 2);
weapon.Range = weaponsData.GetFloat(i, 3);
weapon.FireRate = weaponsData.GetFloat(i, 4);
return weapon;
}, true);
}
}
}
WeaponDatabase and CharactersDataBase ParsingThe key distinction between the parsing in WeaponDatabase and CharactersDataBase lies in data update logic and behavior for existing objects:
CharactersDataBase:
CharacterData objects for each row in the parsed data.playerDataList) with the parsed objects.WeaponDatabase:
Weapons list based on a unique Id (from the first column).Name, Damage, Range, FireRate) are updated.CharactersDataBase: Always replaces the entire list (playerDataList) with freshly parsed data.WeaponDatabase: Modifies the existing Weapons list, only updating objects already present.CharactersDataBase: Uses EasyParser.ParseRowsData to return a list of newly created objects.WeaponDatabase: Uses EasyParser.ParseRowsData with an existing list and a callback that finds and updates objects.WeaponDatabaseThe WeaponDatabase class is a specialized implementation of ParsedScriptableObject designed to manage and update weapon data within a Unity project. Unlike CharactersDataBase, which recreates its data list on each parse, this class works with an existing list of weapons (Weapons) and updates their properties based on parsed data.
WeaponsList<WeaponData>PopulateData(ParsedDataList data)protected overrideWeapons list based on parsed data.