Sync daemon authority migration
This commit is contained in:
parent
030b4b5d74
commit
39a0dc8737
295 changed files with 25121 additions and 7360 deletions
|
|
@ -3,26 +3,94 @@
|
|||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.EventSystems;
|
||||
|
||||
public class ClickableCollider : MonoBehaviour
|
||||
{
|
||||
public event Action<ClickableCollider, PointerEventData, Ray, RaycastHit> OnClick;
|
||||
private static readonly List<ClickableCollider> ActiveClickables = new List<ClickableCollider>();
|
||||
|
||||
public void Click(PointerEventData eventData, Ray ray, RaycastHit raycastHit) => OnClick?.Invoke(this, eventData, ray, raycastHit);
|
||||
private Renderer[] _renderers;
|
||||
|
||||
public event Action<ClickableCollider, PointerEventData, Ray, AetheriaYmirClickableHit> OnClick;
|
||||
|
||||
public static IReadOnlyList<ClickableCollider> Active => ActiveClickables;
|
||||
|
||||
public Bounds ClickBounds
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_renderers == null)
|
||||
RefreshYmirBoundsSource();
|
||||
|
||||
if (_renderers == null || _renderers.Length == 0)
|
||||
return new Bounds(transform.position, Vector3.one * 0.5f);
|
||||
|
||||
var firstRenderer = FirstLiveRenderer();
|
||||
if (firstRenderer == null)
|
||||
return new Bounds(transform.position, Vector3.one * 0.5f);
|
||||
|
||||
var bounds = firstRenderer.bounds;
|
||||
for (var i = 0; i < _renderers.Length; i++)
|
||||
{
|
||||
var renderer = _renderers[i];
|
||||
if (renderer == null || renderer == firstRenderer)
|
||||
continue;
|
||||
|
||||
bounds.Encapsulate(renderer.bounds);
|
||||
}
|
||||
|
||||
return bounds;
|
||||
}
|
||||
}
|
||||
|
||||
public void Click(PointerEventData eventData, Ray ray, AetheriaYmirClickableHit hit) => OnClick?.Invoke(this, eventData, ray, hit);
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
OnClick = null;
|
||||
}
|
||||
|
||||
public void RefreshYmirBoundsSource()
|
||||
{
|
||||
_renderers = GetComponentsInChildren<Renderer>();
|
||||
}
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
RefreshYmirBoundsSource();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
if (_renderers == null || _renderers.Length == 0)
|
||||
RefreshYmirBoundsSource();
|
||||
|
||||
if (!ActiveClickables.Contains(this))
|
||||
ActiveClickables.Add(this);
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
ActiveClickables.Remove(this);
|
||||
}
|
||||
|
||||
void Start()
|
||||
{
|
||||
var proto = GetComponent<Prototype>();
|
||||
if(proto != null)
|
||||
proto.OnReturnToPool += () => OnClick = null;
|
||||
}
|
||||
|
||||
private Renderer FirstLiveRenderer()
|
||||
{
|
||||
for (var i = 0; i < _renderers.Length; i++)
|
||||
{
|
||||
if (_renderers[i] != null)
|
||||
return _renderers[i];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue