Пример #1
0
        /// <summary>
        /// Handles any addition or update to gesture items in the inventory.
        /// </summary>
        /// <param name="gesture">Gesture that was added or updated.</param>
        private void UpdateInventoryGesture(InventoryGesture gesture)
        {
            var client = RadegastInstance.GlobalInstance.Client;

            client.Assets.RequestAsset(gesture.AssetUUID, AssetType.Gesture, false, (_, asset) =>
            {
                var assetGesture = asset as AssetGesture;
                if (assetGesture == null)
                {
                    return;
                }

                if (!assetGesture.Decode())
                {
                    return;
                }

                if (!Gestures.ContainsKey(gesture.UUID))
                {
                    Gestures.Add(gesture.UUID, new GestureTrigger());
                }

                var existingGestureTrigger          = Gestures[gesture.UUID];
                existingGestureTrigger.TriggerLower = assetGesture.Trigger.ToLower();
                existingGestureTrigger.Replacement  = assetGesture.ReplaceWith;
                existingGestureTrigger.AssetID      = assetGesture.AssetID;
            });
        }
Пример #2
0
 /// <summary>
 /// Aktiviert oder deaktiviert eine registrierte Geste
 /// </summary>
 /// <param name="gesture">Der Identifier der Geste</param>
 /// <param name="active"></param>
 public virtual void SetGestureActive(string gesture, bool active)
 {
     if (Gestures != null)
     {
         if (Gestures.ContainsKey(gesture))
         {
             Gestures[gesture].IsActive = active;
         }
     }
 }
Пример #3
0
        /// <summary>
        /// Checks a single word for a gesture trigger and appends the final word to the output
        /// </summary>
        /// <param name="word">Word to check for gesture triggers</param>
        /// <param name="outString">Where to output the word or replacement word to</param>
        /// <returns>True if a gesture trigger was executed.</returns>
        private bool ProcessWord(string word, StringBuilder outString)
        {
            var possibleTriggers = new List <GestureTrigger>();
            var client           = RadegastInstance.GlobalInstance.Client;
            var lowerWord        = word.ToLower();

            client.Self.ActiveGestures.ForEach(pair =>
            {
                var activeGestureID = pair.Key;
                if (!Gestures.ContainsKey(activeGestureID))
                {
                    return;
                }
                var gesture = Gestures[activeGestureID];

                if (lowerWord != gesture.TriggerLower)
                {
                    return;
                }

                possibleTriggers.Add(gesture);
            });

            if (possibleTriggers.Count == 0)
            {
                outString.Append(word);
                outString.Append(' ');
                return(false);
            }

            GestureTrigger gestureToPlay;

            if (possibleTriggers.Count > 1)
            {
                var gestureIndexToPlay = Random.Next(possibleTriggers.Count);
                gestureToPlay = possibleTriggers[gestureIndexToPlay];
            }
            else
            {
                gestureToPlay = possibleTriggers[0];
            }

            client.Self.PlayGesture(gestureToPlay.AssetID);

            if (!String.IsNullOrEmpty(gestureToPlay.Replacement))
            {
                outString.Append(gestureToPlay.Replacement);
                outString.Append(' ');
            }

            return(true);
        }