public void Show()
        {
            GUILayout.BeginVertical();
            try {
                GUILayout.BeginHorizontal();
                GUILayout.Label("パーツカラー", uiParams.lStyleB, titleWidth, titleHeight);
                GUILayout.EndHorizontal();

                var maid = holder.CurrentMaid;
                if (maid == null)
                {
                    return;
                }
                if (maid.IsBusy)
                {
                    GUILayout.Space(100);
                    GUILayout.Label("変更中...", uiParams.lStyleB);
                    GUILayout.Space(uiParams.colorRect.height - 105);
                    return;
                }

                scrollViewPosition = GUILayout.BeginScrollView(scrollViewPosition,
                                                               GUILayout.Width(uiParams.colorRect.width),
                                                               GUILayout.Height(viewHeight));
                try {
                    if (!editPartColors.Any())
                    {
                        for (var pcEnum = MaidParts.PARTS_COLOR.NONE + 1; pcEnum < MaidParts.PARTS_COLOR.MAX; pcEnum++)
                        {
                            var part = maid.Parts.GetPartsColor(pcEnum);
                            editPartColors.Add(new EditParts(ref part, presetMgr));
                        }
                    }

                    for (var pcEnum = MaidParts.PARTS_COLOR.NONE + 1; pcEnum < MaidParts.PARTS_COLOR.MAX; pcEnum++)
                    {
                        var part = maid.Parts.GetPartsColor(pcEnum);
                        var idx  = (int)pcEnum;
                        var epc  = editPartColors[idx];

                        GUILayout.BeginHorizontal();
                        try {
                            if (GUILayout.Button(pcEnum.ToString(), uiParams.lStyleB))
                            {
                                epc.expand = !epc.expand;
                            }

                            var label = part.m_bUse ? "未使用" : "使用中";
                            GUILayout.Label(label, uiParams.lStyleRS);
                        } finally {
                            GUILayout.EndHorizontal();
                        }
                        if (!epc.expand)
                        {
                            continue;
                        }

                        if (part.m_nShadowRate != epc.shadowRate.val)
                        {
                            epc.shadowRate.Set(part.m_nShadowRate);
                        }
                        if (sliderHelper.DrawValueSlider("影率", epc.shadowRate))
                        {
                            part.m_nShadowRate = epc.shadowRate.val;
                            maid.Parts.SetPartsColor(pcEnum, part);
                            epc.SetParts(part);
                        }

                        if (epc.HasMainChanged(ref part))
                        {
                            epc.SetMain(part);
                        }
                        if (epc.HasShadowChanged(ref part))
                        {
                            epc.SetShadow(part);
                        }
                        if (part.m_nMainContrast != epc.c.val)
                        {
                            epc.c.Set(part.m_nMainContrast);
                        }
                        if (sliderHelper.DrawValueSlider("主C", epc.c))
                        {
                            part.m_nMainContrast = epc.c.val;
                            maid.Parts.SetPartsColor(pcEnum, part);
                            epc.SetParts(part);
                        }

                        if (part.m_nShadowContrast != epc.shadowC.val)
                        {
                            epc.shadowC.Set(part.m_nShadowContrast);
                        }
                        if (sliderHelper.DrawValueSlider("影C", epc.shadowC))
                        {
                            part.m_nShadowContrast = epc.shadowC.val;
                            maid.Parts.SetPartsColor(pcEnum, part);
                            epc.SetParts(part);
                        }

                        if (sliderHelper.DrawColorSlider("主色", ref epc.main, SliderHelper.DEFAULT_PRESET, ref epc.mainExpand, epc.mainPicker))
                        {
                            epc.ReflectMain();
                            maid.Parts.SetPartsColor(pcEnum, epc.parts);
                        }

                        if (sliderHelper.DrawColorSlider("影色", ref epc.shadow, SliderHelper.DEFAULT_PRESET, ref epc.shadowExpand, epc.shadowPicker))
                        {
                            epc.ReflectShadow();
                            maid.Parts.SetPartsColor(pcEnum, epc.parts);
                        }
                    }
                } finally {
                    GUI.EndScrollView();
                }
            } finally {
                GUILayout.EndVertical();
            }
        }
예제 #2
0
        public void Show(bool reload)
        {
            GUILayout.BeginVertical();
            try {
                GUILayout.BeginHorizontal();
                try {
                    var texIcon = expand ? MinusIcon : PlusIcon;
                    if (GUILayout.Button(texIcon, bStyleLeft, optUnitHeight, optIconWidth))
                    {
                        expand = !expand;
                    }

                    if (GUILayout.Button(edited.name, bStyleLeft, optUnitHeight))
                    {
                        expand = !expand;
                    }
                    if (!expand)
                    {
                        return;
                    }
                } finally {
                    GUILayout.EndHorizontal();
                }

                if (edited.type == ShaderType.UNKNOWN)
                {
                    GUILayout.Label("shader: " + edited.material.shader.name);
                    return;
                }

                GUILayout.BeginHorizontal();
                try {
                    // コピー
                    if (GUILayout.Button(CopyIcon, optUnitHeight, optButonWidthS))
                    {
                        clipHandler.SetClipboard(MateHandler.Instance.ToText(edited));
                        if (tipsCall != null)
                        {
                            tipsCall("マテリアル情報をクリップボードに\nコピーしました");
                        }
                    }

                    GUI.enabled &= clipHandler.isMateText;
                    var icons = PasteIcons;
                    if (GUILayout.Button(icons[0], optUnitHeight, optButonWidthS))
                    {
                        try {
                            MateHandler.Instance.Write(edited, clipHandler.mateText);
                            if (tipsCall != null)
                            {
                                tipsCall("マテリアル情報を貼付けました");
                            }
                        } catch (Exception e) {
                            LogUtil.Error("failed to import mateText", e);
                        }
                    }

                    includeOthers = GUILayout.Toggle(includeOthers, "CF", uiParams.tStyleSS);
                    includeShader = GUILayout.Toggle(includeShader, "S", uiParams.tStyleSS);
                    includeTex    = GUILayout.Toggle(includeTex, "T", uiParams.tStyleSS);
                    GUI.enabled  &= (includeTex | includeShader | includeOthers);
                    if (GUILayout.Button(icons[1], optUnitHeight, optButonWidth))
                    {
                        try {
                            var pasteFlag = 0;
                            if (includeTex)
                            {
                                pasteFlag |= MateHandler.MATE_TEX;
                            }
                            if (includeShader)
                            {
                                pasteFlag |= MateHandler.MATE_SHADER;
                            }
                            if (includeOthers)
                            {
                                pasteFlag |= MateHandler.MATE_COLOR | MateHandler.MATE_FLOAT;
                            }
                            LogUtil.DebugF("material pasting from cp... tex={0}, shader={1}, others={2}",
                                           includeTex, includeShader, includeOthers);
                            MateHandler.Instance.Write(edited, clipHandler.mateText, pasteFlag);
                        } catch (Exception e) {
                            LogUtil.Error("failed to import mateText", e);
                        }

                        if (tipsCall != null)
                        {
                            tipsCall("マテリアル情報を貼付けました");
                        }
                    }
                } finally {
                    GUI.enabled = true;
                    GUILayout.EndHorizontal();
                }

                var material = edited.material;
                var idx      = edited.type.idx;

                if (shaderCombo == null)
                {
                    var selected = (idx >= 0 && idx < ShaderNames.Length) ? ShaderNames[idx] : GUIContent.none;
                    shaderCombo = new ComboBoxLO(selected, ShaderNames, uiParams.bStyleSC, uiParams.boxStyle, uiParams.listStyle, false);
                }
                else
                {
                    shaderCombo.SelectedItemIndex = idx;
                }
                shaderCombo.Show(GUILayout.ExpandWidth(true)); //uiParams.optInsideWidth);

                var selectedIdx = shaderCombo.SelectedItemIndex;
                if (idx != selectedIdx && selectedIdx != -1)
                {
                    LogUtil.Debug("shader changed", idx, "=>", selectedIdx);

                    // シェーダ変更
                    var shaderName0 = ShaderNames[selectedIdx].text;
                    edited.ChangeShader(shaderName0, selectedIdx);
                }

                if (reload)
                {
                    edited.renderQueue.Set(material.renderQueue);
                }

                sliderHelper.SetupFloatSlider("RQ", edited.renderQueue,
                                              edited.renderQueue.range.editMin, edited.renderQueue.range.editMax,
                                              (rq) => {
                    material.SetFloat(ShaderPropType.RenderQueue.propId, rq);
                    material.renderQueue = (int)rq;
                },
                                              ShaderPropType.RenderQueue.opts,
                                              ShaderPropType.RenderQueue.presetVals,
                                              rqResolver.Resolve(slotIdx));


                var sdType = edited.type;
                for (var i = 0; i < sdType.colProps.Length; i++)
                {
                    var colProp   = sdType.colProps[i];
                    var editColor = edited.editColors[i];
                    var picker    = edited.pickers[i];
                    if (reload)
                    {
                        editColor.Set(material.GetColor(colProp.propId));
//                    } else {
//                        if (!editColor.val.HasValue) {
//                            editColor.Set(colProp.defaultVal);
//                            LogUtil.DebugF("value is empty. set white. color={0}, vals={1}, syncs={2}",
//                                editColor.val, editColor.editVals, editColor.isSyncs);
//                        }
                    }

                    if (sliderHelper.DrawColorSlider(colProp, ref editColor, picker))
                    {
                        material.SetColor(colProp.propId, editColor.val);
                    }
                }

                for (var i = 0; i < sdType.fProps.Length; i++)
                {
                    var prop = sdType.fProps[i];
                    if (reload)
                    {
                        edited.editVals[i].Set(material.GetFloat(prop.propId));
                    }

                    switch (prop.valType)
                    {
                    case ValType.Float:
                        // slider
                        var fprop = prop;
                        // fprop.SetValue(mat, val);
                        sliderHelper.SetupFloatSlider(fprop, edited.editVals[i], (val) => fprop.SetValue(material, val));
                        break;

                    case ValType.Bool:
                        cbHelper.ShowCheckBox(prop.name, edited.editVals[i],
                                              (val) => prop.SetValue(material, val));
                        break;

                    case ValType.Enum:
                        cbHelper.ShowComboBox(prop.name, edited.editVals[i],
                                              (val) => prop.SetValue(material, val));
                        break;
                    }
                }
            } finally {
                GUILayout.EndVertical();
            }
        }
        public void Show()
        {
            GUILayout.BeginVertical();
            try {
                GUILayout.BeginHorizontal();
                GUILayout.Label("ボーン表示用スロット 選択", uiParams.lStyleB, titleWidth, titleHeight);
                GUILayout.EndHorizontal();

                var maid = holder.CurrentMaid;
                if (maid == null)
                {
                    return;
                }
                if (maid.IsBusy)
                {
                    GUILayout.Space(100);
                    GUILayout.Label("変更中...", uiParams.lStyleB);
                    GUILayout.Space(uiParams.colorRect.height - 105);
                    return;
                }

                if (boneRenderer.IsEnabled())
                {
                    // 選択メイドが変更された場合に一旦クリア
                    if (boneRenderer.TargetId != maid.GetInstanceID())
                    {
                        boneRenderer.Clear();
                        boneVisible = false;
                    }
                }
                if (sliderHelper.DrawColorSlider("色設定", ref editColor, SliderHelper.DEFAULT_PRESET, ref editExpand, picker))
                {
                    boneRenderer.Color = editColor.val;
                }

                if ((int)TBody.SlotID.end - 1 > maid.body0.goSlot.Count)
                {
                    return;
                }

                var offset = editExpand ? uiParams.unitHeight * 5f : uiParams.itemHeight - uiParams.margin * 3f;
                if (editExpand && picker.expand)
                {
                    offset += ColorPicker.LightTex.height + uiParams.margin * 2f;
                }
                var height = baseHeight - offset;
                GUILayout.BeginHorizontal();
                try {
                    GUI.enabled = selectedSlotID != -1 && boneRenderer.IsEnabled();
                    string buttonText;
                    if (boneVisible)
                    {
                        colorStore.SetColor(Color.white, Color.green);
                        buttonText = "ボーン表示";
                    }
                    else
                    {
                        buttonText = "ボーン非表示";
                    }

                    try {
                        if (GUILayout.Button(buttonText, uiParams.bStyle, uiParams.optBtnHeight, toggleWidth))
                        {
                            boneVisible = !boneVisible;
                            boneRenderer.SetVisible(boneVisible);
                            var slot = maid.body0.goSlot[selectedSlotID];
                            if (boneVisible && !boneRenderer.IsEnabled() && slot != null && slot.obj != null)
                            {
                                boneRenderer.Setup(slot.obj, slot.RID);
                                boneRenderer.TargetId = maid.GetInstanceID();
                            }
                        }
                    } finally {
                        colorStore.Restore();
                    }
                    GUI.enabled = true;
                    if (skipEmptySlot)
                    {
                        colorStore.SetColor(Color.white, Color.green);
                        buttonText = "空スロット省略";
                    }
                    else
                    {
                        buttonText = "全スロット表示";
                    }

                    try {
                        if (GUILayout.Button(buttonText, uiParams.bStyle, uiParams.optBtnHeight, toggleWidth))
                        {
                            skipEmptySlot = !skipEmptySlot;
                        }
                    } finally {
                        colorStore.Restore();
                    }
                } finally {
                    GUILayout.EndHorizontal();
                }
                scrollViewPosition = GUILayout.BeginScrollView(scrollViewPosition,
                                                               GUILayout.Width(uiParams.colorRect.width),
                                                               GUILayout.Height(height));
                try {
                    for (var i = 0; i < slotNames.Length; i++)
                    {
                        var slotItem    = maid.body0.goSlot[i];
                        var slotEnabled = (slotItem.obj != null && slotItem.morph != null && slotItem.obj.activeSelf);
                        if (skipEmptySlot && !slotEnabled)
                        {
                            continue;
                        }

                        GUILayout.BeginHorizontal();
                        try {
                            GUI.enabled = slotEnabled;
                            var selected = (i == selectedSlotID);
                            var toggleOn = GUILayout.Toggle(selected, slotNames[i], uiParams.tStyleS, toggleWidth);
                            if (toggleOn)
                            {
                                if (selected)
                                {
                                    if (slotItem.obj != null)
                                    {
                                        // 既に選択済の場合、アイテム変更チェック
                                        if (boneRenderer.ItemID != slotItem.RID)
                                        {
                                            boneRenderer.Setup(slotItem.obj, slotItem.RID);
                                            boneRenderer.SetVisible(boneVisible);
                                            boneRenderer.TargetId = maid.GetInstanceID();
                                        }
                                    }
                                    else
                                    {
                                        boneVisible = false;
                                    }
                                }
                                else
                                {
                                    selectedSlotID = i;
                                    if (slotItem.obj != null)
                                    {
                                        boneRenderer.Setup(slotItem.obj, slotItem.RID);
                                        boneRenderer.SetVisible(boneVisible);
                                        boneRenderer.TargetId = maid.GetInstanceID();
                                    }
                                }
                            }
                            GUI.enabled = true;

                            if (slotEnabled)
                            {
                                var modelName = slotItem.m_strModelFileName ?? string.Empty;
                                GUILayout.Label(modelName, uiParams.lStyleS, otherWidth);
                            }
                        } finally {
                            GUILayout.EndHorizontal();
                        }
                    }
                } finally {
                    GUILayout.EndScrollView();
                }
            } finally {
                GUILayout.EndVertical();
            }
        }