private static IGameObject CreateDefaultGameObject( App game, CombatConfig.DataContext context, XmlElement node) { XmlElement xmlElement = node["Asset"]; IGameObject gameObject = game.AddObject((InteropGameObjectType)Enum.Parse(typeof(InteropGameObjectType), node["Type"].InnerText), (object[])new string[1] { xmlElement != null ? xmlElement.InnerText : string.Empty }); Vector3 vector3OrDefault1 = node["Position"].ExtractVector3OrDefault(Vector3.Zero); Vector3 vector3OrDefault2 = node["Rotation"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPositionAndRotation(ref vector3OrDefault1, ref vector3OrDefault2); if (gameObject is IPosition) { (gameObject as IPosition).Position = vector3OrDefault1; } if (gameObject is IScalable) { (gameObject as IScalable).Scale = node["Scale"].ExtractSingleOrDefault(1f); } if (gameObject is IOrientatable) { (gameObject as IOrientatable).Rotation = vector3OrDefault2; } return(gameObject); }
private static IGameObject CreateProceduralStellarBody( App game, CombatConfig.DataContext context, XmlElement node) { float singleOrDefault1 = node["Radius"].ExtractSingleOrDefault(5000f); int integerOrDefault = node["RandomSeed"].ExtractIntegerOrDefault(0); string stringOrDefault1 = node["PlanetType"].ExtractStringOrDefault("normal"); float singleOrDefault2 = node["HazardRating"].ExtractSingleOrDefault(0.0f); string stringOrDefault2 = node["Faction"].ExtractStringOrDefault("human"); float singleOrDefault3 = node["Biosphere"].ExtractSingleOrDefault(0.0f); double doubleOrDefault = node["Population"].ExtractDoubleOrDefault(0.0); Vector3 vector3OrDefault = node["Position"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPosition(ref vector3OrDefault); int?typeVariant = new int?(); if (node["Variant"] != null) { typeVariant = new int?(node["Variant"].ExtractIntegerOrDefault(0)); } StellarBody.Params stellarBodyParams = game.AssetDatabase.PlanetGenerationRules.GetStellarBodyParams("sysmap_planet", vector3OrDefault, singleOrDefault1, integerOrDefault, 0, stringOrDefault1, singleOrDefault2, 750f, stringOrDefault2, singleOrDefault3, doubleOrDefault, typeVariant, ColonyStage.Open, SystemColonyType.Normal); stellarBodyParams.Civilians = new StellarBody.PlanetCivilianData[0]; stellarBodyParams.ImperialPopulation = 0.0; stellarBodyParams.Suitability = 0.0f; stellarBodyParams.Infrastructure = 0.0f; return((IGameObject)StellarBody.Create(game, stellarBodyParams)); }
private static IGameObject CreateLegacyStarModel( App game, CombatConfig.DataContext context, XmlElement node) { bool impostorEnabled = true; Vector3 vector3OrDefault = node["Position"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPosition(ref vector3OrDefault); return((IGameObject) new StarModel(game, node["Asset"].ExtractStringOrDefault(string.Empty), vector3OrDefault, node["Scale"].ExtractSingleOrDefault(0.0f), true, node["ImpostorMaterial"].ExtractStringOrDefault(string.Empty), node["ImpostorSpriteScale"].ExtractVector2OrDefault(Vector2.One), node["ImpostorRange"].ExtractVector2OrDefault(Vector2.Zero), node["ImpostorVertexColor"].ExtractVector3OrDefault(Vector3.One), impostorEnabled, string.Empty)); }
private static IGameObject CreateProceduralStar( App game, CombatConfig.DataContext context, XmlElement node) { string stringOrDefault1 = node["StellarClass"].ExtractStringOrDefault("G2V"); string stringOrDefault2 = node["Name"].ExtractStringOrDefault(string.Empty); Vector3 vector3OrDefault = node["Position"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPosition(ref vector3OrDefault); return((IGameObject)Kerberos.Sots.GameStates.StarSystem.CreateStar(game, vector3OrDefault, StellarClass.Parse(stringOrDefault1), stringOrDefault2, 1f, true)); }
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); }
private static IGameObject CreateAsteroidBelt( App game, CombatConfig.DataContext context, XmlElement node) { int integerOrDefault1 = node["RandomSeed"].ExtractIntegerOrDefault(0); Vector3 vector3OrDefault = node["Center"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPosition(ref vector3OrDefault); float singleOrDefault1 = node["InnerRadius"].ExtractSingleOrDefault(10000f); float singleOrDefault2 = node["OuterRadius"].ExtractSingleOrDefault(20000f); float singleOrDefault3 = node["MinimumHeight"].ExtractSingleOrDefault(0.0f); float singleOrDefault4 = node["MaximumHeight"].ExtractSingleOrDefault(0.0f); int integerOrDefault2 = node["InitialCount"].ExtractIntegerOrDefault(1000); return((IGameObject) new AsteroidBelt(game, integerOrDefault1, vector3OrDefault, singleOrDefault1, singleOrDefault2, singleOrDefault3, singleOrDefault4, integerOrDefault2)); }
private static IGameObject CreateLegacyStellarBody( App game, CombatConfig.DataContext context, XmlElement node) { StellarBody.Params p = StellarBody.Params.Default; p.SurfaceMaterial = node["Asset"].ExtractStringOrDefault(string.Empty); p.Position = node["Position"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPosition(ref p.Position); p.Radius = node["Scale"].ExtractSingleOrDefault(0.0f); p.AtmoThickness = node["AtmosphereThickness"].ExtractSingleOrDefault(0.0f); p.AtmoScatterWaveLengths = node["AtmosphereScatteringWavelengths"].ExtractVector3OrDefault(Vector3.Zero); p.AtmoKm = node["AtmosphereMieConstant"].ExtractSingleOrDefault(0.0f); p.AtmoKr = node["AtmosphereRayleighConstant"].ExtractSingleOrDefault(0.0f); p.AtmoScaleDepth = node["AtmosphereScaleDepth"].ExtractSingleOrDefault(0.0f); p.Civilians = new StellarBody.PlanetCivilianData[0]; p.ImperialPopulation = 0.0; p.Suitability = 0.0f; p.Infrastructure = 0.0f; return((IGameObject)StellarBody.Create(game, p)); }
private static IGameObject CreateShipCompound( App game, CombatConfig.DataContext context, XmlElement node) { XmlElement xmlElement1 = node["ShipName"]; XmlElement xmlElement2 = node["ShipDesign"]; XmlElement source1 = xmlElement2["Weapons"]; XmlElement source2 = xmlElement2["Modules"]; XmlElement xmlElement3 = xmlElement2["WeaponAssignments"]; XmlElement xmlElement4 = xmlElement2["ModuleAssignments"]; XmlElement source3 = xmlElement2["Sections"]; List <WeaponAssignment> weaponAssignmentList = new List <WeaponAssignment>(); List <ModuleAssignment> moduleAssignmentList = new List <ModuleAssignment>(); List <ShipSectionAsset> sectionAssets = new List <ShipSectionAsset>(); List <LogicalModule> logicalModuleList = new List <LogicalModule>(); if (source3 != null) { List <XmlElement> list = source3.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name.Equals("Section", StringComparison.InvariantCulture))).ToList <XmlElement>(); list.Select <XmlElement, string>((Func <XmlElement, string>)(x => x["SectionFile"].InnerText)); foreach (XmlElement source4 in list) { string sectionFile = source4["SectionFile"].InnerText; ShipSectionAsset shipSectionAsset = game.AssetDatabase.ShipSections.FirstOrDefault <ShipSectionAsset>((Func <ShipSectionAsset, bool>)(x => x.FileName == sectionFile)); sectionAssets.Add(shipSectionAsset); List <LogicalModule> source5 = new List <LogicalModule>(); foreach (XmlElement xmlElement5 in source4.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name.Equals("Module", StringComparison.InvariantCulture)))) { string moduleNodeName = xmlElement5["Mount"].InnerText; string modulePath = xmlElement5["ModuleId"].InnerText; LogicalModule logicalModule = game.AssetDatabase.Modules.First <LogicalModule>((Func <LogicalModule, bool>)(x => x.ModulePath == modulePath)); if (!source5.Contains(logicalModule)) { source5.Add(logicalModule); } moduleAssignmentList.Add(new ModuleAssignment() { ModuleMount = ((IEnumerable <LogicalModuleMount>)shipSectionAsset.Modules).First <LogicalModuleMount>((Func <LogicalModuleMount, bool>)(x => x.NodeName == moduleNodeName)), Module = logicalModule, PsionicAbilities = (SectionEnumerations.PsionicAbility[])null }); } IEnumerable <LogicalBank> source6 = ((IEnumerable <LogicalBank>)shipSectionAsset.Banks).Concat <LogicalBank>(source5.SelectMany <LogicalModule, LogicalBank>((Func <LogicalModule, IEnumerable <LogicalBank> >)(x => (IEnumerable <LogicalBank>)x.Banks))); foreach (XmlElement xmlElement5 in source4.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name.Equals("Bank", StringComparison.InvariantCulture)))) { Guid bankGuid = Guid.Parse(xmlElement5["Id"].InnerText); string weaponName = xmlElement5["Weapon"].InnerText; weaponAssignmentList.Add(new WeaponAssignment() { Bank = source6.First <LogicalBank>((Func <LogicalBank, bool>)(x => x.GUID == bankGuid)), Weapon = game.AssetDatabase.Weapons.First <LogicalWeapon>((Func <LogicalWeapon, bool>)(x => x.WeaponName == weaponName)) }); } } } IEnumerable <string> weapons = source1 == null ? (IEnumerable <string>) new string[0] : source1.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name.Equals("string", StringComparison.InvariantCulture))).Select <XmlElement, string>((Func <XmlElement, string>)(x => x.InnerText)); IEnumerable <string> modules = source2 == null ? (IEnumerable <string>) new string[0] : source2.OfType <XmlElement>().Where <XmlElement>((Func <XmlElement, bool>)(x => x.Name.Equals("string", StringComparison.InvariantCulture))).Select <XmlElement, string>((Func <XmlElement, string>)(x => x.InnerText)); string str = xmlElement1 == null ? "USS Placeholder" : xmlElement1.InnerText; int integerOrDefault = node["PlayerID"].ExtractIntegerOrDefault(0); Player player = game.GetPlayer(integerOrDefault); Ship ship = Ship.CreateShip(game, new CreateShipParams() { player = player, sections = (IEnumerable <ShipSectionAsset>)sectionAssets, turretHousings = game.AssetDatabase.TurretHousings, weapons = game.AssetDatabase.Weapons, preferredWeapons = game.AssetDatabase.Weapons.Where <LogicalWeapon>((Func <LogicalWeapon, bool>)(x => weapons.Contains <string>(x.Name))), assignedWeapons = (IEnumerable <WeaponAssignment>)weaponAssignmentList, modules = game.AssetDatabase.Modules, preferredModules = game.AssetDatabase.Modules.Where <LogicalModule>((Func <LogicalModule, bool>)(x => modules.Contains <string>(x.ModuleName))), assignedModules = (IEnumerable <ModuleAssignment>)moduleAssignmentList, psionics = game.AssetDatabase.Psionics, faction = game.AssetDatabase.Factions.First <Faction>((Func <Faction, bool>)(x => sectionAssets.First <ShipSectionAsset>().Faction == x.Name)), shipName = str, inputID = context.InputID }); Vector3 vector3OrDefault1 = node["Position"].ExtractVector3OrDefault(Vector3.Zero); Vector3 vector3OrDefault2 = node["Rotation"].ExtractVector3OrDefault(Vector3.Zero); context.TransformPositionAndRotation(ref vector3OrDefault1, ref vector3OrDefault2); ship.Position = vector3OrDefault1; ship.Rotation = vector3OrDefault2; return((IGameObject)ship); }
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; } } } }