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(); } }
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(); } }