/// <summary> /// 延迟播放展示动画 /// </summary> /// <param name="time"></param> /// <returns></returns> private IEnumerator DelayCall(float time) { isPlayAnimation = true; if (point != null) { point.SetActive(false); } if (time > 0) { yield return(new WaitForSeconds(time)); } if (point != null) { point.SetActive(true); point.transform.localScale = Vector3.zero; point.transform.DOScale(Vector3.one, ConfigData.GRID_SHOW_TIME).onComplete += () => { RefreshData(); }; //新的直接展示出来就行 var vec = MapTool.GetPosition(gridData.Position.x, gridData.Position.y); rectTransform.anchoredPosition = new Vector2(vec.x, vec.y); } isPlayAnimation = false; }
/// <summary> /// 初始化地图 /// </summary> public void InitMapBG() { CleanMap(); mapData = playCtrl.GetMapDatas(); for (int i = 1; i <= playCtrl.MapSize(); i++) { for (int j = 1; j <= playCtrl.MapSize(); j++) { var bg = GameObject.Instantiate(mapBGItem); RectTransform bgRectTransform = bg.GetComponent <RectTransform>(); bgRectTransform.SetParent(bgPoint); bgRectTransform.localScale = Vector3.one; bgRectTransform.localRotation = Quaternion.identity; bgRectTransform.anchoredPosition = MapTool.GetPosition(i, j); mapBgs.Add(bgRectTransform); } } RefreshMap(mapData.gridDatas, false); }
/// <summary> /// 刷新数据 /// </summary> /// <param name="grid">当前数据</param> /// <param name="gridMaps">所有地块</param> /// <param name="isNew">是否是新的</param> /// <param name="showAnimation">是否有动画</param> public void RefreshData(GridData grid, ref Dictionary <int, MapGrid> gridMaps, bool isNew = false, bool showAnimation = true) { //if (gridData == null) //{ lastGridData = gridData; gridData = grid; if (isNew) { if (showAnimation) { StartCoroutine(DelayCall(ConfigData.GRID_MOVE_TIME)); } else { //新的直接展示出来就行 var vec = MapTool.GetPosition(gridData.Position.x, gridData.Position.y); rectTransform.anchoredPosition = new Vector2(vec.x, vec.y); RefreshData(); } var item = ConfigController.Instance.GetGridConfigData(gridData.Ladder); gridImage.color = item.GridColor; } else { if (showAnimation) { gameObject.SetActive(true); //之前的可能需要移动位子,需要判断 var vec = MapTool.GetPosition(gridData.Position.x, gridData.Position.y); if (showAnimation && lastGridData != null) { isPlayAnimation = true; if (lastGridData.Position.x != gridData.Position.x || lastGridData.Position.y != gridData.Position.y) { rectTransform.DOAnchorPos(new Vector2(vec.x, vec.y), ConfigData.GRID_MOVE_TIME).onComplete += () => { if (lastGridData.ID == gridData.ID && lastGridData.Ladder < gridData.Ladder) { rectTransform.SetAsLastSibling(); RefreshData(); rectTransform.DOScale(ConfigData.MERGE_BIG_SCALE, ConfigData.MERGE_BIG_SCALE_TIME).onComplete += () => { rectTransform.DOScale(1f, ConfigData.MERGE_SMALL_SCALE_TIME).onComplete += () => { isPlayAnimation = false; }; }; } else { isPlayAnimation = false; RefreshData(); } }; } else { if (lastGridData.ID == gridData.ID && lastGridData.Ladder < gridData.Ladder) { rectTransform.SetAsLastSibling(); RefreshData(); rectTransform.DOScale(ConfigData.MERGE_BIG_SCALE, ConfigData.MERGE_BIG_SCALE_TIME).onComplete += () => { rectTransform.DOScale(1f, ConfigData.MERGE_SMALL_SCALE_TIME).onComplete += () => { isPlayAnimation = false; }; }; } else { isPlayAnimation = false; RefreshData(); rectTransform.anchoredPosition = new Vector2(vec.x, vec.y); } } if (gridData.MergeID > 0 && gridMaps.ContainsKey(gridData.MergeID)) { var gridItem = gridMaps[gridData.MergeID]; gridItem.DoTweenAndDestroy(new Vector2(vec.x, vec.y)); gridMaps.Remove(gridData.MergeID); } } else { rectTransform.anchoredPosition = new Vector2(vec.x, vec.y); } } else { var vec = MapTool.GetPosition(gridData.Position.x, gridData.Position.y); rectTransform.anchoredPosition = new Vector2(vec.x, vec.y); RefreshData(); } } //} }