public void SetVisible(VerticalViewport viewport, bool visible, bool forceValidate) { if (visible == mVisible && !forceValidate) { return; } mVisible = visible; if (visible) { if (dataEntity == null) { dataEntity = viewport.mObjectBuffer[prototype].Get();// .GetAnyTarget(prototype); dataEntity.OnBindData(info); } if (!dataEntity.gameObject.activeSelf) { dataEntity.gameObject.SetActive(true); } var trans = dataEntity.rectTransform; Rect localrect = new Rect(position.x, position.y - size.y, size.x, size.y); Vector3 pos = Vector3.zero; pos.x = Mathf.Lerp(localrect.xMin, localrect.xMax, trans.pivot.x); pos.y = Mathf.Lerp(localrect.yMin, localrect.yMax, trans.pivot.y); dataEntity.SetLocalPosition(pos); } else if (dataEntity != null) { dataEntity.OnUnbindData(); viewport.mObjectBuffer[prototype].Add(dataEntity);// .SaveBuffer(prototype, dataEntity); if (viewport.m_MoveCachedItemOutOfBounds && viewport.m_ClipRect != null) { var rect = _2DUtil.CalculateRelativeRect(viewport.transform, viewport.m_ClipRect); var p = dataEntity.transform.localPosition; float l = Mathf.Abs(p.x - rect.xMin); float r = Mathf.Abs(p.x - rect.xMax); if (l < r) { p.x = rect.xMin - rect.width; } else { p.x = rect.xMax + rect.width; } dataEntity.transform.localPosition = p; } else if (dataEntity.gameObject.activeSelf) { dataEntity.gameObject.SetActive(false); } dataEntity = null; } }
public void SetVisible(VerticalViewport viewport, bool visible, bool forceValidate) { var n = firstData; while (n != null) { n.SetVisible(viewport, visible, forceValidate); if (n == lastData) { break; } n = n.next; } }