public void SetSelected(int index) { if (index >= 0 && index < itemDatas.Count) { curItem = itemDatas[index]; } }
private void updateItems() { if (itemDatas == null) { return; } //Rect rect = new Rect(displayRect.x - displayRect.width*(buffer - 1)/2,displayRect.y + displayRect.height*(buffer - 1)/2, displayRect.width*buffer, displayRect.height*buffer); Rect rect = new Rect(displayRect.x - displayRect.width * (buffer - 1) / 2, displayRect.y + displayRect.height * (buffer - 1) / 2, displayRect.width * buffer, displayRect.height * buffer); for (int i = 0; i < itemDatas.Count; i++) { ItemRect item = itemDatas[i]; if (isIntersect(item.rect, rect)) { if (!item.isVisable) { item.isVisable = true; item.item = itemPool.getIdleTarget <BaseItemView>(); item.item.transform.localPosition = new Vector3(item.rect.x, item.rect.y, 0); item.item.SetData(item.data); } else { float f = getIntersectSize(item.rect, displayRect); //f = Mathf.Min(1, f + 0.3f); item.item.transform.localPosition = new Vector3(item.rect.x - (1 - f) * item.rect.width / 2, item.rect.y, 0); //item.item.transform.localScale = f * Vector3.one; if (f < 1) { item.item.transform.SetSiblingIndex(0); } else { item.item.transform.SetSiblingIndex(100); } } } else { if (item.isVisable) { item.isVisable = false; if (item.item != null) { item.item.gameObject.SetActive(false); item.item = null; } } } } }
public void ShowInteractionRangeTilesAt(ItemRect useRect) { HideInteractionRangeTiles(); for (int x = useRect.position.x; x < useRect.position.x + useRect.width && x < slots.GetLength(0); x++) { for (int y = useRect.position.y; y < useRect.position.y + useRect.height && y < slots.GetLength(1); y++) { var interactionRangeTile = SimplePool.Spawn(interactionRangeTilePrefab, new Vector3Int(x, y, 0), Quaternion.identity); currentInteractionRangeTiles.Add(interactionRangeTile); } } }
public void SetData(List <SubListData> datas) { if (datas == null) { return; } itemPool.resetAllTarget(); namePool.resetAllTarget(); displayRect.x = 0; displayRect.y = 0; itemDatas = new List <ItemRect>(); float y = 0; for (int i = 0; i < datas.Count; i++) { SubListData subList = datas[i]; if (!string.IsNullOrEmpty(subList.name)) { ItemRect nameItem = new ItemRect(); nameItem.rect = new Rect(0, y, listNameTemplate.rect.width, listNameTemplate.rect.height); nameItem.data = subList.name; nameItem.isVisable = false; nameItem.type = ItemRect.Type.Name; itemDatas.Add(nameItem); y -= listNameTemplate.rect.height + spacing; } for (int j = 0; j < subList.list.Count; j++) { ItemRect item = new ItemRect(); item.rect = new Rect(0, y, itemTemplate.rect.width, itemTemplate.rect.height); item.data = subList.list[j]; item.type = ItemRect.Type.Item; item.isVisable = false; itemDatas.Add(item); y -= itemTemplate.rect.height + spacing; } } scrollRect.vertical = true; scrollRect.horizontal = false; content.anchorMin = new Vector2(0, 1); content.anchorMax = new Vector2(1, 1); content.sizeDelta = new Vector2(0, -y); scrollRect.verticalNormalizedPosition = 1; }
private ItemRect GetNearestItem() { if (itemDatas == null || itemDatas.Count == 0) { return(null); } Vector2 target = center.anchoredPosition; int head = 0; int end = itemDatas.Count - 1; Vector2 half = direction == Direction.Horizontal ? new Vector2(itemDatas[head].rect.width / 2, 0) : new Vector2(0, -itemDatas[head].rect.height / 2); while (head != end) { float q = (displayRect.position + target).sqrMagnitude; if (end - head == 1) { float a = q - (itemDatas[head].rect.position + half).sqrMagnitude; float b = (itemDatas[end].rect.position + half).sqrMagnitude - q; if (a > b) { head = end; } else { end = head; } } else { int index = Mathf.RoundToInt((end - head) / 2) + head; ItemRect item = itemDatas[index]; if ((item.rect.position + half).sqrMagnitude < q) { head = index; } else { end = index; } } //Debug.Log(string.Format("head:{0} end:{1}",head,end)); } return(itemDatas[head]); }
public void SetData(IList datas) { itemPool.resetAllTarget(); if (datas == null) { return; } displayRect.x = 0; displayRect.y = 0; itemDatas = new List <ItemRect>(); Vector2 offset = Vector2.zero; for (int i = 0; i < datas.Count; i++) { if (direction == Direction.Vertical) { offset = new Vector2(i % col, i / col); } else { offset = new Vector2(i / row, i % row); } ItemRect item = new ItemRect(); item.rect = new Rect(offset.x * (itemTemplate.rect.width + spacing.x) + spacing.x, -offset.y * (itemTemplate.rect.height + spacing.y) - spacing.y, itemTemplate.rect.width, itemTemplate.rect.height); item.data = datas[i]; item.isVisable = false; itemDatas.Add(item); } content.sizeDelta = new Vector2((offset.x + 1) * (itemTemplate.rect.width + spacing.x), (offset.y + 1) * (itemTemplate.rect.height + spacing.y)); if (direction == Direction.Vertical) { scrollRect.verticalNormalizedPosition = 1; } else { scrollRect.horizontalNormalizedPosition = 1; } updateItems(); }
private void updateItems() { if (itemDatas == null) { return; } Rect rect = displayRect; for (int i = 0; i < itemDatas.Count; i++) { ItemRect item = itemDatas[i]; if (isIntersect(item.rect, rect)) { if (!item.isVisable) { if (item.type == ItemRect.Type.Name) { item.item = namePool.getIdleTarget <BaseItemView>(); } else { item.item = itemPool.getIdleTarget <BaseItemView>(); } item.isVisable = true; (item.item.transform as RectTransform).anchoredPosition = new Vector2(item.rect.x, item.rect.y); item.item.SetData(item.data); } } else { if (item.isVisable) { item.isVisable = false; if (item.item != null) { item.item.gameObject.SetActive(false); item.item = null; } } } } }
public List <T> AtRect <T>(ItemRect itemRect) where T : EntityBase { List <T> foundEntities = new List <T>(); for (int x = itemRect.position.x; x < itemRect.position.x + itemRect.width && x < slots.GetLength(0); x++) { for (int y = itemRect.position.y; y < itemRect.position.y + itemRect.height && y < slots.GetLength(1); y++) { T slotEntity = slots[x, y] as T; if (slotEntity != null && foundEntities.Contains(slotEntity) == false) { foundEntities.Add(slotEntity); } } } return(foundEntities); }
public void SetData(IList datas) { itemPool.resetAllTarget(); if (datas == null || datas.Count == 0) { itemDatas = new List <ItemRect>(); return; } Vector2 offset = Vector2.zero; //加开头空余空间 offset = new Vector2(center.anchoredPosition.x - itemTemplate.rect.width / 2, center.anchoredPosition.y + itemTemplate.rect.height / 2); itemDatas = new List <ItemRect>(); for (int j = 0; j < datas.Count; j++) { ItemRect item = new ItemRect(); item.rect = direction == Direction.Horizontal ? new Rect(offset.x, 0, itemTemplate.rect.width, itemTemplate.rect.height) : new Rect(0, offset.y, itemTemplate.rect.width, itemTemplate.rect.height); item.data = datas[j]; item.isVisable = false; itemDatas.Add(item); offset += new Vector2(itemTemplate.rect.width + spacing, -(itemTemplate.rect.height + spacing)); } //加末尾空余空间 offset += new Vector2((center.parent as RectTransform).rect.width - center.anchoredPosition.x - itemTemplate.rect.width / 2, -((center.parent as RectTransform).rect.height + center.anchoredPosition.y - itemTemplate.rect.height / 2)); content.sizeDelta = direction == Direction.Horizontal?new Vector2(offset.x, itemTemplate.rect.height) :new Vector2(itemTemplate.rect.width, -offset.y); //content.anchoredPosition = Vector2.zero; updateItems(); if (_curItem == null) { curItem = itemDatas[0]; } else { curItem = _curItem; } }
private void updateItems() { if (itemDatas == null) { return; } Rect rect = displayRect; for (int i = 0; i < itemDatas.Count; i++) { ItemRect item = itemDatas[i]; if (isIntersect(item.rect, rect)) { if (!item.isVisable) { item.item = itemPool.getIdleTarget <BaseItemView>(); item.isVisable = true; (item.item.transform as RectTransform).pivot = new Vector2(0, 1); (item.item.transform as RectTransform).anchoredPosition = item.rect.position; GameUtils.SetPivot(item.item.transform as RectTransform, new Vector2(0.5f, 0.5f)); item.item.SetData(item.data); } } else { if (item.isVisable) { item.isVisable = false; if (item.item != null) { item.item.gameObject.SetActive(false); item.item = null; } } } } }
private void OnDragEndHandle(BaseEventData e) { ItemRect item = GetNearestItem(); curItem = item; }
public void setDatas(IList datas) { itemPool.resetAllTarget(); if (datas == null) { return; } displayRect.x = 0; displayRect.y = 0; itemDatas = new List <ItemRect>(); if (direction == Direction.Horizontal) { for (int i = 0; i < datas.Count; i++) { ItemRect item = new ItemRect(); float x = i / row; float y = i % row; Debug.Log(x.ToString() + "|" + y.ToString()); item.rect = new Rect(x * (itemTemplate.rect.width + spacing) + spacing, -y * (itemTemplate.rect.height + spacing), itemTemplate.rect.width, itemTemplate.rect.height); item.data = datas[i]; item.isVisable = false; itemDatas.Add(item); } scrollRect.horizontal = true; scrollRect.vertical = false; allPage = itemDatas.Count / (row * col) + 1; content.anchorMin = new Vector2(0, 0); content.anchorMax = new Vector2(0, 1); content.anchoredPosition = new Vector2(0, 0); content.sizeDelta = new Vector2(allPage * displayRect.width, 0); scrollRect.horizontalNormalizedPosition = 0; } else { for (int i = 0; i < datas.Count; i++) { ItemRect item = new ItemRect(); float x = i % col; float y = i / col; //Debug.Log(x.ToString() + "|" + y.ToString()); item.rect = new Rect(x * (itemTemplate.rect.width + spacing), -y * (itemTemplate.rect.height + spacing) - spacing, itemTemplate.rect.width, itemTemplate.rect.height); item.data = datas[i]; item.isVisable = false; itemDatas.Add(item); } scrollRect.vertical = true; scrollRect.horizontal = false; allPage = itemDatas.Count / (row * col) + 1; ////content.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, content); content.anchorMin = new Vector2(0, 1); content.anchorMax = new Vector2(1, 1); //content.anchoredPosition = new Vector2(0,0); content.sizeDelta = new Vector2(0, allPage * displayRect.height); scrollRect.verticalNormalizedPosition = 1; } updateItems(); }