public void InsertRequiredActors() { MyMwcLog.WriteLine("InsertRequiredActors - START"); foreach (MyActorEnum actor in RequiredActors) { switch (actor) { //Insert Madelyn case MyActorEnum.MADELYN: { if (!MyEntities.EntityExists("Madelyn")) { MyMwcLog.WriteLine("Insert Madelyne - START"); // Holds ids for remap IMyEntityIdRemapContext remapContext = new MyEntityIdRemapContext(); //MyMwcObjectBuilder_SectorObjectGroups groups = MySectorGenerator.LoadSectorGroups(MyTemplateGroups.GetGroupSector(MyTemplateGroupEnum.Madelyn)); MyMwcObjectBuilder_SectorObjectGroups groups = MySession.Static.LoadSectorGroups(MyTemplateGroups.GetGroupSector(MyTemplateGroupEnum.Madelyn)); System.Diagnostics.Debug.Assert(groups.Groups.Count > 0); MyMwcObjectBuilder_ObjectGroup madelynGroup = groups.Groups[0]; groups.RemapEntityIds(remapContext); IEnumerable<MyMwcObjectBuilder_Base> rootObjects = madelynGroup.GetRootBuilders(groups.Entities); List<MyMwcObjectBuilder_Base> clonedList = new List<MyMwcObjectBuilder_Base>(); foreach (MyMwcObjectBuilder_Base o in rootObjects) { // Clone var clone = o.Clone() as MyMwcObjectBuilder_Base; // we want Madelyn's prefab container as first builder if (clone is MyMwcObjectBuilder_PrefabContainer) { clonedList.Insert(0, clone); } else { clonedList.Add(clone); } } System.Diagnostics.Debug.Assert(clonedList.Count > 0 && clonedList[0] is MyMwcObjectBuilder_PrefabContainer); // create Madelyn's prefab container MyEntity madelynMothership = MyEntities.CreateFromObjectBuilder(MyTextsWrapper.Get(MyTextsWrapperEnum.Actor_Madelyn).ToString(), clonedList[0], ((MyMwcObjectBuilder_Object3dBase)clonedList[0]).PositionAndOrientation.GetMatrix()); madelynMothership.FindChild(MyMissionLocation.MADELYN_HANGAR).DisplayName = MyTextsWrapper.Get(MyTextsWrapperEnum.Sapho).ToString(); madelynMothership.SetName(MyActorConstants.GetActorName(MyActorEnum.MADELYN)); Matrix madelynMothershipWorldInv = Matrix.Invert(madelynMothership.WorldMatrix); List<MinerWars.AppCode.Game.Entities.WayPoints.MyWayPoint> waypoints = new List<Entities.WayPoints.MyWayPoint>(); // create other entities as children of Madelyn's prefab container for (int i = 1; i < clonedList.Count; i++) { System.Diagnostics.Debug.Assert(clonedList[i] is MyMwcObjectBuilder_Object3dBase); MyEntity childEntity = MyEntities.CreateFromObjectBuilder(null, clonedList[i], ((MyMwcObjectBuilder_Object3dBase)clonedList[i]).PositionAndOrientation.GetMatrix()); childEntity.SetLocalMatrix(childEntity.WorldMatrix * madelynMothershipWorldInv); madelynMothership.Children.Add(childEntity); if (childEntity is MinerWars.AppCode.Game.Entities.WayPoints.MyWayPoint) { waypoints.Add(childEntity as MinerWars.AppCode.Game.Entities.WayPoints.MyWayPoint); } } // connect waypoints of Madelyn's prefab container foreach (var waypoint in waypoints) { waypoint.ResolveLinks(); } // set correct Madelyn's position and add to scene madelynMothership.SetWorldMatrix(MyPlayer.FindMothershipPosition()); madelynMothership.Link(); MyEntities.Add(madelynMothership); MyMwcLog.WriteLine("Insert Madelyne - END"); } else { MyMwcLog.WriteLine("Insert Madelyne - Madelyne already loaded"); } MyWayPointGraph.RecreateWaypointsAroundMadelyn(); } break; //Insert Marcus case MyActorEnum.MARCUS: InsertFriend(MyActorEnum.MARCUS); break; //Insert RavenGirl case MyActorEnum.TARJA: InsertFriend(MyActorEnum.TARJA); break; //Insert RavenGuy case MyActorEnum.VALENTIN: InsertFriend(MyActorEnum.VALENTIN, MyMwcObjectBuilder_SmallShip_TypesEnum.HAMMER); break; default: System.Diagnostics.Debug.Assert(false, "Uknown actor to insert!"); break; } } MyMwcLog.WriteLine("InsertRequiredActors - END"); }
void OnAddSelected(MyGuiControlButton sender) { CloseScreen(); // Holds ids for remap IMyEntityIdRemapContext remapContext = new MyEntityIdRemapContext(); var newEntities = new List<MyEntity>(); foreach (var item in m_objectList.GetSelectedItems()) { var builder = m_sectorBuilder.SectorObjects[item.Key]; builder.RemapEntityIds(remapContext); //builder.EntityId = null; // reset entityId because it's new object //builder.Name = null; //var container = builder as MyMwcObjectBuilder_PrefabContainer; // reset entityIds also on prefabs in container //if (container != null) //{ // foreach (var prefabBuilder in container.Prefabs) // { // prefabBuilder.EntityId = null; // prefabBuilder.Name = null; // } //} var entity = CreateFromObjectBuilder(builder); if (entity != null) { newEntities.Add(entity); } } foreach (var e in newEntities) { e.Link(); } // recreate snap point links var snapPointLinks = m_sectorBuilder.SnapPointLinks; foreach (var item in snapPointLinks) { List<MySnapPointLink> group = new List<MySnapPointLink>(); foreach (var link in item.Links) { MyEntity entity; if (!MyEntities.TryGetEntityById(new MyEntityIdentifier(remapContext.RemapEntityId(link.EntityId).Value), out entity)) continue; var prefab = entity as MyPrefabBase; if (prefab == null) continue; if (string.IsNullOrEmpty(link.SnapPointName)) { if (prefab != null && link.Index < prefab.SnapPoints.Count) group.Add(new MySnapPointLink(prefab.SnapPoints[link.Index])); } else { foreach (var snapPoint in prefab.SnapPoints) if (snapPoint.Name == link.SnapPointName) group.Add(new MySnapPointLink(snapPoint)); } } if (group.Count >= 2) MyEditor.Static.AddLinkedSnapPoints(group); } MyWayPointGraph.DeleteNullVerticesFromPaths(); }