コード例 #1
0
    //----------------------- 初始化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);
            }
        }
    }
コード例 #2
0
    // 更新上阵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);
        }
    }
コード例 #3
0
    // 设置 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;
                }
            }
        }
    }
コード例 #4
0
 public void SetUnitSlotUI(int teamId, int slotId, FormationSlotUI slotUI)
 {
     _unitSlotMap [teamId].Add(slotId, slotUI);
 }
コード例 #5
0
    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);
    }