コード例 #1
0
 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);
                 }
             }
         }
     }
 }
コード例 #2
0
        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);
        }