Improved code
user_8400650
csharp
3 years ago
2.0 kB
34
Indexable
private GameObject _cachedPlayer;
/// <summary>
/// Refreshes the position and size of the nicknames on the UI
/// </summary>
public void RefreshUI()
{
// Caching
var cam = CameraGO.instance.transform;
_camPos = cam.position;
_camForward = cam.forward;
var controllers = GameGO.instance.controllerGOs;
for (int i = 0; i < controllers.Count; i++)
{
// Skip null values (controller destoyed during update cycle, etc)
if(controllers[i] is not CachedGOClass _cachedCtrlrGO){
continue;
}
// Self -- skip
if (_cachedCtrlrGO == _cachedPlayer)
{
continue;
}
var pos = _cachedCtrlrGO.nicknameHolder.position
// Teammate -- hide or Offscreen -- hide
if (_cachedCtrlrGO.team == LocalClient.team ||
Vector3.Dot((pos - _camPos), _camForward) <= 0)
{
HideBothUIElements();
continue;
}
// Just for readability
var tooFarForNickname = _cachedCtrlrGO.distToCam > FULL_NICKNAME_VISIBILITY_DISTANCE;
// Set active based on dist
_cachedCtrlrGO.nickname_image.gameObject.setActive(tooFarForNickname)
_cachedCtrlrGO.nicknameUI_text.gameObject.setActive(!tooFarForNickname)
// Update positions for both
_cachedCtrlrGO.nickname_image.gameObject.transform.position = _cam.WorldToScreenPoint();
_cachedCtrlrGO.nicknameUI_text.gameObject.transform.position = _cam.WorldToScreenPoint();
}
}
void HideBothUIElements()
{
_cachedCtrlrGO.nickname_image.gameObject.SetActive(false);
_cachedCtrlrGO.nicknameUI_text.gameObject.SetActive(false);
}Editor is loading...