12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- /*
- * Copyright (c) Meta Platforms, Inc. and affiliates.
- * All rights reserved.
- *
- * This source code is licensed under the license found in the
- * LICENSE file in the root directory of this source tree.
- */
- using System;
- using Meta.WitAi.Json;
- using UnityEngine;
- using UnityEngine.Events;
- namespace Meta.WitAi.CallbackHandlers
- {
- [AddComponentMenu("Wit.ai/Response Matchers/Simple Intent Handler")]
- public class SimpleIntentHandler : WitIntentMatcher
- {
- [SerializeField] private UnityEvent onIntentTriggered = new UnityEvent();
- [Tooltip("Confidence ranges are executed in order. If checked, all confidence values will be checked instead of stopping on the first one that matches.")]
- [SerializeField] public bool allowConfidenceOverlap;
- #if UNITY_2021_3_2 || UNITY_2021_3_3 || UNITY_2021_3_4 || UNITY_2021_3_5
- [NonReorderable]
- #endif
- [SerializeField] public ConfidenceRange[] confidenceRanges;
- public UnityEvent OnIntentTriggered => onIntentTriggered;
- protected override void OnResponseSuccess(WitResponseNode response)
- {
- onIntentTriggered.Invoke();
- UpdateRanges(response);
- }
- protected override void OnResponseInvalid(WitResponseNode response, string error)
- {
- UpdateRanges(response);
- }
- private void UpdateRanges(WitResponseNode response)
- {
- // Find intents if possible
- var intents = response?.GetIntents();
- if (intents == null)
- {
- return;
- }
- // Iterate intents
- foreach (var intentData in intents)
- {
- if (string.Equals(intent, intentData.name, StringComparison.CurrentCultureIgnoreCase))
- {
- // Found intent
- RefreshConfidenceRange(intentData.confidence, confidenceRanges, allowConfidenceOverlap);
- return;
- }
- }
- // Not matched
- RefreshConfidenceRange(0, confidenceRanges, allowConfidenceOverlap);
- }
- }
- }
|