public static Primitive.TextureEntry GetDefaultTexture() { Primitive.TextureEntry textu = new Primitive.TextureEntry(new UUID("C228D1CF-4B5D-4BA8-84F4-899A0796AA97")); textu.CreateFace(0).TextureID = new UUID("00000000-0000-1111-9999-000000000012"); textu.CreateFace(1).TextureID = Util.BLANK_TEXTURE_UUID; textu.CreateFace(2).TextureID = Util.BLANK_TEXTURE_UUID; textu.CreateFace(3).TextureID = new UUID("6522E74D-1660-4E7F-B601-6F48C1659A77"); textu.CreateFace(4).TextureID = new UUID("7CA39B4C-BD19-4699-AFF7-F93FD03D3E7B"); textu.CreateFace(5).TextureID = new UUID("00000000-0000-1111-9999-000000000010"); textu.CreateFace(6).TextureID = new UUID("00000000-0000-1111-9999-000000000011"); return(textu); }
public void TestSaveBakedTextures() { TestHelpers.InMethod(); // log4net.Config.XmlConfigurator.Configure(); UUID userId = TestHelpers.ParseTail(0x1); UUID eyesTextureId = TestHelpers.ParseTail(0x2); // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly // to the AssetService, which will then store temporary and local assets permanently CoreAssetCache assetCache = new CoreAssetCache(); AvatarFactoryModule afm = new AvatarFactoryModule(); TestScene scene = SceneHelpers.SetupScene(assetCache); SceneHelpers.SetupSceneModules(scene, afm); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); // TODO: Use the actual BunchOfCaps functionality once we slot in the CapabilitiesModules AssetBase uploadedAsset; uploadedAsset = new AssetBase(eyesTextureId, "Baked Texture", (sbyte)AssetType.Texture, userId.ToString()); uploadedAsset.Data = new byte[] { 2 }; uploadedAsset.Temporary = true; uploadedAsset.Local = true; // Local assets aren't persisted, non-local are scene.AssetService.Store(uploadedAsset); byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; for (byte i = 0; i < visualParams.Length; i++) { visualParams[i] = i; } Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); eyesFace.TextureID = eyesTextureId; afm.SetAppearance(sp, bakedTextureEntry, visualParams); afm.SaveBakedTextures(userId); // Dictionary<BakeType, Primitive.TextureEntryFace> bakedTextures = afm.GetBakedTextureFaces(userId); // We should also inpsect the asset data store layer directly, but this is difficult to get at right now. assetCache.Clear(); AssetBase eyesBake = scene.AssetService.Get(eyesTextureId.ToString()); Assert.That(eyesBake, Is.Not.Null); Assert.That(eyesBake.Temporary, Is.False); Assert.That(eyesBake.Local, Is.False); }
/// <summary> /// Find the materials used in the SOP, and add them to 'm_regionMaterials'. /// </summary> private void GetStoredMaterialsInPart(SceneObjectPart part) { if (part.Shape == null) { return; } bool partchanged = false; bool facechanged = false; var te = new Primitive.TextureEntry(part.Shape.TextureEntry, 0, part.Shape.TextureEntry.Length); if (te == null) { return; } partchanged = GetLegacyStoredMaterialsInPart(part); if (te.DefaultTexture != null) { facechanged = GetStoredMaterialInFace(part, te.DefaultTexture); } else { m_log.WarnFormat( "[Materials]: Default texture for part {0} (part of object {1}) in {2} unexpectedly null. Ignoring.", part.Name, part.ParentGroup.Name, m_scene.Name); } foreach (Primitive.TextureEntryFace face in te.FaceTextures) { if (face != null) { facechanged |= GetStoredMaterialInFace(part, face); } } if (facechanged) { part.Shape.TextureEntry = te.GetBytes(9); } if (facechanged || partchanged) { if (part.ParentGroup != null && !part.ParentGroup.IsDeleted) { part.ParentGroup.HasGroupChanged = true; } } }
public object NullSafeGet(IDataReader rs, string[] names, object owner) { object texture = null; int ord = rs.GetOrdinal(names[0]); if (!rs.IsDBNull(ord)) { byte[] bytes = (byte[])rs[ord]; texture = new Primitive.TextureEntry(bytes, 0, bytes.Length); } return(texture); }
void UpdateTextureQueue(Primitive.TextureEntry te) { if (te != null) { for (int i = 0; i < te.FaceTextures.Length; i++) { if (te.FaceTextures[i] != null && !texturesFinished.ContainsKey(te.FaceTextures[i].TextureID)) { client.Assets.RequestImage(te.FaceTextures[i].TextureID, ImageType.Normal, 101300.0f, 0, 0, OnComplete, false); } } } }
/// <summary> /// Set appearance data (texture asset IDs and slider settings) received from a client /// </summary> /// <param name="client"></param> /// <param name="texture"></param> /// <param name="visualParam"></param> private void Client_OnSetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte[] visualParams) { // m_log.WarnFormat("[AVFACTORY]: Client_OnSetAppearance called for {0} ({1})", client.Name, client.AgentId); ScenePresence sp = m_scene.GetScenePresence(client.AgentId); if (sp != null) { SetAppearance(sp, textureEntry, visualParams); } else { m_log.WarnFormat("[AVFACTORY]: Client_OnSetAppearance unable to find presence for {0}", client.AgentId); } }
public AgentSetAppearancePacket replacer_lols(AgentSetAppearancePacket packet) { AgentSetAppearancePacket p = cloneASA(packet); if (p.ObjectData != null) { if (p.ObjectData.TextureEntry != null) { Primitive.TextureEntry te = new Primitive.TextureEntry(p.ObjectData.TextureEntry, 0, p.ObjectData.TextureEntry.Length); if (te != null) { if (te.FaceTextures != null) { if (te.FaceTextures.Length > 0) { //Console.WriteLine("Coin is replacing textures..."); UUID replace = lols[lolcounter]; lolcounter++; if (lolcounter >= lols.Length) { lolcounter = 0; } for (int i = 0; i <= 7; i++) { if (te.FaceTextures[i] != null) { te.FaceTextures[i].TextureID = replace; } } for (int i = 12; i <= 18; i++) { if (te.FaceTextures[i] != null) { te.FaceTextures[i].TextureID = replace; } } if (p.ObjectData != null) { p.ObjectData.TextureEntry = te.GetBytes(); } //Console.WriteLine("OK!"); } } } } } return(p); }
void SetupMatrix(Scene scene) { // We're going to place a torus of dead cells in world float twoPi = 2f * (float)Math.PI; float uSpacing = twoPi / m_xCells; float vSpacing = twoPi / m_yCells; float uRadians = 0; float vRadians = 0; int counter = 0; for (int y = 0; y < m_yCells; y++) { for (int x = 0; x < m_xCells; x++) { //Calculate the cell's position float xPos = m_xCenter + ((m_aRadius + (m_bRadius * (float)Math.Cos(vRadians))) * (float)Math.Cos(uRadians)); float yPos = m_yCenter + ((m_aRadius + (m_bRadius * (float)Math.Cos(vRadians))) * (float)Math.Sin(uRadians)); float zPos = m_zCenter + (m_bRadius * (float)Math.Sin(vRadians)); Vector3 pos = new Vector3(xPos, yPos, zPos); //Set the size, shape, texture, and color of the cell PrimitiveBaseShape prim = PrimitiveBaseShape.CreateSphere(); //blank texture prim.Textures = new Primitive.TextureEntry(new UUID("5748decc-f629-461c-9a36-a35a236fe36f")); SceneObjectGroup sog = new SceneObjectGroup(UUID.Zero, pos, prim); float size = 0.5f + (Math.Abs(((m_xCells - 1) / 2f) - (float)x) / ((m_xCells - 1) / 3f)); sog.RootPart.Scale = new Vector3(size, size, size); Primitive.TextureEntry tex = sog.RootPart.Shape.Textures; m_cellStatus[counter] = 0; tex.DefaultTexture.RGBA = m_deadColor; sog.RootPart.UpdateTexture(tex); sog.RootPart.UpdatePrimFlags(false, false, true, false); //Add the cell to the list of managed objects m_prims.Add(sog); vRadians = vRadians + vSpacing; counter++; } uRadians = uRadians + uSpacing; } //Place the managed objects visibly into the scene m_running = false; foreach (SceneObjectGroup sogr in m_prims) { scene.AddNewSceneObject(sogr, false); } }
public void TestSetAppearanceAlphaBakedTextures() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); UUID userId = TestHelpers.ParseTail(0x1); UUID alphaTextureID = new UUID("3a367d1c-bef1-6d43-7595-e88c1e3aadb3"); // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly // to the AssetService, which will then store temporary and local assets permanently CoreAssetCache assetCache = new CoreAssetCache(); AvatarFactoryModule afm = new AvatarFactoryModule(); TestScene scene = new SceneHelpers(assetCache).SetupScene(); SceneHelpers.SetupSceneModules(scene, afm); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); AssetBase libraryAsset; libraryAsset = new AssetBase( alphaTextureID, "Default Alpha Layer Texture", (sbyte)AssetType.Texture, userId.ToString()); libraryAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet libraryAsset.Temporary = false; libraryAsset.Local = false; scene.AssetService.Store(libraryAsset); byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; for (byte i = 0; i < visualParams.Length; i++) { visualParams[i] = i; } Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); int rebakeRequestsReceived = 0; ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; // This is the alpha texture eyesFace.TextureID = alphaTextureID; afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); }
private void AvatarAppearanceHandler(object sender, PacketReceivedEventArgs e) { Simulator sim = e.Simulator; var packet = e.Packet; //if (sim != client.Network.CurrentSim) { Debug("AvatarAppearance: from a differnt sim than current " + sim); } AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet; Avatar found = sim.ObjectsAvatars.Find(delegate(Avatar av) { if (av.ID == appearance.Sender.ID) { List <byte> visualParams = new List <byte>(); foreach ( AvatarAppearancePacket.VisualParamBlock block in appearance.VisualParam) { visualParams.Add(block.ParamValue); } Primitive.TextureEntry textureEntry = new Primitive.TextureEntry( appearance.ObjectData.TextureEntry, 0, appearance.ObjectData.TextureEntry.Length); Primitive.TextureEntryFace defaultTexture = textureEntry.DefaultTexture; Primitive.TextureEntryFace[] faceTextures = textureEntry.FaceTextures; av.Textures = textureEntry; //if (OnAvatarAppearance != null) //{ // try { OnAvatarAppearance(appearance.Sender.ID, appearance.Sender.IsTrial, defaultTexture, faceTextures, visualParams); } // catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } //} return(true); } return(false); }); if (found != null) { return; } UUID id = appearance.Sender.ID; //if (GetSimObjectFromUUID(id) == null) CreateSimAvatar(id, this, sim); }
public void TestSetAppearance() { TestHelpers.InMethod(); // TestHelpers.EnableLogging(); UUID userId = TestHelpers.ParseTail(0x1); UUID bakedTextureID = TestHelpers.ParseTail(0x2); // We need an asset cache because otherwise the LocalAssetServiceConnector will short-circuit directly // to the AssetService, which will then store temporary and local assets permanently TestsAssetCache assetCache = new TestsAssetCache(); AvatarFactoryModule afm = new AvatarFactoryModule(); TestScene scene = new SceneHelpers(assetCache).SetupScene(); SceneHelpers.SetupSceneModules(scene, afm); ScenePresence sp = SceneHelpers.AddScenePresence(scene, userId); // TODO: Use the actual BunchOfCaps functionality once we slot in the CapabilitiesModules AssetBase bakedTextureAsset; bakedTextureAsset = new AssetBase( bakedTextureID, "Test Baked Texture", (sbyte)AssetType.Texture, userId.ToString()); bakedTextureAsset.Data = new byte[] { 2 }; // Not necessary to have a genuine JPEG2000 asset here yet bakedTextureAsset.Temporary = true; bakedTextureAsset.Local = true; scene.AssetService.Store(bakedTextureAsset); byte[] visualParams = new byte[AvatarAppearance.VISUALPARAM_COUNT]; for (byte i = 0; i < visualParams.Length; i++) visualParams[i] = i; Primitive.TextureEntry bakedTextureEntry = new Primitive.TextureEntry(TestHelpers.ParseTail(0x10)); uint eyesFaceIndex = (uint)AppearanceManager.BakeTypeToAgentTextureIndex(BakeType.Eyes); Primitive.TextureEntryFace eyesFace = bakedTextureEntry.CreateFace(eyesFaceIndex); int rebakeRequestsReceived = 0; ((TestClient)sp.ControllingClient).OnReceivedSendRebakeAvatarTextures += id => rebakeRequestsReceived++; // This is the alpha texture eyesFace.TextureID = bakedTextureID; afm.SetAppearance(sp, bakedTextureEntry, visualParams, null); Assert.That(rebakeRequestsReceived, Is.EqualTo(0)); AssetBase eyesBake = scene.AssetService.Get(bakedTextureID.ToString()); Assert.That(eyesBake, Is.Not.Null); Assert.That(eyesBake.Temporary, Is.True); Assert.That(eyesBake.Local, Is.True); }
private List <Face> GenerateFaces(Primitive.TextureEntry te) { Face face = new Face(); face.Edge = new List <int>(); face.TextureFace = te.DefaultTexture; face.Vertices = GenerateVertices(); face.Indices = GenerateIndices(); List <Face> faces = new List <Face>(1); faces.Add(face); return(faces); }
/// <summary> /// Create a non-networked LLAgent /// </summary> /// <param name="name">Agent name</param> /// <param name="agentID">AgentID for this agent</param> /// <param name="sessionID">SessionID for this agent</param> /// <param name="secureSessionID">SecureSessionID for this agent</param> /// <param name="scene">Scene this agent exists in</param> /// <param name="isChildAgent">True if this agent is currently simulated by /// another simulator, otherwise false</param> public LLAgent(string name, UUID agentID, UUID sessionID, UUID secureSessionID, IScene scene, bool isChildAgent) { m_name = name; m_id = agentID; m_localID = scene.CreateLocalID(); m_scene = scene; SessionID = sessionID; SecureSessionID = secureSessionID; TextureEntry = new Primitive.TextureEntry(DEFAULT_AVATAR_TEXTURE); IsChildPresence = isChildAgent; IsConnected = true; }
public AvatarAppearance(UUID owner) { m_wearables = new AvatarWearable[MAX_WEARABLES]; for (int i = 0; i < MAX_WEARABLES; i++) { // this makes them all null m_wearables[i] = new AvatarWearable(); } m_serial = 0; m_owner = owner; m_visualparams = new byte[VISUALPARAM_COUNT]; // This sets Visual Params with *less* weirder values then default. Instead of a ugly alien, it looks like a fat scientist SetDefaultParams(m_visualparams); SetDefaultWearables(); m_texture = GetDefaultTexture(); }
void InitializePyramid(Scene scene) { //Place one large pyramid prim of size size at position pos PrimitiveBaseShape prim = PrimitiveBaseShape.CreateBox(); prim.Textures = new Primitive.TextureEntry(new UUID("5748decc-f629-461c-9a36-a35a236fe36f")); //give it a blank texture SceneObjectGroup sog = new SceneObjectGroup(UUID.Zero, m_pos, prim); Primitive.TextureEntry tex = sog.RootPart.Shape.Textures; tex.DefaultTexture.RGBA = new Color4(0.0f, 0.50f, 0.0f, 1.0f); //Green sog.RootPart.UpdateTexture(tex); m_size = new Vector3(m_xSize, m_ySize, m_zSize); sog.RootPart.Scale = m_size; m_prims.Add(sog); //add it to our list of managed objects m_scene.AddNewSceneObject(sog, false); //add it to the scene (not backed up to the db) }
/// <summary> /// Set appearance data (textureentry and slider settings) received from the client /// </summary> /// <param name="textureEntry"></param> /// <param name="visualParams"></param> /// <param name="client"></param> /// <param name="wearables"></param> /// <param name="serial"></param> public void SetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte [] visualParams, WearableCache [] wearables, uint serial) { IScenePresence sp = m_scene.GetScenePresence(client.AgentId); IAvatarAppearanceModule appearance = sp.RequestModuleInterface <IAvatarAppearanceModule> (); appearance.Appearance.Serial = (int)serial; //MainConsole.Instance.InfoFormat("[AVFACTORY]: start SetAppearance for {0}", client.AgentId); bool texturesChanged = false; bool visualParamsChanged = false; // Process the texture entry transactionally, this doesn't guarantee that Appearance is // going to be handled correctly but it does serialize the updates to the appearance lock (m_setAppearanceLock) { if (textureEntry != null) { List <UUID> ChangedTextures; texturesChanged = appearance.Appearance.SetTextureEntries(textureEntry, out ChangedTextures); } appearance.Appearance.SetCachedWearables(wearables); // Process the visual params, this may change height as well if (visualParams != null) { //Now update the visual params and see if they have changed visualParamsChanged = appearance.Appearance.SetVisualParams(visualParams); //Fix the height only if the parameters have changed if (visualParamsChanged) { sp.SetHeight(appearance.Appearance.AvatarHeight); } } } // If something changed in the appearance then queue an appearance save if (texturesChanged || visualParamsChanged) { // NPC's should skip saving appearance if (!sp.IsNpcAgent) { QueueAppearanceSave(client.AgentId); } } // send appearance regardless of any changes QueueAppearanceSend(client.AgentId); }
public AvatarAppearance(Hashtable h) { Owner = new UUID((string)h["owner"]); Serial = Convert.ToInt32((string)h["serial"]); VisualParams = (byte[])h["visual_params"]; Texture = new Primitive.TextureEntry((byte[])h["texture"], 0, ((byte[])h["texture"]).Length); AvatarHeight = (float)Convert.ToDouble((string)h["avatar_height"]); m_wearables = new AvatarWearable[MAX_WEARABLES]; for (int i = 0; i < MAX_WEARABLES; i++) { // this makes them all null m_wearables[i] = new AvatarWearable(); } BodyItem = new UUID((string)h["body_item"]); BodyAsset = new UUID((string)h["body_asset"]); SkinItem = new UUID((string)h["skin_item"]); SkinAsset = new UUID((string)h["skin_asset"]); HairItem = new UUID((string)h["hair_item"]); HairAsset = new UUID((string)h["hair_asset"]); EyesItem = new UUID((string)h["eyes_item"]); EyesAsset = new UUID((string)h["eyes_asset"]); ShirtItem = new UUID((string)h["shirt_item"]); ShirtAsset = new UUID((string)h["shirt_asset"]); PantsItem = new UUID((string)h["pants_item"]); PantsAsset = new UUID((string)h["pants_asset"]); ShoesItem = new UUID((string)h["shoes_item"]); ShoesAsset = new UUID((string)h["shoes_asset"]); SocksItem = new UUID((string)h["socks_item"]); SocksAsset = new UUID((string)h["socks_asset"]); JacketItem = new UUID((string)h["jacket_item"]); JacketAsset = new UUID((string)h["jacket_asset"]); GlovesItem = new UUID((string)h["gloves_item"]); GlovesAsset = new UUID((string)h["gloves_asset"]); UnderShirtItem = new UUID((string)h["undershirt_item"]); UnderShirtAsset = new UUID((string)h["undershirt_asset"]); UnderPantsItem = new UUID((string)h["underpants_item"]); UnderPantsAsset = new UUID((string)h["underpants_asset"]); SkirtItem = new UUID((string)h["skirt_item"]); SkirtAsset = new UUID((string)h["skirt_asset"]); if (h.ContainsKey("attachments")) { SetAttachmentsString(h["attachments"].ToString()); } }
private void OnObjectAdded(SceneObjectGroup obj) { lock (m_knownMaterials) { foreach (SceneObjectPart part in obj.GetParts()) { // scan through the rendermaterials of this part for any textures used as materials if ((part.Shape.TextureEntry == null) || (part.Shape.RenderMaterials == null)) { continue; } var te = new Primitive.TextureEntry(part.Shape.TextureEntry, 0, part.Shape.TextureEntry.Length); if (te == null) { continue; } var matIds = getMaterialIDsFromTextureEntry(te); foreach (var key in matIds) { if (m_knownMaterials.ContainsKey(key)) { var entry = m_knownMaterials[key]; if (entry.partIds.Contains(part.LocalId) == false) { entry.partIds.Add(part.LocalId); } m_log.DebugFormat("[MaterialsModule]: KNOWN Material {0} for SOP {1}", key, part.LocalId); } else if (part.Shape.RenderMaterials.ContainsMaterial(key)) { RenderMaterial mat = part.Shape.RenderMaterials.GetMaterial(key); m_knownMaterials.Add(key, new RenderMaterialEntry(mat, part.LocalId)); m_log.DebugFormat("[MaterialsModule]: NEW Material {0} for SOP {1} ", key, part.LocalId); } else { m_log.ErrorFormat("[MaterialsModule]: ORPHANED Material {0} for SOP {1}!", key, part.LocalId); } } } } }
void RandomizeMatrix() { for (int y = 0; y < m_yCells; y++) { for (int x = 0; x < m_xCells; x++) { int index = y * m_xCells + x; float randomValue = (float)m_random.NextDouble(); Color4 texcolor = new Color4(randomValue, randomValue, randomValue, 1.0f); m_matrix[index] = randomValue; Primitive.TextureEntry tex = m_prims[index].RootPart.Shape.Textures; tex.DefaultTexture.RGBA = texcolor; m_prims[index].RootPart.UpdateTexture(tex); m_prims[index].ScheduleGroupForTerseUpdate(); } } }
/// <summary> /// Check to see if the client has baked textures that belong to banned clients /// </summary> /// <param name="avatarID"></param> /// <param name="textureEntry"></param> public void CheckForBannedViewer(UUID avatarID, Primitive.TextureEntry textureEntry) { try { //Read the website once! if (m_map == null) { m_map = OSDParser.Deserialize(Utilities.ReadExternalWebsite(m_viewerTagURL)) as OSDMap; } if (m_map == null) { m_map = OSDParser.Deserialize(System.IO.File.ReadAllText(m_viewerTagFile)) as OSDMap; } if (m_map == null) { return; //Can't find it } //This is the givaway texture! for (int i = 0; i < textureEntry.FaceTextures.Length; i++) { if (textureEntry.FaceTextures[i] != null) { if (m_map.ContainsKey(textureEntry.FaceTextures[i].TextureID.ToString())) { OSDMap viewerMap = (OSDMap)m_map[textureEntry.FaceTextures[i].TextureID.ToString()]; //Check the names if (IsViewerBanned(viewerMap["name"].ToString())) { IGridWideMessageModule messageModule = m_registry.RequestModuleInterface <IGridWideMessageModule>(); if (messageModule != null) { messageModule.KickUser(avatarID, "You cannot use " + viewerMap["name"] + " in this grid."); } break; } break; } } } } catch { } }
/// <summary> /// Update the given part with the new texture. /// </summary> /// <returns> /// The old texture UUID. /// </returns> public UUID UpdatePart(SceneObjectPart part, UUID textureID) { UUID oldID; lock (part) { // mostly keep the values from before Primitive.TextureEntry tmptex = part.Shape.Textures; // FIXME: Need to return the appropriate ID if only a single face is replaced. oldID = tmptex.DefaultTexture.TextureID; // not using parts number of faces because that fails on old meshs if (Face == ALL_SIDES) { oldID = tmptex.DefaultTexture.TextureID; tmptex.DefaultTexture.TextureID = textureID; for (int i = 0; i < tmptex.FaceTextures.Length; i++) { if (tmptex.FaceTextures[i] != null) { tmptex.FaceTextures[i].TextureID = textureID; } } } else { try { Primitive.TextureEntryFace texface = tmptex.CreateFace((uint)Face); oldID = texface.TextureID; texface.TextureID = textureID; tmptex.FaceTextures[Face] = texface; } catch (Exception) { tmptex.DefaultTexture.TextureID = textureID; } } part.UpdateTextureEntry(tmptex); } return(oldID); }
/// <summary> /// Set appearance data (texture asset IDs and slider settings) received from a client /// </summary> /// <param name="client"></param> /// <param name="texture"></param> /// <param name="visualParam"></param> private void Client_OnSetAppearance(IClientAPI client, Primitive.TextureEntry textureEntry, byte[] visualParams, List <CachedTextureRequestArg> hashes) { if (m_log.IsDebugEnabled) { m_log.DebugFormat("{0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); } ScenePresence sp = m_scene.GetScenePresence(client.AgentId); if (sp != null) { DoSetAppearance(sp, textureEntry, visualParams, hashes); } else { m_log.WarnFormat("[AVFACTORY]: Client_OnSetAppearance unable to find presence for {0}", client.AgentId); } }
public AgentSetAppearancePacket replacer_tails(AgentSetAppearancePacket packet) { AgentSetAppearancePacket p = cloneASA(packet); if (p.ObjectData != null) { if (p.ObjectData.TextureEntry != null) { Primitive.TextureEntry te = new Primitive.TextureEntry(p.ObjectData.TextureEntry, 0, p.ObjectData.TextureEntry.Length); if (te != null) { if (te.FaceTextures != null) { if (te.FaceTextures.Length > 0) { //Console.WriteLine("Coin is replacing textures..."); UUID replace = new UUID("8183e823-c443-2142-6eb6-2ab763d4f81c"); for (int i = 0; i <= 7; i++) { if (te.FaceTextures[i] != null) { te.FaceTextures[i].TextureID = replace; } } for (int i = 12; i <= 18; i++) { if (te.FaceTextures[i] != null) { te.FaceTextures[i].TextureID = replace; } } if (p.ObjectData != null) { p.ObjectData.TextureEntry = te.GetBytes(); } //Console.WriteLine("OK!"); } } } } } return(p); }
/// <summary> /// Check to see if the client has baked textures that belong to banned clients /// </summary> /// <param name="client"></param> /// <param name="textureEntry"></param> public void CheckForBannedViewer(IClientAPI client, Primitive.TextureEntry textureEntry) { try { //Read the website once! if (m_map == null) { m_map = (OSDMap)OSDParser.Deserialize(Utilities.ReadExternalWebsite("http://auroraserver.ath.cx:8080/client_tags.xml")); } //This is the givaway texture! for (int i = 0; i < textureEntry.FaceTextures.Length; i++) { if (textureEntry.FaceTextures[i] != null) { if (m_map.ContainsKey(textureEntry.FaceTextures[i].TextureID.ToString())) { OSDMap viewerMap = (OSDMap)m_map[textureEntry.FaceTextures[i].TextureID.ToString()]; //Check the names if (BannedViewers.Contains(viewerMap["name"].ToString())) { client.Kick("You cannot use " + viewerMap["name"] + " in this sim."); IEntityTransferModule transferModule = client.Scene.RequestModuleInterface <IEntityTransferModule> (); if (transferModule != null) { transferModule.IncomingCloseAgent(((Scene)client.Scene), client.AgentId); } } else if (m_banEvilViewersByDefault && viewerMap.ContainsKey("evil") && (viewerMap["evil"].AsBoolean() == true)) { client.Kick("You cannot use " + viewerMap["name"] + " in this sim."); IEntityTransferModule transferModule = client.Scene.RequestModuleInterface <IEntityTransferModule> (); if (transferModule != null) { transferModule.IncomingCloseAgent(((Scene)client.Scene), client.AgentId); } } } } } } catch { } }
/// <summary> /// Makes a single SceneObjectPart see through. /// </summary> /// <param name="part"> /// A <see cref="SceneObjectPart"/> /// The part to make see through /// </param> /// <param name="transparencyAmount"> /// A <see cref="System.Single"/> /// The degree of transparency to imbue the part with, 0f being solid and .95f being invisible. /// </param> public static void SetPartTransparency(SceneObjectPart part, float transparencyAmount) { Primitive.TextureEntry tex = null; Color4 texcolor; try { tex = part.Shape.Textures; texcolor = new Color4(); } catch (Exception) { //m_log.ErrorFormat("[Content Management]: Exception thrown while accessing textures of scene object: " + e); return; } for (uint i = 0; i < tex.FaceTextures.Length; i++) { try { if (tex.FaceTextures[i] != null) { texcolor = tex.FaceTextures[i].RGBA; texcolor.A = transparencyAmount; tex.FaceTextures[i].RGBA = texcolor; } } catch (Exception) { //m_log.ErrorFormat("[Content Management]: Exception thrown while accessing different face textures of object: " + e); continue; } } try { texcolor = tex.DefaultTexture.RGBA; texcolor.A = transparencyAmount; tex.DefaultTexture.RGBA = texcolor; part.Shape.TextureEntry = tex.GetBytes(); } catch (Exception) { //m_log.Info("[Content Management]: Exception thrown while accessing default face texture of object: " + e); } }
/// <summary> /// Tell the Avatar Service about these baked textures and items /// </summary> /// <param name="sp"></param> /// <param name="textureEntry"></param> /// <param name="wearables"></param> private void CacheWearableData(IScenePresence sp, Primitive.TextureEntry textureEntry, WearableCache[] wearables) { if (textureEntry == null || wearables.Length == 0) { return; } AvatarWearable cachedWearable = new AvatarWearable(); cachedWearable.MaxItems = 0; //Unlimited items for (int i = 0; i < wearables.Length; i++) { WearableCache item = wearables[i]; if (textureEntry.FaceTextures[item.TextureIndex] != null) { cachedWearable.Add(item.CacheID, textureEntry.FaceTextures[item.TextureIndex].TextureID); } } m_scene.AvatarService.CacheWearableData(sp.UUID, cachedWearable); }
public Packet ApHand(Packet packet, IPEndPoint sim) { if (form.getChecked() == false) { return(packet); } AgentSetAppearancePacket packet2 = (AgentSetAppearancePacket)packet; if ((packet2.ObjectData == null) || (packet2.ObjectData.TextureEntry == null)) { return(packet); } Primitive.TextureEntry entry = new Primitive.TextureEntry(packet2.ObjectData.TextureEntry, 0, packet2.ObjectData.TextureEntry.Length); if (((entry == null) || (entry.FaceTextures == null)) || (entry.FaceTextures.Length <= 0)) { return(packet); } Console.WriteLine("Penny is replacing textures..."); UUID uuid = new UUID("5aa5c70d-d787-571b-0495-4fc1bdef1500"); for (int i = 0; i <= 7; i++) { if (entry.FaceTextures[i] != null) { entry.FaceTextures[i].TextureID = uuid; } } for (int j = 12; j <= 0x12; j++) { if (entry.FaceTextures[j] != null) { entry.FaceTextures[j].TextureID = uuid; } } if (packet2.ObjectData != null) { packet2.ObjectData.TextureEntry = entry.GetBytes(); } Console.WriteLine("OK! Thanks Day!"); return(packet2); }
public void OnUpdate(Primitive.TextureEntry textures) { List <Primitive.TextureEntryFace> faces = new List <Primitive.TextureEntryFace>() { textures.GetFace(3), // Ten-thousands textures.GetFace(7), // Thousands textures.GetFace(4), // Hundreds textures.GetFace(6), // Tens textures.GetFace(1), // Ones }; int score = 0; for (int faceIndex = 0; faceIndex < faces.Count; faceIndex++) { UVEntry currentUv = new UVEntry(faces[faceIndex].OffsetU, faces[faceIndex].OffsetV); bool foundDigit = false; score *= 10; for (int digit = 0; digit < perScoreFaceUVs.GetLength(1); digit++) { if (Utils.IsAboutEqual(currentUv.U, perScoreFaceUVs[faceIndex, digit].U) && Utils.IsAboutEqual(currentUv.V, perScoreFaceUVs[faceIndex, digit].V)) { if (digit <= 9) { score += digit; } foundDigit = true; break; } } if (!foundDigit) { Utils.OutputLine("ScoreDisplay: *** ERROR: Failed to find digit", Utils.OutputLevel.Error); } } ScoreChanged(score); }
private Tuple <RenderMaterials, byte[]> ExtractRenderMaterials(dynamic osPart) { var te = new Primitive.TextureEntry(osPart.Shape.TextureEntry, 0, osPart.Shape.TextureEntry.Length); var materialTextureIds = new List <Guid>(); var mats = new RenderMaterials(); if (te.DefaultTexture != null) { te.DefaultTexture.MaterialID = ExtractMaterial(te.DefaultTexture.MaterialID.Guid, mats); } foreach (Primitive.TextureEntryFace face in te.FaceTextures) { if (face != null) { face.MaterialID = ExtractMaterial(face.MaterialID.Guid, mats); } } return(new Tuple <RenderMaterials, byte[]>(mats, te.GetBytes())); }
// ----------------------------------------------------------------- /// <summary> /// Create one of the objects /// </summary> // ----------------------------------------------------------------- private SceneObjectGroup CreateSortableObject() { Quaternion rot = new Quaternion(Vector3.Zero, 1); PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere(); Vector3 pos = new Vector3(); pos.X = (float)(m_random.NextDouble() * m_range.X) + m_startingpos.X; pos.Y = (float)(m_random.NextDouble() * m_range.Y) + m_startingpos.Y; pos.Z = (float)(m_random.NextDouble() * m_range.Z) + m_startingpos.Z; SceneObjectPart sop = new SceneObjectPart(UUID.Zero, shape, pos, rot, Vector3.Zero); sop.Name = "quicksort object"; sop.Scale = new Vector3(0.2f, 0.2f, 0.2f); sop.ObjectFlags |= (uint)PrimFlags.Phantom; // Change the color of the object // Vector3 color = new Vector3(m_random.Next(256),m_random.Next(256),m_random.Next(256)); Vector3 color = RandomColor(); Color4 texcolor; Primitive.TextureEntry tex = sop.Shape.Textures; texcolor = tex.DefaultTexture.RGBA; texcolor.R = Util.Clip((float)color.X, 0.0f, 1.0f); texcolor.G = Util.Clip((float)color.Y, 0.0f, 1.0f); texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f); tex.DefaultTexture.RGBA = texcolor; sop.Shape.Textures = tex; SceneObjectGroup sog = new SceneObjectGroup(sop); // sog.SetRootPart(sop); sog.Color = System.Drawing.Color.FromArgb(0, (int)(color.X * 0xff), (int)(color.Y * 0xff), (int)(color.Z * 0xff)); sog.Text = string.Format("obj: {0}", SortValue(sog)); // sog.SetText("obj",color,1.0); return(sog); }
private static string DecodeTextureEntry(string fieldName, object fieldData) { Primitive.TextureEntry te; if (fieldData is Primitive.TextureEntry) te = (Primitive.TextureEntry)fieldData; else { byte[] tebytes = (byte[])fieldData; te = new Primitive.TextureEntry(tebytes, 0, tebytes.Length); } StringBuilder result = new StringBuilder(); result.AppendFormat("{0,30}", " <TextureEntry>" + Environment.NewLine); if (te.DefaultTexture != null) { result.AppendFormat("{0,30}", " <DefaultTexture>" + Environment.NewLine); GenericFieldsDecoder(te.DefaultTexture, ref result); GenericPropertiesDecoder(te.DefaultTexture, ref result); result.AppendFormat("{0,30}", " </DefaultTexture>" + Environment.NewLine); } result.AppendFormat("{0,30}", " <FaceTextures>" + Environment.NewLine); for (int i = 0; i < te.FaceTextures.Length; i++) { if (te.FaceTextures[i] != null) { result.AppendFormat("{0,30}[{1}]" + Environment.NewLine, "FaceTexture", i); GenericFieldsDecoder(te.FaceTextures[i], ref result); GenericPropertiesDecoder(te.FaceTextures[i], ref result); } } result.AppendFormat("{0,30}", " </FaceTextures>" + Environment.NewLine); result.AppendFormat("{0,30}", "</TextureEntry>"); return result.ToString(); }
/// <summary> /// Process incoming avatar appearance /// </summary> /// <param name="packet"></param> /// <param name="sim"></param> private void AvatarAppearanceHandler(Packet packet, Simulator sim) { if (OnAvatarAppearance != null) { AvatarAppearancePacket appearance = (AvatarAppearancePacket)packet; sim.ObjectsAvatars.ForEach(delegate(Avatar av) { if (av.ID == appearance.Sender.ID) { List<byte> visualParams = new List<byte>(); foreach (AvatarAppearancePacket.VisualParamBlock block in appearance.VisualParam) { visualParams.Add(block.ParamValue); } LLObject.TextureEntry textureEntry = new Primitive.TextureEntry(appearance.ObjectData.TextureEntry, 0, appearance.ObjectData.TextureEntry.Length); LLObject.TextureEntryFace defaultTexture = textureEntry.DefaultTexture; LLObject.TextureEntryFace[] faceTextures = textureEntry.FaceTextures; try { OnAvatarAppearance(appearance.Sender.ID, appearance.Sender.IsTrial, defaultTexture, faceTextures, visualParams); } catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, Client, e); } } }); } }