You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
4.0 KiB
112 lines
4.0 KiB
3 years ago
|
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
|
||
|
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Events;
|
||
|
|
||
|
namespace HTC.UnityPlugin.Vive.BindingInterface
|
||
|
{
|
||
|
public class BindingInterfaceRolePanelController : MonoBehaviour
|
||
|
{
|
||
|
[SerializeField]
|
||
|
private BindingInterfaceRoleButtonItem m_roleButtonItem;
|
||
|
[SerializeField]
|
||
|
private UnityEvent m_onBoundDevcieToRole;
|
||
|
|
||
|
private List<BindingInterfaceRoleButtonItem> m_roleButtonList = new List<BindingInterfaceRoleButtonItem>();
|
||
|
private ViveRole.IMap m_selectedRoleMap;
|
||
|
private string m_editingDeviceSN;
|
||
|
|
||
|
public void SelectRole(int roleValue)
|
||
|
{
|
||
|
if (m_selectedRoleMap == null || string.IsNullOrEmpty(m_editingDeviceSN)) { return; }
|
||
|
|
||
|
m_selectedRoleMap.BindDeviceToRoleValue(m_editingDeviceSN, roleValue);
|
||
|
|
||
|
if (m_onBoundDevcieToRole != null)
|
||
|
{
|
||
|
m_onBoundDevcieToRole.Invoke();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SelecRoleSet(ViveRole.IMap roleMap)
|
||
|
{
|
||
|
if (m_roleButtonList.Count == 0)
|
||
|
{
|
||
|
m_roleButtonList.Add(m_roleButtonItem);
|
||
|
m_roleButtonItem.onValueChanged += SelectRole;
|
||
|
}
|
||
|
|
||
|
var roleInfo = roleMap.RoleValueInfo;
|
||
|
|
||
|
// update buttons
|
||
|
if (m_selectedRoleMap != roleMap)
|
||
|
{
|
||
|
m_selectedRoleMap = roleMap;
|
||
|
|
||
|
m_roleButtonList[0].roleValue = roleInfo.InvalidRoleValue;
|
||
|
m_roleButtonList[0].roleName = roleInfo.GetNameByRoleValue(roleInfo.InvalidRoleValue);
|
||
|
|
||
|
var buttonIndex = 1;
|
||
|
for (int roleValue = roleInfo.MinValidRoleValue, max = roleInfo.MaxValidRoleValue; roleValue <= max; ++roleValue)
|
||
|
{
|
||
|
if (!roleInfo.IsValidRoleValue(roleValue)) { continue; }
|
||
|
|
||
|
BindingInterfaceRoleButtonItem item;
|
||
|
if (buttonIndex >= m_roleButtonList.Count)
|
||
|
{
|
||
|
var itemObj = Instantiate(m_roleButtonItem.gameObject);
|
||
|
itemObj.transform.SetParent(m_roleButtonItem.transform.parent, false);
|
||
|
|
||
|
m_roleButtonList.Add(item = itemObj.GetComponent<BindingInterfaceRoleButtonItem>());
|
||
|
item.onValueChanged += SelectRole;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
item = m_roleButtonList[buttonIndex];
|
||
|
}
|
||
|
|
||
|
item.gameObject.SetActive(true);
|
||
|
item.roleValue = roleValue;
|
||
|
item.roleName = roleInfo.GetNameByRoleValue(roleValue);
|
||
|
|
||
|
++buttonIndex;
|
||
|
}
|
||
|
|
||
|
for (int max = m_roleButtonList.Count; buttonIndex < max; ++buttonIndex)
|
||
|
{
|
||
|
m_roleButtonList[buttonIndex].gameObject.SetActive(false);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void SelectBindingDevice(string deviceSN)
|
||
|
{
|
||
|
// update selected role
|
||
|
m_editingDeviceSN = deviceSN;
|
||
|
if (m_selectedRoleMap.IsDeviceBound(deviceSN))
|
||
|
{
|
||
|
var validRoleFound = false;
|
||
|
var boundRoleValue = m_selectedRoleMap.GetBoundRoleValueByDevice(deviceSN);
|
||
|
for (int i = 0, imax = m_roleButtonList.Count; i < imax && m_roleButtonList[i].gameObject.activeSelf; ++i)
|
||
|
{
|
||
|
if (m_roleButtonList[i].roleValue == boundRoleValue)
|
||
|
{
|
||
|
m_roleButtonList[i].SetIsOnNoEvent();
|
||
|
validRoleFound = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!validRoleFound)
|
||
|
{
|
||
|
m_roleButtonList[0].SetIsOnNoEvent();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_roleButtonList[0].SetIsOnNoEvent();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|