Aetheria/Aetheria.State.Unity/AetheriaRuntimeCatalogSnapshotMapper.cs
2026-06-14 07:20:06 +01:00

165 lines
5.6 KiB
C#

using Aetheria.State.Documents;
using GameCult.Aetheria.State.Unity;
namespace Aetheria.State.Unity;
internal static class AetheriaRuntimeCatalogSnapshotMapper
{
public static AetheriaRuntimeCatalogSnapshot FromCatalog(AetheriaCatalogSnapshot catalog)
{
return new AetheriaRuntimeCatalogSnapshot(
catalog.Items.Select(FromState).ToArray(),
catalog.Corporations.Select(FromState).ToArray(),
catalog.NameFiles.Select(FromState).ToArray());
}
private static AetheriaRuntimeCatalogItem FromState(AetheriaItemDefinition item)
{
return new AetheriaRuntimeCatalogItem(
item.LegacyId,
item.Name,
item.Category,
item.Description,
item.ManufacturerLegacyId,
item.Price,
item.Mass,
item.SpecificHeat,
item.Conductivity,
item.Volume,
item.ShapeWidth,
item.ShapeHeight,
item.OccupiedCells,
item.ShapeCells.Select(FromState).ToArray(),
item.InteriorShapeWidth,
item.InteriorShapeHeight,
item.InteriorOccupiedCells,
item.InteriorShapeCells.Select(FromState).ToArray(),
item.Hardpoints.Select(FromState).ToArray(),
item.BehaviorPayloads.Select(FromState).ToArray(),
item.HardpointType,
item.HullType,
item.BehaviorKinds,
item.MaxStack,
item.Stackable,
item.Duration,
item.Durability,
item.WeaponRange,
item.WeaponCaliber,
item.WeaponType,
item.WeaponFireTypes,
item.WeaponModifiers,
item.MinimumTemperature,
item.MaximumTemperature,
item.ThermalPerformanceCurveKeys.Select(FromState).ToArray(),
item.HullPrefab,
item.ThermalResilience,
item.HullGridOffset,
item.HullArmor,
item.HullDrag,
item.HullCanTow,
item.DockingMaxSizeX,
item.DockingMaxSizeY,
item.ActionBarIcon,
item.AudioStats.Select(FromState).ToArray(),
item.EffectivenessCurveKeys.Select(FromState).ToArray(),
item.SimpleCommodityCategory,
item.CompoundCommodityCategory);
}
private static AetheriaRuntimeAudioStat FromState(AetheriaItemAudioStat stat)
{
return new AetheriaRuntimeAudioStat(stat.Parameter, FromState(stat.Stat));
}
private static AetheriaRuntimePerformanceStat FromState(AetheriaItemPerformanceStat stat)
{
return new AetheriaRuntimePerformanceStat(
stat.Min,
stat.Max,
stat.HeatExponentMultiplier,
stat.DurabilityExponentMultiplier,
stat.QualityExponent);
}
private static AetheriaRuntimeShapeCell FromState(AetheriaShapeCell cell)
{
return new AetheriaRuntimeShapeCell(cell.X, cell.Y);
}
private static AetheriaRuntimeCurveKey FromState(AetheriaCurveKey key)
{
return new AetheriaRuntimeCurveKey(key.Time, key.Value, key.InTangent, key.OutTangent);
}
private static AetheriaRuntimeBehaviorPayload FromState(AetheriaBehaviorPayload payload)
{
return new AetheriaRuntimeBehaviorPayload(
payload.UnionKey,
payload.Kind,
payload.Group,
payload.Fields.Select(FromState).ToArray());
}
private static AetheriaRuntimeBehaviorField FromState(AetheriaBehaviorField field)
{
return new AetheriaRuntimeBehaviorField(field.Key, FromState(field.Value));
}
private static AetheriaRuntimeBehaviorMapEntry FromState(AetheriaBehaviorMapEntry entry)
{
return new AetheriaRuntimeBehaviorMapEntry(entry.Key, FromState(entry.Value));
}
private static AetheriaRuntimeBehaviorValue FromState(AetheriaBehaviorValue value)
{
return new AetheriaRuntimeBehaviorValue(
value.Kind,
value.StringValue,
value.NumberValue,
value.BoolValue,
value.LegacyIdValue,
value.Children.Select(FromState).ToArray(),
value.MapEntries.Select(FromState).ToArray());
}
private static AetheriaRuntimeHardpoint FromState(AetheriaItemHardpoint hardpoint)
{
return new AetheriaRuntimeHardpoint(
hardpoint.Type,
hardpoint.PositionX,
hardpoint.PositionY,
hardpoint.ShapeWidth,
hardpoint.ShapeHeight,
hardpoint.OccupiedCells,
hardpoint.ShapeCells.Select(FromState).ToArray(),
hardpoint.Transform,
hardpoint.Rotation,
hardpoint.Armor);
}
private static AetheriaRuntimeCorporation FromState(AetheriaCorporation corporation)
{
return new AetheriaRuntimeCorporation(
corporation.LegacyId,
corporation.Name,
corporation.ShortName,
corporation.Description,
corporation.GeonameFileLegacyId,
corporation.BossHullLegacyId,
corporation.InfluenceDistance,
corporation.AllegianceCount,
corporation.Allegiances.Select(allegiance => new AetheriaRuntimeCorporationAllegiance(
allegiance.CorporationLegacyId,
allegiance.Weight)).ToArray());
}
private static AetheriaRuntimeNameFile FromState(AetheriaNameFile nameFile)
{
return new AetheriaRuntimeNameFile(
nameFile.LegacyId,
nameFile.Name,
nameFile.NameCount,
nameFile.SampleNames,
nameFile.Names);
}
}