Parcourir la source

置灰脚本组件上传

薛鸿潇 il y a 5 ans
Parent
commit
9fcb428382

+ 136 - 0
mk_framework/assets/script/game/component/SetGray.ts

@@ -0,0 +1,136 @@
+/**
+ * 节点置灰组件
+ * @date 20210514
+ * @author kaka
+ * @description 暂时不包括spine动画
+ */
+
+const { ccclass, property } = cc._decorator;
+
+@ccclass
+export default class SetGray extends cc.Component {
+    @property(cc.Material)
+    private normal: cc.Material = null;   //内置正常材质
+
+    @property(cc.Material)
+    private gray: cc.Material = null;   //内置灰色材质
+
+    @property({ type: false, displayName: "是否置灰" })
+    public grayState: boolean = false;   //默认置灰状态
+
+    //上次置灰状态
+    private lastState = false;
+    private spArr = null;
+    private btnArr = null;
+    private labArr = null;
+    private labArrC = [];
+    private outLineArr = null;
+    private outLineArrC = [];
+    private labRichArr = null;
+    private labRichArrC = [];
+    private grayColor = new cc.Color(166, 166, 166, 255);
+    private grayOutLineColor = new cc.Color(230, 230, 230, 255);
+
+    private skeArr = null;
+
+    onLoad() {
+        this.spArr = this.node.getComponentsInChildren(cc.Sprite);
+        this.btnArr = this.node.getComponentsInChildren(cc.Button);
+        this.labArr = this.node.getComponentsInChildren(cc.Label);
+        this.outLineArr = this.node.getComponentsInChildren(cc.LabelOutline);
+        this.labRichArr = this.node.getComponentsInChildren(cc.RichText);
+        this.skeArr = this.node.getComponentsInChildren(sp.Skeleton);
+
+        this.setGray(this.grayState);
+    }
+
+    /**
+     * 设置颜色
+     * @param isGray true 置灰 false 还原正常 
+     */
+    setGray(isGray: boolean) {
+        if (this.lastState == isGray) {
+            console.log('和上次设置相同')
+            return
+        }
+        this.lastState = isGray;
+        //置灰
+        if (isGray) {
+            //内建材质
+            let len = this.spArr.length;
+            for (var i = 0; i < len; i++) {
+                this.spArr[i].setMaterial(0, this.gray);
+            }
+
+            let btnLen = this.btnArr.length;
+            for (var n = 0; n < btnLen; n++) {
+                (this.btnArr[n] as cc.Button).enableAutoGrayEffect = true;
+                (this.btnArr[n] as cc.Button).grayMaterial = this.gray;
+                (this.btnArr[n] as cc.Button).interactable = false;
+            }
+
+            //设置所有文本颜色
+            let labLen = this.labArr.length;
+            for (var j = 0; j < labLen; j++) {
+                this.labArrC[j] = this.labArr[j].node.color;
+                this.labArr[j].node.color = this.grayColor;
+            }
+
+            //设置所有描边颜色
+            let outLineLen = this.outLineArr.length;
+            for (var k = 0; k < outLineLen; k++) {
+                this.outLineArrC[k] = this.outLineArr[k].color;
+                this.outLineArr[k].color = this.grayOutLineColor;
+            }
+
+            //设置所有富文本颜色
+            let labRichLen = this.labRichArr.length;
+            for (var m = 0; m < labRichLen; m++) {
+                this.labRichArrC[m] = this.labRichArr[m].node.color;
+                this.labRichArr[m].node.color = this.grayColor;
+            }
+
+            // let skeLen = this.skeArr.length;
+            // for (var p = 0; p < skeLen; p++) {
+            //     this.skeArr[p].setMaterial(0, this.gray);
+            //     (this.skeArr[p] as any).markForRender(true);
+            // }
+        }
+        else {
+            //内建材质
+            let len = this.spArr.length;
+            for (var i = 0; i < len; i++) {
+                this.spArr[i].setMaterial(0, this.normal);
+            }
+
+            let btnLen = this.btnArr.length;
+            for (var n = 0; n < btnLen; n++) {
+                (this.btnArr[n] as cc.Button).interactable = true;
+            }
+
+            //设置所有文本颜色
+            let labLen = this.labArr.length;
+            for (var j = 0; j < labLen; j++) {
+                this.labArr[j].node.color = this.labArrC[j];
+            }
+
+            //设置所有描边颜色
+            let outLineLen = this.outLineArr.length;
+            for (var k = 0; k < outLineLen; k++) {
+                this.outLineArr[k].color = this.outLineArrC[k];
+            }
+
+            //设置所有富文本颜色
+            let labRichLen = this.labRichArr.length;
+            for (var m = 0; m < labRichLen; m++) {
+                this.labRichArr[m].node.color = this.labRichArrC[m];
+            }
+
+            // let skeLen = this.skeArr.length;
+            // for (var p = 0; p < skeLen; p++) {
+            //     this.skeArr[p].setMaterial(0, this.normal);
+            //     (this.skeArr[p] as any).markForRender(true);
+            // }
+        }
+    }
+}

+ 9 - 0
mk_framework/assets/script/game/component/SetGray.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "f67a9484-3e50-4bf2-b1c7-a555fa835656",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}