コード例 #1
0
ファイル: UITurnTable.cs プロジェクト: saeipi/UISuper
 void UpdateItem(int count)
 {
     for (int i = 0; i < count; i++)
     {
         GameObject imageObj = adapter.GetGameObject(this, i);
         if (imageObj == null)
         {
             continue;
         }
         imageObj.transform.SetParent(uiRoundTable.transform, false);
         imageObj.AddComponent <KSPrivateDataReference>().setData <int>(i);
         TurnTableItem item = imageObj.GetComponent <TurnTableItem>();
         Destroy(images[i]);
         images[i] = imageObj;
         lastRoundTableRotationRadian = roundTableRotationRadian - 1;
         UpdateLayout();
     }
     _updateItemDone = true;
 }
コード例 #2
0
ファイル: UITurnTable.cs プロジェクト: saeipi/UISuper
    //在update的时候调用,更新ui
    public void UpdateLayout()
    {
        //如果没旋转,保持原样,不必刷新位置
        if (lastRoundTableRotationRadian == roundTableRotationRadian)
        {
            return;
        }
        lastRoundTableRotationRadian = roundTableRotationRadian;
        int newSelectedIndex = selectedIndex;

        for (int i = 0; i < count; i++)
        {
            //计算占位元素的位置(相对圆心的位置)
            float   angleRadian = roundTableRotationRadian + i * Mathf.PI * 2 / maxCount + selectedRadian;
            Vector3 pos         = new Vector3(Mathf.Cos(angleRadian), 0, Mathf.Sin(angleRadian)) * roundTableRadius;
            //设置占位元素的相对位置
            GameObject placeHolder = placeHolders[i];
            placeHolder.gameObject.transform.localPosition = pos;

            GameObject imageObj = images[i];
            //通知item位置设置变化(item可在此修改自己alpha 亮度等)
            TurnTableItem item = imageObj.GetComponent <TurnTableItem>();
            if (item != null)
            {
                item.OnPositionChanged(pos, roundTableRadius);
            }

            if (angleRadian >= selectMinRadian && angleRadian <= selectMaxRadian)
            {
                newSelectedIndex = i;
            }
        }
        if (newSelectedIndex != selectedIndex)
        {
            selectedIndex = newSelectedIndex;
            //通知选择变化
            if (selectedListener != null)
            {
                selectedListener(selectedIndex);
            }
        }
    }
コード例 #3
0
ファイル: UITurnTable.cs プロジェクト: saeipi/UISuper
    //设置数据绑定对象。只能设置一次,并且在start调用才生效
    public void SetAdapter(TurnTableAdapter adapter, bool coroutineLoading = false)
    {
        this.adapter = adapter;

        //摆斜占位盘子、z轴偏移位置
        float xOffset = 0;
        float zOffset = 0;
        float yOffset = 0;

        switch (selectMode)
        {
        case SelectedMode.Bottom:
            selectedRadian = Mathf.PI * 3 / 2;
            xOffset        = 0;
            zOffset        = Mathf.Cos(roundTableTiltDegree * Mathf.Deg2Rad) * roundTableRadius;
            yOffset        = Mathf.Sin(roundTableTiltDegree * Mathf.Deg2Rad) * roundTableRadius;
            break;

        case SelectedMode.Top:
            selectedRadian = Mathf.PI / 2;
            xOffset        = 0;
            zOffset        = -Mathf.Cos(roundTableTiltDegree * Mathf.Deg2Rad) * roundTableRadius;
            yOffset        = -Mathf.Sin(roundTableTiltDegree * Mathf.Deg2Rad) * roundTableRadius;
            break;

        case SelectedMode.Right:
            selectedRadian = 0;
            xOffset        = -Mathf.Cos(selectedRadian) * roundTableRadius;
            zOffset        = 0;
            yOffset        = 0;
            break;

        case SelectedMode.Left:
            selectedRadian = Mathf.PI;
            xOffset        = -Mathf.Cos(selectedRadian) * roundTableRadius;
            zOffset        = 0;
            yOffset        = 0;
            break;

        case SelectedMode.Center:
            selectedRadian = Mathf.PI / 2;
            xOffset        = 0;
            zOffset        = 0;
            yOffset        = 0;
            break;
        }

        tiltTablePlaceHolder.transform.localPosition = new Vector3(xOffset, yOffset, zOffset);
        tiltTablePlaceHolder.transform.rotation      = Quaternion.Euler(new Vector3(-roundTableTiltDegree, 0, 0));
        //通过adapter获取数据数量
        maxCount = adapter.GetMaxCount();
        count    = adapter.GetCount();
        //计算每个item占的角度、从而计算出可滑动最大、最小角度
        eachRadian        = 2 * Mathf.PI / maxCount;
        minRotationRadian = -(eachRadian * (count - 1) + eachRadian / 2);
        maxRotationRadian = eachRadian / 2;
        selectMaxRadian   = selectedRadian + eachRadian / 2;
        selectMinRadian   = selectedRadian - eachRadian / 2;

        for (int i = 0; i < tiltTablePlaceHolder.transform.childCount; i++)
        {
            GameObject obj = tiltTablePlaceHolder.transform.GetChild(i).gameObject;
            Destroy(obj);
        }
        for (int i = 0; i < uiRoundTable.transform.childCount; i++)
        {
            Destroy(uiRoundTable.transform.GetChild(i).gameObject);
        }
        if (coroutineLoading)
        {
            //动态添加占位元素 和 显示元素
            placeHolders = new GameObject[count];
            images       = new GameObject[count];
            for (int i = 0; i < count; i++)
            {
                GameObject placeHolder = new GameObject();
                placeHolder.name = "" + i;
                placeHolder.AddComponent <PlaceHolder>();
                placeHolder.transform.SetParent(tiltTablePlaceHolder.transform, false);
                GameObject imageObj = new GameObject();
                imageObj.transform.SetParent(uiRoundTable.transform, false);
                placeHolders[i] = placeHolder;
                images[i]       = imageObj;
            }
            lastRoundTableRotationRadian = roundTableRotationRadian - 1;
            UpdateLayout();
            UpdateItem(count);
        }
        else
        {
            _updateItemDone = true;
            //动态添加占位元素 和 显示元素
            placeHolders = new GameObject[count];
            images       = new GameObject[count];
            for (int i = 0; i < count; i++)
            {
                GameObject placeHolder = new GameObject();
                placeHolder.name = "" + i;
                placeHolder.AddComponent <PlaceHolder>();
                placeHolder.transform.SetParent(tiltTablePlaceHolder.transform, false);

                GameObject imageObj = adapter.GetGameObject(this, i);
                imageObj.transform.SetParent(uiRoundTable.transform, false);
                imageObj.AddComponent <KSPrivateDataReference>().setData <int>(i);
                TurnTableItem item = imageObj.GetComponent <TurnTableItem>();
                placeHolders[i] = placeHolder;
                images[i]       = imageObj;
            }
            lastRoundTableRotationRadian = roundTableRotationRadian - 1;
            UpdateLayout();
        }
    }