//----------------------- 初始化Slot public void InitSlotUI() { for (int i = 0; i < TEAM_COUNT; ++i) { Transform slots = UIHelper.FindChildInObject(gameObject, "Formation_Team_" + i).transform; for (int j = 0; j < SLOT_COUNT; ++j) { Model_UnitGroup model_UnitGroup = model_Formation.GetUnitGroup(i + 1, j + 1); Transform slotTransUnit = slots.Find("tank_slot_" + j); FormationSlotUI slotUIUnit = slotTransUnit.GetComponent <FormationSlotUI>(); slotUIUnit.i = i; slotUIUnit.j = j; slotUIManager.SetUnitSlotUI(i, j, slotUIUnit); slotUIUnit.UpdateUI(model_UnitGroup, this); Transform slotTransHero = slots.Find("hero_slot_" + j); UIHeroSlot slotUIHero = slotTransHero.GetComponent <UIHeroSlot>(); slotUIHero.i = i; slotUIHero.j = j; slotUIManager.SetHeroSlotUI(i, j, slotUIHero); slotUIHero.UpdateUI(model_UnitGroup, this._heroPanel); } } }
// 更新上阵Unit数量 public void UpdateBattleUnitNum(Model_UnitGroup unit_Group) { int i = unit_Group.teamId - 1; int j = unit_Group.posId - 1; FormationSlotUI formation = GetFormationSlotUI(i, j); FormationDragItemUI dragItem = formation.dragItemUI; if (dragItem != null) { FormationSlotItemUI slotItem = dragItem.GetComponent <FormationSlotItemUI> (); slotItem.UpdateUI(unit_Group); } }
// 设置 hero 或 Unit 上阵 Item 是否可以拖动 public void SetHeroOrUnitDragable(bool isHero) { for (int i = 0; i < TEAM_COUNT; ++i) { for (int j = 0; j < POSITION_COUNT; ++j) { FormationSlotUI unitSlotUI = _unitSlotMap [i] [j]; FormationDragItemUI unitDragUI = unitSlotUI.dragItemUI; if (unitDragUI != null) { unitDragUI.GetComponent <BoxCollider> ().enabled = !isHero; } UIHeroSlot heroSlotUI = _heroSlotMap [i] [j]; UIHeroDragItem heroDragUI = heroSlotUI.dragItemUI; if (heroDragUI != null) { heroDragUI.GetComponent <BoxCollider> ().enabled = isHero; } } } }
public void SetUnitSlotUI(int teamId, int slotId, FormationSlotUI slotUI) { _unitSlotMap [teamId].Add(slotId, slotUI); }
protected override void OnDragDropRelease(GameObject surface) { SetBoxColliderEnabled(); ResetTeamSlotItemUI(); if (surface != null) { switch (state) { case STATE.SCROLLVIEW: { // scrollView 移动空slot FormationSlotUI surfaceSlotUI = surface.GetComponent <FormationSlotUI>(); if (surfaceSlotUI != null && surfaceSlotUI.model_UnitGroup.isEmpty) { Model_UnitGroup model_UnitGroup = surfaceSlotUI.model_UnitGroup; //上阵 Model_Formation.RESULT result = EnterBattleFormation(model_UnitGroup); if (result == Model_Formation.RESULT.SUCCESS) { this.transform.position = surface.transform.position; attachSlotUI = surfaceSlotUI; state = STATE.SLOT; surfaceSlotUI.dragItemUI = gameObject.GetComponent <FormationDragItemUI>(); this.GetComponent <FormationSlotItemUI>().UpdateUI(model_UnitGroup); // 首次进入 上阵Unit 如果teamId = 0 强制修改为1 int teamId = InstancePlayer.instance.model_User.model_Formation.GetSelectTeamId(); if (teamId == 0) { InstancePlayer.instance.model_User.model_Formation.SetSelectTeamId(1); } // 更新scrollView列表 UpdateUnitScrollView(); // 播放粒子特效 StartCoroutine(PlayEffect(this.gameObject)); } else { base.OnDragDropRelease(surface); UpdateEnterBattlePopupMsg(result); } return; } // scrollView 移动到包含 item slot FormationDragItemUI dragItemUI = surface.GetComponent <FormationDragItemUI>(); if (dragItemUI != null && dragItemUI.attachSlotUI != null) { FormationSlotUI slotUI = dragItemUI.attachSlotUI; Model_UnitGroup model_UnitGroup = slotUI.model_UnitGroup; Model_Formation.RESULT result = EnterExchangeBattleFormation(model_UnitGroup); if (result == Model_Formation.RESULT.SUCCESS) { dragItemUI.GetComponent <FormationSlotItemUI>().UpdateUI(model_UnitGroup); // 替换spine tankicon dragItemUI.ReplaceTankIcon(); // 更新scrollView列表 UpdateUnitScrollView(); // 播放粒子特效 StartCoroutine(PlayEffect(dragItemUI.gameObject)); } else { UpdateEnterBattlePopupMsg(result); } // 删除当前拖动 GameObject base.OnDragDropRelease(surface); return; } } break; case STATE.SLOT: /* * 1 移动另一个slot * (1) slot 区域没有item * (2) slot 区域有item * 2 移动到scrollView * 3 移动到空白区 */ // 1 移动另一个slot // (1)slot区域没有item { FormationSlotUI surfaceSlotUI = surface.GetComponent <FormationSlotUI>(); if (surfaceSlotUI != null && surfaceSlotUI.model_UnitGroup.isEmpty) { Model_Formation.RESULT result = ExchageFormation(surfaceSlotUI.model_UnitGroup); if (result == Model_Formation.RESULT.SUCCESS) { this.transform.position = surfaceSlotUI.transform.position; this.attachSlotUI.dragItemUI = null; this.attachSlotUI = surfaceSlotUI; this.attachSlotUI.dragItemUI = this.GetComponent <FormationDragItemUI>(); this.GetComponent <FormationSlotItemUI>().UpdateUI(surfaceSlotUI.model_UnitGroup); // 播放粒子特效 StartCoroutine(PlayEffect(this.gameObject)); } else { base.OnDragDropRelease(surface); } UpdateUnitScrollView(); return; } } // (2) slot区域有item { FormationDragItemUI surfaceDragItemUI = surface.GetComponent <FormationDragItemUI>(); if (surfaceDragItemUI != null && surfaceDragItemUI.attachSlotUI != null) { FormationSlotUI surfaceSlotUI = surfaceDragItemUI.attachSlotUI; Model_Formation.RESULT result = ExchageFormation(surfaceSlotUI.model_UnitGroup); if (result == Model_Formation.RESULT.SUCCESS) { // 更显UI显示数据 FormationSlotUI sourceSlotUI = this.attachSlotUI; FormationDragItemUI sourceDragUI = this.GetComponent <FormationDragItemUI>(); FormationSlotUI targetSlotUI = surfaceDragItemUI.attachSlotUI; FormationDragItemUI targetDragUI = surfaceDragItemUI; FormationSlotItemUI sourceSlotItemUI = sourceDragUI.gameObject.GetComponent <FormationSlotItemUI>(); FormationSlotItemUI targetSlotItemUI = targetDragUI.gameObject.GetComponent <FormationSlotItemUI>(); Model_UnitGroup source = attachSlotUI.model_UnitGroup; Model_UnitGroup target = targetSlotUI.model_UnitGroup; sourceSlotItemUI.UpdateUI(source); targetSlotItemUI.UpdateUI(target); this.transform.position = sourceSlotUI.transform.position; // 交换 spine tank icon surfaceDragItemUI.ReplaceTankIcon(); sourceDragUI.ReplaceTankIcon(); // 播放粒子特效 StartCoroutine(PlayEffect(sourceSlotItemUI.gameObject)); StartCoroutine(PlayEffect(targetSlotItemUI.gameObject)); } else { base.OnDragDropRelease(surface); } UpdateUnitScrollView(); return; } } // 2 移动到scrollView 下阵 { FormationDragItemUI surfaceDragItemUI = surface.GetComponent <FormationDragItemUI>(); bool isScrllViewCollider = surface.gameObject.name.Equals("scrollView_bg_unit"); if ((surfaceDragItemUI != null && surfaceDragItemUI.attachSlotUI == null) || isScrllViewCollider) { ExitBattleFormation(); attachSlotUI.dragItemUI = null; UpdateUnitScrollView(); DestroyImmediate(this.gameObject); return; } } // 拖动到其他区域 if (attachSlotUI != null) { this.transform.position = attachSlotUI.transform.position; StartCoroutine(PlayEffect(this.gameObject)); return; } break; } } base.OnDragDropRelease(surface); }