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);
        }
Example #3
0
        /// <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;
                }
            }
        }
Example #4
0
        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);
        }
Example #5
0
 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);
             }
         }
     }
 }
Example #6
0
        /// <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);
            }
        }
Example #7
0
File: coin.cs Project: zadark/par
        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));
        }
Example #10
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);
        }
Example #12
0
        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);
        }
Example #13
0
        /// <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;
        }
Example #14
0
 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);
        }
Example #17
0
        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();
         }
     }
 }
Example #20
0
 /// <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
     {
     }
 }
Example #21
0
            /// <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);
            }
Example #22
0
        /// <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);
            }
        }
Example #23
0
File: coin.cs Project: zadark/par
        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);
        }
Example #24
0
        /// <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 { }
        }
Example #25
0
        /// <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);
            }
        }
Example #26
0
        /// <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);
        }
Example #27
0
File: Penny.cs Project: zadark/par
        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);
        }
Example #28
0
        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()));
        }
Example #30
0
        // -----------------------------------------------------------------
        /// <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); }
                    }
                });
            }
        }