8 using System.Collections.Generic;
19 private float buttonWidth = 1.50f;
24 public const int MaxCustomButtons = 5;
31 public float HoverOffsetYScale = 0.25f;
36 public float HoverOffsetZ = 0f;
39 [Tooltip(
"Uses an alternate follow style that works better for very oblong objects.")]
40 private bool useTightFollow =
false;
45 public bool UseTightFollow
47 get {
return useTightFollow; }
48 set { useTightFollow = value; }
64 DefaultPosition = defaultPosition;
65 ManipulationPosition = manipulationPosition;
72 get {
return string.IsNullOrEmpty(Name); }
111 get {
return boundingBox; }
112 set { boundingBox = value; }
122 get {
return boundingRig; }
123 set { boundingRig = value; }
128 public int NumDefaultButtons {
get;
private set; }
130 public int NumManipulationButtons {
get;
private set; }
132 public bool UseRemove =
true;
133 public bool UseAdjust =
true;
134 public bool UseHide =
true;
138 get {
return buttons; }
139 set { buttons = value; }
158 private Transform buttonParent = null;
161 private GameObject baseRenderer = null;
164 private GameObject backgroundBar = null;
169 private Vector3 targetBarSize = Vector3.one;
170 private float lastTimeTapped = 0f;
171 private float coolDownTime = 0.5f;
172 private int numHiddenButtons;
178 FollowBoundingBox(
false);
179 lastTimeTapped = Time.time + coolDownTime;
186 if (interactables.Count == 0)
189 for (
int i = 0; i < DefaultButtons.Length; i++)
191 CreateButton(DefaultButtons[i], null);
194 for (
int i = 0; i < buttons.Length; i++)
196 CreateButton(buttons[i], CustomButtonIconProfile);
205 if (Time.time < lastTimeTapped + coolDownTime)
210 lastTimeTapped = Time.time;
212 base.InputClicked(obj, eventData);
220 Destroy(boundingBox.
Target);
255 if (
template.IsEmpty)
260 switch (
template.Type)
271 NumManipulationButtons++;
275 NumManipulationButtons++;
288 throw new ArgumentOutOfRangeException();
291 GameObject newButton = Instantiate(SquareButtonPrefab, buttonParent);
292 newButton.name =
template.Name;
293 newButton.transform.localPosition = Vector3.zero;
294 newButton.transform.localRotation = Quaternion.identity;
296 mtb.
Initialize(
this,
template, customIconProfile);
299 private void FollowBoundingBox(
bool smooth)
301 if (boundingBox == null)
306 baseRenderer.SetActive(
false);
310 baseRenderer.SetActive(
true);
316 baseRenderer.SetActive(
true);
319 Vector3 finalPosition = Vector3.zero;
320 Vector3 headPosition = Camera.main.transform.position;
321 LayerMask ignoreLayers =
new LayerMask();
322 List<Vector3> boundsPoints =
new List<Vector3>();
323 if (boundingBox != null)
327 Vector3 faceNormal = helper.
GetFaceNormal(followingFaceIndex);
334 transform.position = smooth ? Vector3.Lerp(transform.position, finalPosition, 0.5f) : finalPosition;
337 Vector3 eulerAngles = Quaternion.LookRotation((boundingBox.transform.position - finalPosition).normalized, Vector3.up).eulerAngles;
340 transform.eulerAngles = eulerAngles;
343 private void Update()
345 FollowBoundingBox(
true);
350 targetBarSize =
new Vector3(NumDefaultButtons * buttonWidth, buttonWidth, 1f);
354 targetBarSize =
new Vector3(numHiddenButtons * buttonWidth, buttonWidth, 1f);
358 targetBarSize =
new Vector3(NumManipulationButtons * buttonWidth, buttonWidth, 1f);
362 throw new ArgumentOutOfRangeException();
365 backgroundBar.transform.localScale = Vector3.Lerp(backgroundBar.transform.localScale, targetBarSize, 0.5f);
368 private void RefreshTemplates()
370 int numCustomButtons = 0;
371 for (
int i = 0; i < buttons.Length; i++)
373 if (!buttons[i].IsEmpty)
379 var defaultButtonsList =
new List<ButtonTemplate>();
384 defaultButtonsList.Add(GetDefaultButtonTemplateFromType(
ButtonTypeEnum.Remove, numCustomButtons, UseHide, UseAdjust));
389 defaultButtonsList.Add(GetDefaultButtonTemplateFromType(
ButtonTypeEnum.Adjust, numCustomButtons, UseHide, UseAdjust));
390 defaultButtonsList.Add(GetDefaultButtonTemplateFromType(
ButtonTypeEnum.Done, numCustomButtons, UseHide, UseAdjust));
395 defaultButtonsList.Add(GetDefaultButtonTemplateFromType(
ButtonTypeEnum.Hide, numCustomButtons, UseHide, UseAdjust));
396 defaultButtonsList.Add(GetDefaultButtonTemplateFromType(
ButtonTypeEnum.Show, numCustomButtons, UseHide, UseAdjust));
398 DefaultButtons = defaultButtonsList.ToArray();
402 public void EditorRefreshTemplates()
432 int adjustPosition = numCustomButtons + 1;
466 int removePosition = numCustomButtons + 1;
480 "KeyboardKeyGlyphs_Close",
495 throw new ArgumentOutOfRangeException(
"type", type, null);