예제 #1
0
        public static Dictionary <IGameObject, XmlElement> CreateGameObjects(
            App game,
            Vector3 origin,
            XmlDocument doc,
            int inputId)
        {
            Dictionary <IGameObject, XmlElement> map = new Dictionary <IGameObject, XmlElement>();
            XmlElement xmlElement1 = doc[nameof(CombatConfig)];

            if (xmlElement1 == null)
            {
                return(map);
            }
            XmlElement xmlElement2 = xmlElement1["GameObjects"];

            if (xmlElement2 == null)
            {
                return(map);
            }
            CombatConfig.DataContext context = new CombatConfig.DataContext();
            context.Origin  = Matrix.Identity;
            context.InputID = inputId;
            XmlElement xmlElement3           = xmlElement2["StartPoint"];
            Vector3    shipStartPositionHack = Vector3.Zero;

            if (xmlElement3 != null)
            {
                shipStartPositionHack = xmlElement3["Position"].ExtractVector3OrDefault(Vector3.Zero);
            }
            foreach (XmlElement xmlElement4 in xmlElement2.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name == "Player")))
            {
                int    integerOrDefault1 = xmlElement4["ID"].ExtractIntegerOrDefault(1);
                Player player            = game.GetPlayer(integerOrDefault1);
                if (xmlElement4["EmpireColorIndex"] != null)
                {
                    int integerOrDefault2 = xmlElement4["EmpireColorIndex"].ExtractIntegerOrDefault(0);
                    player.SetEmpireColor(integerOrDefault2);
                }
                if (xmlElement4["PlayerColor"] != null)
                {
                    Vector3 vector3OrDefault = xmlElement4["PlayerColor"].ExtractVector3OrDefault(Vector3.Zero);
                    player.SetPlayerColor(vector3OrDefault);
                }
                if (xmlElement4["Badge"] != null)
                {
                    string stringOrDefault = xmlElement4["Badge"].ExtractStringOrDefault(string.Empty);
                    player.SetBadgeTexture(stringOrDefault);
                }
            }
            CombatConfig.CreateGameObjectsCore(map, game, context, shipStartPositionHack, xmlElement2);
            return(map);
        }
예제 #2
0
 private static void CreateGameObjectsCore(
     Dictionary <IGameObject, XmlElement> map,
     App game,
     CombatConfig.DataContext context,
     Vector3 shipStartPositionHack,
     XmlElement root)
 {
     foreach (XmlElement xmlElement in root.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x =>
     {
         if (!(x.Name == "GameObject"))
         {
             return(x.Name == "Group");
         }
         return(true);
     })))
     {
         if (xmlElement.Name == "Group")
         {
             Vector3 vector3OrDefault1 = xmlElement["Position"].ExtractVector3OrDefault(Vector3.Zero);
             Vector3 vector3OrDefault2 = xmlElement["Rotation"].ExtractVector3OrDefault(Vector3.Zero);
             Matrix  rotationYpr       = Matrix.CreateRotationYPR(MathHelper.DegreesToRadians(vector3OrDefault2.X), MathHelper.DegreesToRadians(vector3OrDefault2.Y), MathHelper.DegreesToRadians(vector3OrDefault2.Z));
             rotationYpr.Position = vector3OrDefault1;
             CombatConfig.DataContext context1 = context.Clone();
             context1.Origin = rotationYpr * context.Origin;
             CombatConfig.CreateGameObjectsCore(map, game, context1, shipStartPositionHack, xmlElement);
         }
         else
         {
             string innerText = xmlElement["Type"].InnerText;
             if (innerText == "AsteroidBelt")
             {
                 map[CombatConfig.CreateAsteroidBelt(game, context, xmlElement)] = xmlElement;
             }
             else if (innerText == "Star")
             {
                 map[CombatConfig.CreateProceduralStar(game, context, xmlElement)] = xmlElement;
             }
             else if (innerText == "StellarBody")
             {
                 map[CombatConfig.CreateProceduralStellarBody(game, context, xmlElement)] = xmlElement;
             }
             else if (innerText == "Ship")
             {
                 CombatConfig.DataContext context1 = context;
                 if (shipStartPositionHack != Vector3.Zero)
                 {
                     context1 = context.Clone();
                     context1.Origin.Position -= shipStartPositionHack;
                 }
                 map[CombatConfig.CreateShipCompound(game, context1, xmlElement)] = xmlElement;
             }
             else if (innerText == "LegacyStellarBody")
             {
                 map[CombatConfig.CreateLegacyStellarBody(game, context, xmlElement)] = xmlElement;
             }
             else if (innerText == "LegacyStar")
             {
                 map[CombatConfig.CreateLegacyStarModel(game, context, xmlElement)] = xmlElement;
             }
             else
             {
                 map[CombatConfig.CreateDefaultGameObject(game, context, xmlElement)] = xmlElement;
             }
         }
     }
 }