public static void LoadSimHands(Sim sim) { ulong ID = SimCatalog.GetOutfit(sim.BodyOutfitID).HandGroup; Hag HandGrp = new Hag(new MemoryStream(ContentManager.GetResourceFromLongID(ID))); Appearance Apr; //This is UGLY, there must be a better way of doing this. :\ switch (sim.AppearanceType) { case AppearanceType.Light: if (HandGrp.LightSkin.LeftHand.FistGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.LeftHand.FistGesture))); sim.LeftHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.RightHand.FistGesture))); sim.RightHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.LightSkin.LeftHand.IdleGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.LeftHand.IdleGesture))); sim.LeftHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.RightHand.IdleGesture))); sim.RightHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.LightSkin.LeftHand.PointingGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.LeftHand.PointingGesture))); sim.LeftHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.LightSkin.RightHand.PointingGesture))); sim.RightHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } break; case AppearanceType.Medium: if (HandGrp.MediumSkin.LeftHand.FistGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.LeftHand.FistGesture))); sim.LeftHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.RightHand.FistGesture))); sim.RightHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.MediumSkin.LeftHand.IdleGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.LeftHand.IdleGesture))); sim.LeftHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.RightHand.IdleGesture))); sim.RightHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.MediumSkin.LeftHand.PointingGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.LeftHand.PointingGesture))); sim.LeftHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.MediumSkin.RightHand.PointingGesture))); sim.RightHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } break; case AppearanceType.Dark: if (HandGrp.DarkSkin.LeftHand.FistGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.LeftHand.FistGesture))); sim.LeftHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.RightHand.FistGesture))); sim.RightHandBindings.FistBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.DarkSkin.LeftHand.IdleGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.LeftHand.IdleGesture))); sim.LeftHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.RightHand.IdleGesture))); sim.RightHandBindings.IdleBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } if (HandGrp.DarkSkin.LeftHand.PointingGesture != 0) { Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.LeftHand.PointingGesture))); sim.LeftHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); Apr = new Appearance(); Apr.Read(new MemoryStream(ContentManager.GetResourceFromLongID( HandGrp.DarkSkin.RightHand.PointingGesture))); sim.RightHandBindings.PointingBindings = Apr.Bindings.Select(x => new SimModelBinding(x.ID)).ToList(); } break; } }
/// <summary> /// User clicked on an item in the list containing available heads and bodies. /// </summary> private void LstHeads_SelectedIndexChanged(object sender, EventArgs e) { if (m_Skeleton == null) { m_Skeleton = new Skeleton(this.Device, ContentManager.GetResourceFromLongID(0x100000005)); m_Skeleton.AssignChildren(ref m_Skeleton); } foreach(KeyValuePair<ulong, string> Pair in ContentManager.Resources) { if ((string)LstHeads.SelectedItem == Pair.Value) { //HAndGroup files are used to group together different hand meshes and textures. if (Pair.Value.Contains(".hag")) { Hag HandGroup = new Hag(ContentManager.GetResourceFromLongID(Pair.Key)); m_CurrentAppearance = new Appearance(ContentManager.GetResourceFromLongID( HandGroup.Appearances[0])); LstAppearances.Items.Clear(); foreach (ulong AppearanceID in HandGroup.Appearances) LstAppearances.Items.Add(AppearanceID); List<Binding> Bindings = new List<Binding>(); foreach (ulong BindingID in m_CurrentAppearance.BindingIDs) Bindings.Add(new Binding(ContentManager.GetResourceFromLongID(BindingID))); m_Tex = Texture2D.FromFile(this.Device, new MemoryStream( ContentManager.GetResourceFromLongID(Bindings[0].TextureAssetID))); m_CurrentMesh = new Mesh(ContentManager.GetResourceFromLongID(Bindings[0].MeshAssetID), false); LoadMesh(m_CurrentMesh); } else { PurchasableObject PO = new PurchasableObject(ContentManager.GetResourceFromLongID(Pair.Key)); m_CurrentOutfit = new Outfit(ContentManager.GetResourceFromLongID(PO.OutfitID)); m_CurrentAppearance = new Appearance( ContentManager.GetResourceFromLongID(m_CurrentOutfit.LightAppearanceID)); LstAppearances.Items.Clear(); LstAppearances.Items.Add(m_CurrentOutfit.LightAppearanceID); LstAppearances.Items.Add(m_CurrentOutfit.MediumAppearanceID); LstAppearances.Items.Add(m_CurrentOutfit.DarkAppearanceID); List<Binding> Bindings = new List<Binding>(); foreach (ulong BindingID in m_CurrentAppearance.BindingIDs) Bindings.Add(new Binding(ContentManager.GetResourceFromLongID(BindingID))); m_Tex = Texture2D.FromFile(this.Device, new MemoryStream( ContentManager.GetResourceFromLongID(Bindings[0].TextureAssetID))); //The file selected was most likely a body-mesh, so apply the adult skeleton to it. if (Pair.Value.Contains("bodies")) { m_CurrentMesh = new Mesh(ContentManager.GetResourceFromLongID(Bindings[0].MeshAssetID), true); m_CurrentMesh.TransformVertices2(m_Skeleton.Bones[0], ref mSimpleEffect); m_CurrentMesh.BlendVertices2(); LoadMesh(m_CurrentMesh); } else { m_CurrentMesh = new Mesh(ContentManager.GetResourceFromLongID(Bindings[0].MeshAssetID), false); LoadMesh(m_CurrentMesh); } } m_LoadComplete = true; } } }