/// <summary> /// Register an assembly and it's types metadata. /// </summary> /// <param name="assembly">Assembly to register.</param> public void RegisterAssembly(Assembly assembly) { if (assembly == null) { return; } #if !XB1 // XB1_ALLINONEASSEMBLY m_assemblies.Add(assembly); #endif // !XB1 MyObjectBuilderSerializer.RegisterFromAssembly(assembly); MyObjectBuilderType.RegisterFromAssembly(assembly, true); MyXmlSerializerManager.RegisterFromAssembly(assembly); MyDefinitionManagerBase.RegisterTypesFromAssembly(assembly); }
// generate object builder public override MyObjectBuilder_DefinitionBase GetObjectBuilder() { var builder = MyDefinitionManagerBase.GetObjectFactory().CreateObjectBuilder <MyObjectBuilder_AnimationControllerDefinition>(this); builder.Id = Id; builder.Description = (DescriptionEnum.HasValue) ? DescriptionEnum.Value.ToString() : DescriptionString; builder.DisplayName = (DisplayNameEnum.HasValue) ? DisplayNameEnum.Value.ToString() : DisplayNameString; builder.Icons = Icons; builder.Public = Public; builder.Enabled = Enabled; builder.AvailableInSurvival = AvailableInSurvival; builder.StateMachines = StateMachines.ToArray(); builder.Layers = Layers.ToArray(); builder.FootIkChains = FootIkChains.ToArray(); builder.IkIgnoredBones = IkIgnoredBones.ToArray(); return(builder); }
// receiving messages private void LiveDebugging_ReceivedMessageHandler(MyExternalDebugStructures.CommonMsgHeader messageHeader, IntPtr messageData) { MyExternalDebugStructures.ACReloadInGameMsg msgReload; if (MyExternalDebugStructures.ReadMessageFromPtr(ref messageHeader, messageData, out msgReload)) { try { string acContentPath = msgReload.ACContentAddress; string acAddress = msgReload.ACAddress; string acName = msgReload.ACName; MyObjectBuilder_Definitions allDefinitions; // = null; // load animation controller definition from SBC file if (MyObjectBuilderSerializer.DeserializeXML(acAddress, out allDefinitions) && allDefinitions.Definitions != null && allDefinitions.Definitions.Length > 0) { var firstDef = allDefinitions.Definitions[0]; MyModContext context = new MyModContext(); context.Init("AnimationControllerDefinition", acAddress, acContentPath); MyAnimationControllerDefinition animationControllerDefinition = new MyAnimationControllerDefinition(); animationControllerDefinition.Init(firstDef, context); MyStringHash animSubtypeNameHash = MyStringHash.GetOrCompute(acName); // post process and update in def. manager MyAnimationControllerDefinition originalAnimationControllerDefinition = MyDefinitionManagerBase.Static.GetDefinition <MyAnimationControllerDefinition>( animSubtypeNameHash); var postprocessor = MyDefinitionManagerBase.GetPostProcessor(typeof(MyObjectBuilder_AnimationControllerDefinition)); if (postprocessor != null) { MyDefinitionPostprocessor.Bundle originalBundle = new MyDefinitionPostprocessor.Bundle { Context = MyModContext.BaseGame, Definitions = new Dictionary <MyStringHash, MyDefinitionBase> { { animSubtypeNameHash, originalAnimationControllerDefinition } }, Set = new MyDefinitionSet() }; originalBundle.Set.AddDefinition(originalAnimationControllerDefinition); MyDefinitionPostprocessor.Bundle overridingBundle = new MyDefinitionPostprocessor.Bundle { Context = context, Definitions = new Dictionary <MyStringHash, MyDefinitionBase> { { animSubtypeNameHash, animationControllerDefinition } }, Set = new MyDefinitionSet() }; overridingBundle.Set.AddDefinition(animationControllerDefinition); // postprocess -> override existing definition in memory postprocessor.AfterLoaded(ref overridingBundle); postprocessor.OverrideBy(ref originalBundle, ref overridingBundle); } // swap animation controller for each entity foreach (var component in m_skinnedEntityComponents) { if (component != null && component.SourceId.SubtypeName == acName) { component.Clear(); component.InitFromDefinition(originalAnimationControllerDefinition, forceReloadMwm: true); // reload from original def that was modified by postprocessor if (component.ReloadBonesNeeded != null) { component.ReloadBonesNeeded(); } } } } } catch (Exception e) { MyLog.Default.WriteLine(e); } } }
public static void RegisterFromAssembly(Assembly assembly) { MyObjectBuilderSerializer.RegisterFromAssembly(assembly); MyObjectBuilderType.RegisterFromAssembly(assembly); MyDefinitionManagerBase.RegisterTypesFromAssembly(assembly); }
private void SetupTestItem2() { // 1a) Physical Item Ob // 1b) Physical Item Def? // 1c) TODO: Add this... somewhere... // 2) Blueprint (add 1 to 2) // 3a) Blueprint Class OB // 3b) Blueprint Class Def // 3a) Add 3a to 3b // 4a) Add 3b to Refineries // 4a) Add 3b to Skits [if applicable] // 1) Physical Item //ReportOreDefinitions(); MyObjectBuilder_PhysicalItemDefinition newPhysDefOb = new MyObjectBuilder_PhysicalItemDefinition { Id = new SerializableDefinitionId { TypeId = typeof(MyObjectBuilder_Ore), SubtypeId = "BulletproofGlassScrap2" }, AvailableInSurvival = true, CanPlayerOrder = false, CanSpawnFromScreen = true, Enabled = true, Public = true, DisplayName = "Bulletproof Glass Scrap 2", Icons = new[] { Constants.IconLocation + Constants.BulletproofGlassIcon }, Size = new Vector3(0.2, 0.2, 0.1), Mass = 1, Volume = 0.254f, Model = Constants.KnownScrapModelLocation + Constants.Scrap2, PhysicalMaterial = "Metal" }; var baseDef = MyDefinitionManagerBase.GetObjectFactory().CreateInstance(newPhysDefOb.TypeId); baseDef.Context = new MyModContext(); baseDef.Context.Init((MyModContext)ModContext); baseDef.Init(newPhysDefOb, (MyModContext)ModContext); baseDef.AvailableInSurvival = true; baseDef.Public = true; WriteToLog("SetupTestItem2", $"{MyDefinitionManager.Static.Definitions.AddOrRelaceDefinition(baseDef)}", LogType.General); WriteToLog("SetupTestItem2", $"{MyDefinitionManager.Static.Definitions.AddOrRelaceDefinition(baseDef)}", LogType.General); WriteToLog("SetupTestItem2", $"{(MyDefinitionManager.Static.TryGetPhysicalItemDefinition(baseDef.Id)).Id}", LogType.General); WriteToLog("SetupTestItem2", $"{(MyDefinitionManager.Static.TryGetPhysicalItemDefinition(baseDef.Id)).IsOre}", LogType.General); MyPhysicalItemDefinition siliconOreDef = MyDefinitionManager.Static.GetPhysicalItemDefinition(new MyDefinitionId(typeof(MyObjectBuilder_Ore), "Silicon")); ReportCustomDefinition((MyPhysicalItemDefinition)baseDef); ReportCustomDefinition(siliconOreDef); //ReportOreDefinitions(); //ReportDefinitions(); // 1b) Physical Item Def -- May not be needed... //MyPhysicalItemDefinition newPhysItemDef = new MyPhysicalItemDefinition //{ // Context = (MyModContext) ModContext, // Id = newPhysDefOb.Id, // Public = true //}; // 0) OB //MyObjectBuilder_PhysicalItemDefinition defOb = new MyObjectBuilder_PhysicalItemDefinition() //{ // Id = new.Id //}; //MyObjectBuilder_LCDTextureDefinition lcdDef = new MyObjectBuilder_LCDTextureDefinition //{ // Id = baseDef.Id //}; //MyDefinitionManager.Static.Definitions.Definitions[typeof(MyObjectBuilder_LCDTextureDefinition)].Add(lcdDef.SubtypeId, baseDef); //MyDefinitionManager.Static.GetLoadingSet().Definitions //WriteToLog("SetupTestItem2", $"{MyDefinitionManager.Static.GetLoadingSet().Definitions.Count}",LogType.General); //MyDefinitionManager.Static.Definitions.AddDefinition(baseDef); //MyDefinitionPostprocessor.Bundle bundle = default(MyDefinitionPostprocessor.Bundle); //bundle.Context = (MyModContext)ModContext; //bundle.Set = new MyDefinitionSet(); //MyDefinitionPostprocessor.Bundle definitions = bundle; //bundle.Definitions.Add(baseDef.Id.SubtypeId, baseDef); //MyDefinitionManagerBase.GetPostProcessor(baseDef.GetObjectBuilder().TypeId). .AfterLoaded(ref definitions); //foreach (MyDefinitionPostprocessor postProcessor in MyDefinitionManagerBase.GetPostProcessor(baseDef.GetObjectBuilder().TypeId)) //{ //if (definitionSet.Definitions.TryGetValue(myDefinitionPostprocessor.DefinitionType, out definitions.Definitions)) //{ //postProcessor.AfterLoaded(ref definitions); //} //} //MyDefinitionManager.Static.Definitions.AddDefinition(baseDef); //MyDefinitionManager.Static.Definitions.AddOrRelaceDefinition(baseDef); //foreach (var test in MyDefinitionManager.Static.Definitions.Definitions[typeof(MyObjectBuilder_Ore)].Keys) //{ // //test this //} // 2) Blueprint //MyPhysicalItemDefinition siliconIngotDef = MyDefinitionManager.Static.GetPhysicalItemDefinition(new MyDefinitionId(typeof(MyObjectBuilder_Ingot), "Silicon")); //BlueprintItem preReq = new BlueprintItem //{ // Id = newPhysItemDef.Id, // Amount = "1" //}; //BlueprintItem results = new BlueprintItem //{ // Id = siliconIngotDef.Id, // Amount = "1" //}; //MyObjectBuilder_BlueprintDefinition newBpDefOb = new MyObjectBuilder_BlueprintDefinition //{ // Id = new MyDefinitionId(typeof(MyObjectBuilder_BlueprintDefinition), "BulletproofGlassToIngot"), // DisplayName = "Bulletproof Glass Scrap", // Icons = new[] // { // Constants.IconLocation + Constants.BulletproofGlassIcon // }, // Prerequisites = new[] // { // preReq // }, // Results = new[] // { // results // }, // BaseProductionTimeInSeconds = 0.04f //}; //MyBlueprintDefinition newBpDef = new MyBlueprintDefinition //{ // Id = newBpDefOb.Id //}; ////MyBlueprintDefinition newBp = new MyBlueprintDefinition ////{ //// Id = new MyDefinitionId(typeof(MyObjectBuilder_BlueprintDefinition), "BulletproofGlassToIngot"), //// DisplayNameString = "Bulletproof Glass Scrap", //// Icons = new[] //// { //// Constants.IconLocation + Constants.BulletproofGlassIcon //// }, //// Prerequisites = new[] //// { //// new MyBlueprintDefinitionBase.Item //// { //// Amount = 1, //// Id = siliconOreDef.Id //// } //// }, //// Results = new[] //// { //// new MyBlueprintDefinitionBase.Item //// { //// Amount = (MyFixedPoint) 6.75, //// Id = siliconIngotDef.Id //// } //// }, //// BaseProductionTimeInSeconds = 0.04f ////}; //// 3a) Blueprint Class OB //MyObjectBuilder_BlueprintClassDefinition newBpClassDefOb = new MyObjectBuilder_BlueprintClassDefinition //{ // Id = new SerializableDefinitionId // { // TypeId = typeof(MyObjectBuilder_BlueprintClassDefinition), // SubtypeId = "AwwScrap2" // }, // DisplayName = "Scrap Recycling", // Description = "Scrap Recycling", // Icons = new[] // { // "Textures\\GUI\\Icons\\component\\ScrapMetalComponent.dds" // }, // HighlightIcon = "Textures\\GUI\\Icons\\component\\ScrapMetalComponent.dds", // InputConstraintIcon = "Textures\\GUI\\Icons\\filter_ore.dds", // OutputConstraintIcon = "Textures\\GUI\\Icons\\filter_ingot.dds" //}; //// 3b) Blueprint Class Definition //MyBlueprintClassDefinition newBpClassDef = new MyBlueprintClassDefinition //{ // Id = newBpClassDefOb.Id //}; ////ReportDefinitions(); ////ReportDefinitionManager(); ////ReportCustomDefinition(newPhysItemDef); ////ReportOreDefinitions(); ////MyDefinitionManagerBase.GetPostProcessor(typeof(MyObjectBuilder_Ore)).AfterPostprocess(); //// 3c) Add Blueprint to Blueprint Class (creates an entry) ////x.AddBlueprint(newBpDef); }