void ProcessLoadout(Legacy.Solar.Loadout ld, GameData.SystemObject obj) { foreach (var key in ld.Equip.Keys) { var val = ld.Equip[key]; if (val == null) { continue; } GameData.Items.Equipment equip = GetEquipment(val); if (equip != null) { if (key.StartsWith("__noHardpoint", StringComparison.Ordinal)) { obj.LoadoutNoHardpoint.Add(equip); } else { if (!obj.Loadout.ContainsKey(key)) { obj.Loadout.Add(key, equip); } } } } }
public GameData.SystemObject GetSystemObject(Legacy.Universe.SystemObject o) { var drawable = resource.GetDrawable(o.Archetype.DaArchetypeName); var obj = new GameData.SystemObject(); obj.Nickname = o.Nickname; obj.DisplayName = o.IdsName; obj.Position = o.Pos.Value; if (o.DockWith != null) { obj.Dock = new DockAction() { Kind = DockKinds.Base, Target = o.DockWith }; } else if (o.Goto != null) { obj.Dock = new DockAction() { Kind = DockKinds.Jump, Target = o.Goto.System, Exit = o.Goto.Exit, Tunnel = o.Goto.TunnelEffect }; } if (o.Rotate != null) { obj.Rotation = Matrix4.CreateRotationX(MathHelper.DegreesToRadians(o.Rotate.Value.X)) * Matrix4.CreateRotationY(MathHelper.DegreesToRadians(o.Rotate.Value.Y)) * Matrix4.CreateRotationZ(MathHelper.DegreesToRadians(o.Rotate.Value.Z)); } //Load archetype references foreach (var path in o.Archetype.TexturePaths) { resource.LoadTxm(path); } foreach (var path in o.Archetype.MaterialPaths) { resource.LoadMat(path); } //Construct archetype if (o.Archetype is Legacy.Solar.Sun) { var sun = new GameData.Archetypes.Sun(); var star = fldata.Stars.FindStar(o.Star); //general sun.Radius = star.Radius.Value; //glow var starglow = fldata.Stars.FindStarGlow(star.StarGlow); sun.GlowSprite = starglow.Shape; sun.GlowColorInner = starglow.InnerColor; sun.GlowColorOuter = starglow.OuterColor; sun.GlowScale = starglow.Scale; //center if (star.StarCenter != null) { var centerglow = fldata.Stars.FindStarGlow(star.StarCenter); sun.CenterSprite = centerglow.Shape; sun.CenterColorInner = centerglow.InnerColor; sun.CenterColorOuter = centerglow.OuterColor; sun.CenterScale = centerglow.Scale; } if (star.Spines != null) { var spines = fldata.Stars.FindSpines(star.Spines); sun.SpinesSprite = spines.Shape; sun.SpinesScale = spines.RadiusScale; sun.Spines = new List <GameData.Spine>(spines.Items.Count); foreach (var sp in spines.Items) { sun.Spines.Add(new GameData.Spine(sp.LengthScale, sp.WidthScale, sp.InnerColor, sp.OuterColor, sp.Alpha)); } } obj.Archetype = sun; } else { obj.Archetype = new GameData.Archetype(); foreach (var dockSphere in o.Archetype.DockingSpheres) { obj.Archetype.DockSpheres.Add(new GameData.DockSphere() { Name = dockSphere.Name, Hardpoint = dockSphere.Hardpoint, Radius = dockSphere.Radius, Script = dockSphere.Script }); } if (o.Archetype.OpenAnim != null) { foreach (var sph in obj.Archetype.DockSpheres) { sph.Script = sph.Script ?? o.Archetype.OpenAnim; } } if (o.Archetype is Legacy.Solar.TradelaneRing) { obj.Archetype.DockSpheres.Add(new GameData.DockSphere() { Name = "tradelane", Hardpoint = "HpRightLane", Radius = 30 }); obj.Archetype.DockSpheres.Add(new GameData.DockSphere() { Name = "tradelane", Hardpoint = "HpLeftLane", Radius = 30 }); obj.Dock = new DockAction() { Kind = DockKinds.Tradelane, Target = o.NextRing, TargetLeft = o.PrevRing }; } } obj.Archetype.ArchetypeName = o.Archetype.GetType().Name; obj.Archetype.Drawable = drawable; obj.Archetype.LODRanges = o.Archetype.LODRanges; var ld = o.Loadout; var archld = fldata.Loadouts.FindLoadout(o.Archetype.LoadoutName); if (ld != null) { ProcessLoadout(ld, obj); } if (archld != null) { ProcessLoadout(archld, obj); } return(obj); }