Ejemplo n.º 1
0
        public void Init(UUID id)
        {
            if (id == UUID.Zero)
            {
                return;
            }
            AssetType assetType = AssetType.Texture;
            SimAsset  sa        = SimAssetStore.FindOrCreateAsset(id, assetType);

            if (!sa.NeedsRequest)
            {
                return;
            }

            {
                StartTextureDownload(id);
            }
            sa.NeedsRequest = false;
            lock (AssetRequestType)
            {
                if (AssetRequestType.ContainsKey(id))
                {
                    return;
                }
                AssetRequestType[id] = AssetType.Texture;
            }

            // Callbacks
            client.Assets.RequestImage(id, ImageType.Normal, 101300.0f, 0, 0, delegate(TextureRequestState state, AssetTexture assetTexture)
            {
                if (state == TextureRequestState.Finished)
                {
                    Assets_OnImageReceived(assetTexture);
                    sa.SetAsset(assetTexture);
                    return;
                }
                else if (state == TextureRequestState.Progress)
                {
                    // DisplayPartialImage(assetTexture);
                }
                else if (state == TextureRequestState.Timeout)
                {
                    AssetRequestType.Remove(id);
                }
            }, false);
        }
Ejemplo n.º 2
0
        internal void OnAssetDownloaded(UUID uUID, Asset asset)
        {
            EnsureCached(asset, uUID);
            WorldObjects.RegisterUUIDMaybe(uUID, asset);
            SimAsset A = SimAssetStore.FindOrCreateAsset(uUID, asset.AssetType);

            A.SetAsset(asset);
            //A.TypeData = asset.AssetData;



            if (false)
            {
                BotClient      Client = this.client;
                AutoResetEvent UploadCompleteEvent = new AutoResetEvent(false);
                if (Client.AnimationFolder == UUID.Zero)
                {
                    Client.AnimationFolder = Client.Inventory.FindFolderForType(AssetType.Animation);
                }

                DateTime start = new DateTime();
                Client.Inventory.RequestCreateItemFromAsset(asset.AssetData, A.Name, "Anim captured " + uUID,
                                                            AssetType.Animation,
                                                            InventoryType.Animation, Client.AnimationFolder,
                                                            delegate(bool success, string status, UUID itemID,
                                                                     UUID assetID)
                {
                    WriteLine(
                        String.Format(
                            "RequestCreateItemFromAsset() returned: Success={0}, Status={1}, ItemID={2}, AssetID={3}",
                            success, status, itemID, assetID));
                    WriteLine(String.Format("Upload took {0}",
                                            DateTime.Now.
                                            Subtract(start)));
                    UploadCompleteEvent.Set();
                });

                UploadCompleteEvent.WaitOne();

                //A.Name
                //SetAnimationName(asset.AssetID, s);
            }
            //              Debug(s);
            //                        RegisterUUID(asset.AssetID, s);
        }
Ejemplo n.º 3
0
 private void Assets_OnImageReceived(AssetTexture assetTexture)
 {
     try
     {
         byte[]       jpegdata;
         ManagedImage imgManaged;
         Image        image;
         SimAsset     sa = SimAssetStore.FindOrCreateAsset(assetTexture.AssetID, assetTexture.AssetType);
         if (!OpenJPEG.DecodeToImage(assetTexture.AssetData, out imgManaged, out image))
         {
             throw new Exception("decoding failure");
         }
         jpegdata     = assetTexture.AssetData;
         sa._TypeData = jpegdata;
         UUIDTypeObjectSetValue(assetTexture.AssetID, jpegdata);
         assetTexture.Decode();
     }
     catch (Exception excp)
     {
         System.Console.WriteLine("Error decoding image: " + excp.Message);
     }
 }
Ejemplo n.º 4
0
        private CogbotEvent AnimEvent(UUID uuid, SimEventType status, int serial)
        {
            SimAsset a = SimAssetStore.FindOrCreateAsset(uuid, AssetType.Animation);

            string headingString;

            switch (status)
            {
            case SimEventType.Start:
            {
                headingString = "eventOccursAt";
                break;
            }

            case SimEventType.Stop:
            {
                headingString = "toLocation";
                break;
            }

            default:
            {
                headingString = "eventOccursAt";
                break;
            }
            }
            object      m  = a.GetMeaning();
            CogbotEvent oe = CreateAEvent(status, "OnAnim", SimEventType.ANIM | SimEventType.REGIONAL,
                                          WorldObjects.ToParameter("doneBy", this),
                                          WorldObjects.ToParameter("isa", a),
                                          WorldObjects.ToParameter(headingString, GetHeading()));

            oe.Serial = serial;
            if (m != null)
            {
                oe.AddParam("isa", m);
            }
            return(oe);
        }
Ejemplo n.º 5
0
        public ImageDownload StartTextureDownload(UUID id)
        {
            AssetType  type     = AssetType.Texture;
            SimAsset   simAsset = SimAssetStore.FindOrCreateAsset(id, type);
            AssetCache Cache    =
                (RegionMasterTexturePipeline == null ? null : RegionMasterTexturePipeline.Cache);

            if (Cache != null && Cache.HasAsset(id

#if COGBOT_LIBOMV
                                                , type
#endif
                                                ))
            {
                ImageDownload dl = Cache.GetCachedImage(id);
                if (dl != null)
                {
                    simAsset.SetAsset(dl);
                }
                return(dl);
            }
            lock (TexturesSkipped) if (TexturesSkipped.Contains(id))
                {
                    return(null);
                }
            lock (AssetRequestType)
            {
                if (AssetRequestType.ContainsKey(id))
                {
                    return(null);
                }
                AssetRequestType[id] = AssetType.Texture;
            }
            TextureRequested++;
            SlowConnectedQueue.Enqueue(() => client.Assets.RequestImage(id, ImageType.Normal, RegionMasterTexturePipeline_OnDownloadFinished));
            return(null);
        }
Ejemplo n.º 6
0
        //public override void Assets_OnXferReceived(XferDownload xfer)
        //{
        //    //AssetRequests.
        //    //RegisterUUIDMaybe(xfer.ID, xfer);
        //}

        public SimAsset EnqueueRequestAsset(UUID id, AssetType assetType, bool priority)
        {
            if (id == UUID.Zero)
            {
                return(null);
            }
            SimAsset sa = SimAssetStore.FindOrCreateAsset(id, assetType);

            if (!sa.NeedsRequest)
            {
                return(sa);
            }
            if (assetType == AssetType.Texture)
            {
                StartTextureDownload(id);
                return(sa);
            }
            sa.NeedsRequest = false;
            if (assetType == AssetType.SoundWAV)
            {
                return(sa);
            }
            //if (assetType == AssetType.Sound) return sa;
            lock (AssetRequestType)
            {
                if (AssetRequestType.ContainsKey(id))
                {
                    return(sa);
                }
                AssetRequestType[id] = assetType;
                SlowConnectedQueue.Enqueue(
                    () => RegionMasterTexturePipeline.RequestAsset(id, assetType, priority, Assets_OnAssetReceived));
            }

            return(sa);
        }
Ejemplo n.º 7
0
        public byte[] TextureBytesForUUID(UUID uUID)
        {
            //imlicitly DeclareTexture(uUID);
            SimAsset assettt   = SimAssetStore.FindOrCreateAsset(uUID, AssetType.Texture);
            var      AssetData = assettt.AssetData;

            if (AssetData != null)
            {
                assettt.IsTraced = false;
                return(AssetData);
            }
            assettt.IsTraced = true;
            ImageDownload ID = null;

            //lock (uuidTypeObject)
            {
                object iObject;
                if (UUIDTypeObjectTryGetValue(uUID, out iObject))
                {
                    if (iObject is ImageDownload)
                    {
                        ID = (ImageDownload)iObject;
                    }
                }
            }
            if (ID == null)
            {
                ID = StartTextureDownload(uUID);
                if (ID == null)
                {
                    var giveUpTick = DateTime.Now;//.AddMinutes(1);// +1 * 60000;
                    while (ID == null)
                    {
                        ID = StartTextureDownload(uUID);
                        if (ID == null)
                        {
                            lock (TexturesSkipped) if (TexturesSkipped.Contains(uUID))
                                {
                                    return(null);
                                }
                            if (DateTime.Now > giveUpTick)
                            {
                                lock (TexturesSkipped) TexturesSkipped.Add(uUID);
                                //if (Settings.LOG_LEVEL == Helpers.LogLevel.Warning)
                                Debug("-- ---- ---GIVEUP SculptMesh " + uUID);
                                return(null);
                            }
                            //Thread.Sleep(5000);
                            DoEvents();
                            return(null);
                        }
                    }
                }
                lock (UUIDTypeObjectLock)
                {
                    UUIDTypeObjectSetValue(uUID, ID);
                }
            }
            if (Settings.LOG_LEVEL == Helpers.LogLevel.Debug)
            {
                Debug("-|-|- SUCCEED SculptMesh " + uUID);
            }

            return(ID.AssetData);
        }
Ejemplo n.º 8
0
 public void DeclareTexture(UUID tid)
 {
     SimAssetStore.FindOrCreateAsset(tid, AssetType.Texture);
 }
        static UUIDGleaner GetUUIDGleaner(string p, MemberInfo info)
        {
            lock (UUID2Type)
                if (UUID2Type.Count == 0)
                {
                    UUIDGleaner texture  = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Texture); });
                    UUIDGleaner avatar   = ((obj, sim) => { GridMaster.DeclareAvatarProfile(obj); });
                    UUIDGleaner task     = ((obj, sim) => { GridMaster.DeclareTask(obj, sim); });
                    UUIDGleaner nothing  = ((obj, sim) => { });
                    UUIDGleaner objectID = ((obj, sim) => { GridMaster.CreateSimObject(obj, GridMaster, sim); });
                    UUIDGleaner role     = ((obj, sim) => DeclareGeneric("GroupRole", obj, " +p"));
                    UUID2Type[""]          = nothing;
                    UUID2Type["ID"]        = nothing;
                    UUID2Type["Sound"]     = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Sound); });
                    UUID2Type["Gesture"]   = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Gesture); });
                    UUID2Type["Landmark"]  = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Landmark); });
                    UUID2Type["Animation"] = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Animation); });
                    UUID2Type["Clothing"]  = ((obj, sim) => { SimAssetStore.FindOrCreateAsset(obj, AssetType.Clothing); });
                    UUID2Type["Region"]    = ((obj, sim) => { RegisterUUIDMaybe(obj, typeof(SimRegion)); });
                    UUID2Type["Estate"]    = ((obj, sim) => { RegisterUUIDMaybe(obj, typeof(EstateAssetType)); });
                    UUID2Type["Image"]
                                           = UUID2Type["SculptTexture"]
                                           = UUID2Type["Photo"]
                                           = UUID2Type["Insignia"]
                                           = UUID2Type["Picture"]
                                           = UUID2Type["Texture"]
                                           = UUID2Type["Sculpt"]
                                           = UUID2Type["ProfileImage"] = texture;
                    UUID2Type["Owner"]     = UUID2Type["Partner"] = UUID2Type["Creator"] = UUID2Type["Founder"] = avatar;
                    UUID2Type["Group"]     = ((obj, sim) => { GridMaster.DeclareGroup(obj); });
                    UUID2Type["Object"]    = objectID;
                    UUID2Type["Primitive"] = objectID;
                    // todo inventory item
                    UUID2Type["OwnerRole"] = role;
                    UUID2Type["FromTask"]  = task;
                    UUID2Type["FolderID"]  = nothing;
                    UUID2Type["ItemID"]    = nothing;
                    // ussualyl objects but need to confirm: The Key of the specified target object or avatar particles will follow"
                    UUID2Type["Target"] = nothing;
                    UUID2Type["Asset"]  = nothing;
                }
            UUIDGleaner o;

            lock (UUID2Type)
            {
                if (UUID2Type.TryGetValue(p, out o))
                {
                    return(o);
                }
                foreach (var s in new[] { "From", "To", "Next", "Last", "First", "Second", "Life", "Life", })
                {
                    if (p.StartsWith(s))
                    {
                        return(UUID2Type[p] = GetUUIDGleaner(p.Substring(s.Length), info));
                    }
                }
                foreach (var s in new[] { "ID", "UUID", "Asset" })
                {
                    if (p.EndsWith(s))
                    {
                        return(UUID2Type[p] = GetUUIDGleaner(p.Substring(0, p.Length - s.Length), info));
                    }
                }
                Debug("Dont know what UUID means in " + p);
                return((obj, sim) => { RegisterUUIDMaybe(obj, info); });
            }
        }
Ejemplo n.º 10
0
        protected override List <SimAsset> GetParts()
        {
            AssetGesture gestureAsset = GetGesture();

            //            StringBuilder sb = new StringBuilder();
            //sb.Append("2\n");
            if (gestureAsset == null)
            {
                return(null);
            }
            Name = gestureAsset.Trigger;
            //sb.Append(TriggerKey + "\n");
            //sb.Append(TriggerKeyMask + "\n");
            //sb.Append(Trigger + "\n");
            Name = gestureAsset.ReplaceWith;//sb.Append(ReplaceWith + "\n");

            List <GestureStep> Sequence = gestureAsset.Sequence;
            int count = 0;

            if (Sequence != null)
            {
                count = Sequence.Count;
            }
            List <SimAsset> parts = new List <SimAsset>(count);

            //sb.Append(count + "\n");
            _Length = 0;
            for (int i = 0; i < count; i++)
            {
                GestureStep step = Sequence[i];
                // sb.Append((int)step.GestureStepType + "\n");
                SimAsset asset;

                switch (step.GestureStepType)
                {
                case GestureStepType.EOF:
                    goto Finish;

                case GestureStepType.Animation:
                    GestureStepAnimation animstep = (GestureStepAnimation)step;
                    asset      = SimAssetStore.FindOrCreateAsset(animstep.ID, AssetType.Animation);
                    asset.Name = animstep.Name;
                    if (animstep.AnimationStart)
                    {
                        parts.Add(asset);
                        //                            sb.Append("0\n");
                        _Length += asset.Length;
                    }
                    else
                    {
                        //             sb.Append("1\n");
                    }
                    break;

                case GestureStepType.Sound:
                    GestureStepSound soundstep = (GestureStepSound)step;
                    asset      = SimAssetStore.FindOrCreateAsset(soundstep.ID, AssetType.Sound);
                    asset.Name = soundstep.Name;
                    parts.Add(asset);
                    _Length += asset.Length;
                    break;

                case GestureStepType.Chat:
                    GestureStepChat chatstep = (GestureStepChat)step;
                    Name = chatstep.Text;
                    //sb.Append(chatstep.Text + "\n");
                    //sb.Append("0\n");
                    _Length += 10;
                    break;

                case GestureStepType.Wait:
                    GestureStepWait waitstep = (GestureStepWait)step;
                    //sb.AppendFormat("{0:0.000000}\n", waitstep.WaitTime);
                    int waitflags = 0;

                    if (waitstep.WaitForTime)
                    {
                        waitflags |= 0x01;
                        _Length   += waitstep.WaitTime;
                    }
                    if (waitstep.WaitForAnimation)
                    {
                        waitflags |= 0x02;
                        _Length   += 10;
                    }
                    //sb.Append(waitflags + "\n");
                    break;
                }
            }
Finish:

            if (parts.Count == 1)
            {
                SimAsset A = parts[0];
                if (A is SimAnimation)
                {
                    AnimationGestures[A.AssetID] = this;
                    if (A.Item == null)
                    {
                        A.Item = Item;
                    }
                }
            }
            return(parts);
        }