Browse Source

Merge branch 'master' of http://zhi-edu.com:3000/lan/zedu_client

Administrator 3 năm trước cách đây
mục cha
commit
ef9ac52278
43 tập tin đã thay đổi với 12199 bổ sung53 xóa
  1. 12 0
      assets/gameChild/particle.meta
  2. 116 0
      assets/gameChild/particle/cloud.plist
  3. 5 0
      assets/gameChild/particle/cloud.plist.meta
  4. 24 0
      assets/prefab/public/GuideUI.prefab
  5. 11048 5
      assets/scene/Editor.fire
  6. 49 0
      assets/script/cell/ChoosePartCell.ts
  7. 9 0
      assets/script/cell/ChoosePartCell.ts.meta
  8. 51 0
      assets/script/cell/FiveDrawCell.ts
  9. 9 0
      assets/script/cell/FiveDrawCell.ts.meta
  10. 153 46
      assets/script/rule/GuideRule.ts
  11. 10 0
      assets/script/ui/Editor.ts
  12. 79 0
      assets/script/ui/child/GuideMainUI.ts
  13. 9 0
      assets/script/ui/child/GuideMainUI.ts.meta
  14. 109 2
      assets/script/ui/public/GuideUI.ts
  15. BIN
      assets/texture/GuideUI/btnTip.png
  16. 36 0
      assets/texture/GuideUI/btnTip.png.meta
  17. 12 0
      assets/texture/Public/board.meta
  18. BIN
      assets/texture/Public/board/blue.png
  19. 36 0
      assets/texture/Public/board/blue.png.meta
  20. BIN
      assets/texture/Public/board/blue_.png
  21. 36 0
      assets/texture/Public/board/blue_.png.meta
  22. BIN
      assets/texture/Public/board/btn_board.png
  23. 36 0
      assets/texture/Public/board/btn_board.png.meta
  24. BIN
      assets/texture/Public/board/frame_board.png
  25. 36 0
      assets/texture/Public/board/frame_board.png.meta
  26. BIN
      assets/texture/Public/board/green.png
  27. 36 0
      assets/texture/Public/board/green.png.meta
  28. BIN
      assets/texture/Public/board/green_.png
  29. 36 0
      assets/texture/Public/board/green_.png.meta
  30. BIN
      assets/texture/Public/board/orange.png
  31. 36 0
      assets/texture/Public/board/orange.png.meta
  32. BIN
      assets/texture/Public/board/orange_.png
  33. 36 0
      assets/texture/Public/board/orange_.png.meta
  34. BIN
      assets/texture/Public/board/red.png
  35. 36 0
      assets/texture/Public/board/red.png.meta
  36. BIN
      assets/texture/Public/board/red_.png
  37. 36 0
      assets/texture/Public/board/red_.png.meta
  38. BIN
      assets/texture/Public/board/violet.png
  39. 36 0
      assets/texture/Public/board/violet.png.meta
  40. BIN
      assets/texture/Public/board/violet_.png
  41. 36 0
      assets/texture/Public/board/violet_.png.meta
  42. BIN
      assets/texture/Public/board/white.png
  43. 36 0
      assets/texture/Public/board/white.png.meta

+ 12 - 0
assets/gameChild/particle.meta

@@ -0,0 +1,12 @@
+{
+  "ver": "1.1.2",
+  "uuid": "bf2ed30a-12d6-4f78-8476-4afd9dbdfaa5",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

+ 116 - 0
assets/gameChild/particle/cloud.plist

@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>angle</key>
+    <integer>0</integer>
+    <key>angleVariance</key>
+    <integer>5</integer>
+    <key>blendFuncDestination</key>
+    <integer>771</integer>
+    <key>blendFuncSource</key>
+    <integer>770</integer>
+    <key>duration</key>
+    <integer>-1</integer>
+    <key>emitterType</key>
+    <integer>0</integer>
+    <key>finishColorAlpha</key>
+    <integer>1</integer>
+    <key>finishColorBlue</key>
+    <integer>1</integer>
+    <key>finishColorGreen</key>
+    <integer>1</integer>
+    <key>finishColorRed</key>
+    <integer>1</integer>
+    <key>finishColorVarianceAlpha</key>
+    <integer>0</integer>
+    <key>finishColorVarianceBlue</key>
+    <integer>0</integer>
+    <key>finishColorVarianceGreen</key>
+    <integer>0</integer>
+    <key>finishColorVarianceRed</key>
+    <integer>0</integer>
+    <key>finishParticleSize</key>
+    <integer>160</integer>
+    <key>finishParticleSizeVariance</key>
+    <integer>50</integer>
+    <key>gravityx</key>
+    <integer>1</integer>
+    <key>gravityy</key>
+    <integer>0</integer>
+    <key>maxParticles</key>
+    <integer>5</integer>
+    <key>maxRadius</key>
+    <integer>0</integer>
+    <key>maxRadiusVariance</key>
+    <integer>0</integer>
+    <key>minRadius</key>
+    <integer>0</integer>
+    <key>particleLifespan</key>
+    <integer>30</integer>
+    <key>particleLifespanVariance</key>
+    <integer>0</integer>
+    <key>radialAccelVariance</key>
+    <integer>0</integer>
+    <key>radialAcceleration</key>
+    <integer>0</integer>
+    <key>rotatePerSecond</key>
+    <integer>0</integer>
+    <key>rotatePerSecondVariance</key>
+    <integer>0</integer>
+    <key>rotationEnd</key>
+    <integer>0</integer>
+    <key>rotationEndVariance</key>
+    <integer>0</integer>
+    <key>rotationStart</key>
+    <integer>0</integer>
+    <key>rotationStartVariance</key>
+    <integer>0</integer>
+    <key>sourcePositionVariancex</key>
+    <integer>0</integer>
+    <key>sourcePositionVariancey</key>
+    <integer>0</integer>
+    <key>sourcePositionx</key>
+    <real>373.7277526855469</real>
+    <key>sourcePositiony</key>
+    <real>478.40472412109375</real>
+    <key>speed</key>
+    <integer>50</integer>
+    <key>speedVariance</key>
+    <integer>0</integer>
+    <key>startColorAlpha</key>
+    <integer>1</integer>
+    <key>startColorBlue</key>
+    <integer>1</integer>
+    <key>startColorGreen</key>
+    <integer>1</integer>
+    <key>startColorRed</key>
+    <integer>1</integer>
+    <key>startColorVarianceAlpha</key>
+    <integer>0</integer>
+    <key>startColorVarianceBlue</key>
+    <integer>0</integer>
+    <key>startColorVarianceGreen</key>
+    <integer>0</integer>
+    <key>startColorVarianceRed</key>
+    <integer>0</integer>
+    <key>startParticleSize</key>
+    <integer>256</integer>
+    <key>startParticleSizeVariance</key>
+    <integer>120</integer>
+    <key>tangentialAccelVariance</key>
+    <integer>0</integer>
+    <key>tangentialAcceleration</key>
+    <integer>0</integer>
+    <key>spriteFrameUuid</key>
+    <string>b0542769-a0ab-4d89-9379-87c6d9973402</string>
+    <key>positionType</key>
+    <integer>1</integer>
+    <key>rotationIsDir</key>
+    <false/>
+    <key>minRadiusVariance</key>
+    <integer>0</integer>
+    <key>emissionRate</key>
+    <real>0.2</real>
+  </dict>
+</plist>

+ 5 - 0
assets/gameChild/particle/cloud.plist.meta

@@ -0,0 +1,5 @@
+{
+  "ver": "2.0.1",
+  "uuid": "bffe3a63-a73e-4126-a8fe-4b4cffe96afb",
+  "subMetas": {}
+}

+ 24 - 0
assets/prefab/public/GuideUI.prefab

@@ -203,6 +203,30 @@
     "actions": [],
     "audios": [],
     "jumpPage": -1,
+    "isGraphics": false,
+    "drawLineWidth": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "drawColor": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "drawStartPos": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "drawEndPos": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "drawRadius": 0,
     "_id": ""
   },
   {

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 11048 - 5
assets/scene/Editor.fire


+ 49 - 0
assets/script/cell/ChoosePartCell.ts

@@ -0,0 +1,49 @@
+/** @format */
+
+import {Data} from '../GameControl'
+import List from '../uiutils/List'
+import {ccUtils} from '../utils/ccUtils'
+
+/** @format */
+
+const {ccclass, property} = cc._decorator
+@ccclass
+export class ChoosePartCell extends cc.Component {
+    canChoosePart: Function
+    partScrollNode: cc.Node
+    partScrollList: List
+    partClickFuc: Function
+    curPart: number = 1
+    init(allNum: number, target, partClickFuc: Function, canChoosePart?: Function) {
+        this.partScrollNode = cc.find('scrollView', this.node)
+        this.partScrollList = this.partScrollNode.getComponent(List)
+        this.partScrollList._init()
+        this.partScrollList.numItems = allNum
+        this.partClickFuc = partClickFuc.bind(target)
+        if (canChoosePart) this.canChoosePart = canChoosePart.bind(target)
+    }
+    initPartScrollItem(node, index) {
+        node.part = index + 1
+        ccUtils.setLabel((index + 1).toString(), node, 'lb')
+        cc.find('rdBg', node).active = index == this.curPart - 1
+    }
+    initCurPart(part: number) {
+        this.curPart = part
+        if (this.partScrollList) this.partScrollList.numItems = this.partScrollList.numItems
+    }
+    choosePartClick() {
+        if (this.canChoosePart && !this.canChoosePart()) {
+            if (this.partScrollNode.active) this.partScrollNode.active = false
+            return
+        }
+        this.partScrollNode.active = !this.partScrollNode.active
+        this.partScrollList.scrollTo(Data.game.partID - 1, 0)
+    }
+
+    partClick(event) {
+        if (this.canChoosePart && !this.canChoosePart()) return
+        this.partScrollNode.active = false
+        this.partClickFuc && this.partClickFuc(event)
+        this.initCurPart(event.target.part)
+    }
+}

+ 9 - 0
assets/script/cell/ChoosePartCell.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "05ccb46e-1a65-4c20-bc97-17678714e049",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 51 - 0
assets/script/cell/FiveDrawCell.ts

@@ -0,0 +1,51 @@
+/** @format */
+
+import {DrawBoardCell} from './DrawBoardCell'
+
+/** @format */
+let drawColor = ['#f04949', '#2c98f2', '#66bb2f', '#ffaf00', '#9b1fec']
+const {ccclass, property} = cc._decorator
+@ccclass
+export class FiveDrawCell extends cc.Component {
+    dbCell: DrawBoardCell
+    init(dbCellNode: cc.Node) {
+        //初始化画板
+        this.dbCell = dbCellNode.getComponent(DrawBoardCell)
+        this.dbCell.initDb(1280, 480)
+        //默认画板颜色
+        this.showColorChoose(0)
+    }
+    showColorChoose(dbColor) {
+        this.node.children[0].children.forEach((value, i) => {
+            if (value.children[0]) value.children[0].active = i == dbColor
+        })
+        this.dbCell.setDbColor(cc.Color.BLACK.fromHEX(drawColor[dbColor]))
+    }
+    hideDraw() {
+        this.drawLineClick(null, false)
+    }
+    drawLineClick(e, show?: boolean) {
+        let showDraw = !this.dbCell.node.active
+        if (show != undefined) {
+            this.dbCell.node.active = show
+            showDraw = show
+        } else {
+            this.dbCell.node.active = showDraw
+        }
+        cc.find('drawlayout', this.node).active = showDraw
+        this.node.getComponent(cc.Sprite).enabled = showDraw
+    }
+
+    setColorClick(event, color) {
+        let dbColor = parseInt(color) - 1
+        this.dbCell.setDbColor(cc.Color.BLACK.fromHEX(drawColor[dbColor]))
+        this.showColorChoose(dbColor)
+    }
+
+    clearColorClick(event, color) {
+        this.dbCell.db.clearColor()
+        this.scheduleOnce(() => {
+            this.dbCell.drawToImg()
+        })
+    }
+}

+ 9 - 0
assets/script/cell/FiveDrawCell.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "77726caa-b67d-4415-8807-230d7815e42e",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 153 - 46
assets/script/rule/GuideRule.ts

@@ -3,6 +3,7 @@ import {Data, Mgr} from '../GameControl'
 import {GuideUI} from '../ui/public/GuideUI'
 import {PathUtils} from '../utils/PathUtils'
 import {ACT_TYPE, GAME_TYPE, PLAY_STATE} from '../enums/Enum'
+import {DrawBoard} from '../uiutils/DrawBoard'
 
 const {ccclass, property} = cc._decorator
 
@@ -128,19 +129,86 @@ class CustomActionUnion {
 
 @ccclass
 export default class GuideRule extends cc.Component {
-    guideUI: GuideUI
-    dataJson: any
+    @property({
+        displayName: '节点执行顺序',
+    })
+    actionTag: number = 0
+    @property({
+        displayName: '节点队列执行',
+    })
+    nodeSequence: boolean = false
     @property({type: [CustomActionUnion], displayName: '动作组'})
     actions: CustomActionUnion[] = []
     @property({type: [CustomAudio], displayName: '声音'})
     audios: CustomAudio[] = []
     @property({displayName: '跳转页数'})
     jumpPage: number = -1
+    @property({
+        displayName: '画线节点',
+    })
+    isGraphics: boolean = false
+    @property({
+        displayName: '画线宽带',
+        visible() {
+            return this.isGraphics
+        },
+    })
+    drawLineWidth: number = 0
+    @property({
+        displayName: '画线颜色',
+        visible() {
+            return this.isGraphics
+        },
+    })
+    drawColor: cc.Color = cc.Color.WHITE
+    @property({
+        displayName: '画线起点(圆心)',
+        visible() {
+            return this.isGraphics
+        },
+    })
+    drawStartPos: cc.Vec2 = cc.v2(0, 0)
+    @property({
+        displayName: '画线终点',
+        visible() {
+            return this.isGraphics
+        },
+    })
+    drawEndPos: cc.Vec2 = cc.v2(0, 0)
+    @property({
+        displayName: '画线半径',
+        min: 0,
+        visible() {
+            return this.isGraphics
+        },
+    })
+    drawRadius: number = 0
+
+    guideUI: GuideUI
+    dataJson: any
     playState: PLAY_STATE = PLAY_STATE.start
     async initUI(data: any) {
         this.dataJson = data
         this.reset()
-        if (data.particle && !CC_EDITOR) {
+        let {
+            particle,
+            ani = '',
+            tex = '',
+            jumpPage = -1,
+            actions = [],
+            audios = [],
+            isGraphics = false,
+            drawStartPos = cc.v2(0, 0),
+            drawEndPos = cc.v2(0, 0),
+            drawRadius = 0,
+            drawLineWidth = 0,
+            drawColor = '#ffffff',
+            actionTag = 0,
+            nodeSequence = false,
+        } = data
+        this.actionTag = actionTag
+        this.nodeSequence = nodeSequence
+        if (particle && !CC_EDITOR) {
             this.node.removeComponent(cc.Sprite)
             let particleSystem = this.node.addComponent(cc.ParticleSystem)
             particleSystem.playOnLoad = true
@@ -155,58 +223,97 @@ export default class GuideRule extends cc.Component {
             if (!this.node.getComponent(cc.Sprite)) this.node.addComponent(cc.Sprite)
         }
         let animation = this.node.getComponent(cc.Animation)
-        if (data.ani && !CC_EDITOR) {
+        if (ani && !CC_EDITOR) {
             animation.getClips().forEach(clip => {
                 animation.removeClip(clip, true)
             })
             let clip: cc.AnimationClip = await this.guideUI.loadSync(
                 Data.game.gameBundle,
-                PathUtils.addGP('guide/' + data.ani, '', 1),
+                PathUtils.addGP('guide/' + ani, '', 1),
                 cc.AnimationClip,
             )
             animation.addClip(clip)
         }
-        if (data.tex) this.guideUI.loadSemeImg(PathUtils.addGP('guide/' + data.tex, '', 1), this.node)
-        if (data.jumpPage) this.jumpPage = data.jumpPage
+        if (tex) this.guideUI.loadSemeImg(PathUtils.addGP('guide/' + tex, '', 1), this.node)
+        this.jumpPage = jumpPage
         this.actions = []
-        if (data.actions) {
-            for (let i = 0; i < data.actions.length; i++) {
-                let action: any = data.actions[i]
-                let customActionUnion: CustomActionUnion = new CustomActionUnion()
-                customActionUnion.isSequence = action.isSequence
-                if (action.repeat) customActionUnion.repeat = action.repeat
-                if (action.endDelay) customActionUnion.endDelay = action.endDelay
-                if (action.startDelay) customActionUnion.startDelay = action.startDelay
-                customActionUnion.actions = []
-                for (let i = 0; i < action.actions.length; i++) {
-                    let customAction: CustomAction = new CustomAction()
-                    let customActionData = action.actions[i]
-                    customAction.actionType = customActionData.actionType
-                    if (customActionData.pos != undefined)
-                        customAction.pos = cc.v2(customActionData.pos.x, customActionData.pos.y)
-                    if (customActionData.scale != undefined) {
-                        customAction.scale = cc.v2(customActionData.scale.x, customActionData.scale.y)
-                    }
-                    if (customActionData.rotate != undefined) customAction.rotate = customActionData.rotate
-                    if (customActionData.height != undefined) customAction.height = customActionData.height
-                    if (customActionData.jumpTimes != undefined) customAction.jumpTimes = customActionData.jumpTimes
-                    if (customActionData.opacity != undefined) customAction.opacity = customActionData.opacity
-                    if (customActionData.endOpacity != undefined) customAction.endOpacity = customActionData.endOpacity
-                    if (customActionData.runTime != undefined) customAction.runTime = customActionData.runTime
-                    if (customActionData.startDelay != undefined) customAction.startDelay = customActionData.startDelay
-                    if (customActionData.endDelay != undefined) customAction.endDelay = customActionData.endDelay
-                    if (customActionData.audios != undefined) {
-                        customAction.audios = this.getCustomAudioObj(customActionData)
-                    }
-                    customAction.isSequence = customActionData.isSequence
-                    if (customActionData.repeat) customAction.repeat = customActionData.repeat
-                    customActionUnion.actions.push(customAction)
-                }
-                this.actions.push(customActionUnion)
+        for (let i = 0; i < actions.length; i++) {
+            let {isSequence = true, repeat = 0, endDelay = 0, startDelay = 0} = actions[i]
+            let customActionUnion: CustomActionUnion = new CustomActionUnion()
+            customActionUnion.isSequence = isSequence
+            customActionUnion.repeat = repeat
+            customActionUnion.endDelay = endDelay
+            customActionUnion.startDelay = startDelay
+            customActionUnion.actions = []
+            let action = actions[i]
+            for (let i = 0; i < action.actions.length; i++) {
+                let customAction: CustomAction = new CustomAction()
+                let {
+                    actionType = 0,
+                    pos = cc.v2(0, 0),
+                    scale = cc.v2(0, 0),
+                    rotate = 0,
+                    height = 0,
+                    jumpTimes = 0,
+                    opacity = 0,
+                    endOpacity = 255,
+                    runTime = 0,
+                    startDelay = 0,
+                    endDelay = 0,
+                    isSequence = true,
+                    repeat = 0,
+                    audios = [],
+                } = action.actions[i]
+                customAction.actionType = actionType
+                customAction.pos = cc.v2(pos.x, pos.y)
+                customAction.scale = cc.v2(scale.x, scale.y)
+                customAction.rotate = rotate
+                customAction.height = height
+                customAction.jumpTimes = jumpTimes
+                customAction.opacity = opacity
+                customAction.endOpacity = endOpacity
+                customAction.runTime = runTime
+                customAction.startDelay = startDelay
+                customAction.endDelay = endDelay
+                customAction.audios = this.getCustomAudioObj(audios)
+                customAction.isSequence = isSequence
+                customAction.repeat = repeat
+                customActionUnion.actions.push(customAction)
             }
+            this.actions.push(customActionUnion)
+        }
+        this.audios = this.getCustomAudioObj(audios)
+        this.drawRadius = drawRadius
+        this.drawEndPos = cc.v2(drawEndPos.x, drawEndPos.y)
+        this.drawStartPos = cc.v2(drawStartPos.x, drawStartPos.y)
+        this.drawLineWidth = drawLineWidth
+        this.drawColor = cc.Color.WHITE.fromHEX(drawColor)
+        this.isGraphics = isGraphics
+        let sprite = this.node.getComponent(cc.Sprite)
+        if (isGraphics) {
+            let pos = cc.v2(drawEndPos.x + 640, drawEndPos.y + 400)
+            let posStart = cc.v2(drawStartPos.x + 640, drawStartPos.y + 400)
+            let db = new DrawBoard(1280, 800, 1)
+            db.setLineWidth(drawLineWidth)
+            db.setColor(this.drawColor.r, this.drawColor.g, this.drawColor.b, this.drawColor.a)
+            if (this.drawRadius > 0) {
+                db.circle(posStart.x, posStart.y, drawRadius)
+                db.setColor(0, 0, 0, 0)
+                db.circle(posStart.x, posStart.y, drawRadius - drawLineWidth)
+            } else {
+                db.line(posStart.x, posStart.y, pos.x, pos.y)
+            }
+            //将数据传递给贴图对象
+            sprite.sizeMode = cc.Sprite.SizeMode.CUSTOM
+            this.node.width = db.width
+            this.node.height = db.height
+            let texture = new cc.RenderTexture()
+            texture.initWithSize(db.width, db.height, cc.RenderTexture.DepthStencilFormat.RB_FMT_S8)
+            sprite.spriteFrame = new cc.SpriteFrame(texture)
+            texture.initWithData(db.getData(), cc.Texture2D.PixelFormat.RGBA8888, db.width, db.height)
+        } else {
+            sprite.sizeMode = cc.Sprite.SizeMode.TRIMMED
         }
-        this.audios = []
-        if (data.audios) this.audios = this.getCustomAudioObj(data)
     }
     reset() {
         this.node.stopAllActions()
@@ -233,9 +340,9 @@ export default class GuideRule extends cc.Component {
     }
     getCustomAudioObj(data) {
         let audios = []
-        for (let i = 0; i < data.audios.length; i++) {
+        for (let i = 0; i < data.length; i++) {
             let customAudio: CustomAudio = new CustomAudio()
-            let audioData = data.audios[i]
+            let audioData = data[i]
             customAudio.audioDelay = audioData.audioDelay
             customAudio.audioName = audioData.audioName
             audios.push(customAudio)
@@ -392,7 +499,7 @@ export default class GuideRule extends cc.Component {
                     }
                     allUnionActionArr[allUnionActionIndex].tween.push(unionTween)
                 }
-                let allUnionAction = t()
+                let allUnionAction = t().delay(this.dataJson.actionTagDelayTime)
                 for (let manyUnionAction of allUnionActionArr) {
                     if (manyUnionAction.lastUnionSequence || manyUnionAction.tween.length <= 1) {
                         for (let tempAction of manyUnionAction.tween) {

+ 10 - 0
assets/script/ui/Editor.ts

@@ -378,6 +378,8 @@ export default class Editor extends cc.Component {
                 let nodeData = this.getAniNodeObj(node)
                 pageData.push(nodeData)
                 let guideRule: GuideRule = node.getComponent(GuideRule)
+                if (guideRule.actionTag) nodeData.actionTag = guideRule.actionTag
+                if (guideRule.nodeSequence) nodeData.nodeSequence = guideRule.nodeSequence
                 if (guideRule.jumpPage > -1) nodeData.jumpPage = guideRule.jumpPage
                 if (guideRule.actions.length > 0) {
                     nodeData.actions = []
@@ -445,6 +447,14 @@ export default class Editor extends cc.Component {
                         nodeData.audios.push(audio)
                     }
                 }
+                nodeData.isGraphics = guideRule.isGraphics
+                if (guideRule.isGraphics) {
+                    if (guideRule.drawRadius > 0) nodeData.drawRadius = guideRule.drawRadius
+                    nodeData.drawEndPos = guideRule.drawEndPos
+                    nodeData.drawStartPos = guideRule.drawStartPos
+                    nodeData.drawLineWidth = guideRule.drawLineWidth
+                    nodeData.drawColor = guideRule.drawColor.toHEX('#rrggbb')
+                }
             }
             if (pageData.length > 0) obj.pages.push(pageData)
         }

+ 79 - 0
assets/script/ui/child/GuideMainUI.ts

@@ -0,0 +1,79 @@
+/** @format */
+import {BaseUI} from '../BaseUI'
+import {ccUtils} from '../../utils/ccUtils'
+import {Mgr} from '../../GameControl'
+import {UI} from '../../enums/UI'
+
+const {ccclass, property} = cc._decorator
+@ccclass
+export class GuideMainUI extends BaseUI {
+    titleNode: cc.Node
+    infoNode: cc.Node
+    titleIndex: number = 2
+    protected onLoad() {
+        this.titleNode = cc.find('titleNode', this.node)
+        this.infoNode = cc.find('infoNode', this.node)
+    }
+
+    onShow(args, fromUI: number) {
+        ccUtils.setTogglesChecked(0, this.node, 'toggles')
+        this.onToggleClick(null, 0)
+        this.initInfo()
+    }
+    initTitle() {
+        let titleLb = '一、这是测试'
+        if (this.titleIndex > 2) {
+            this.unscheduleAllCallbacks()
+            this.titleIndex = 2
+        }
+        ccUtils.setLabel(titleLb.substring(0, 2), this.titleNode, 'title')
+        this.schedule(
+            () => {
+                this.titleIndex += 1
+                ccUtils.setLabel(titleLb.substring(0, this.titleIndex), this.titleNode, 'title')
+            },
+            1,
+            titleLb.length - 2,
+        )
+    }
+    initInfo() {
+        ccUtils.setLabel(
+            '测试测试测试测试测试测试测试测试测试测试。\n测试测试测试测试测试测试测试测试',
+            this.infoNode,
+            'info',
+        )
+    }
+    onToggleClick(event, custom) {
+        this.titleNode.active = false
+        this.infoNode.active = false
+        custom = parseInt(custom)
+        switch (custom) {
+            case 0:
+                this.initTitle()
+                this.titleNode.active = true
+                break
+            case 1:
+                this.infoNode.active = true
+                break
+            case 2:
+                Mgr.ui.show(UI.GuideUI)
+                this.hide()
+                break
+            case 3:
+                Mgr.ui.show(UI.GameUI)
+                this.hide()
+                break
+            case 4:
+                Mgr.ui.show(UI.GameUI)
+                Mgr.localMsg.sendClassMsg()
+                this.hide()
+                break
+            default:
+                break
+        }
+    }
+    onCloseClick() {
+        Mgr.ui.show(UI.SemeGirdUI)
+        this.hide()
+    }
+}

+ 9 - 0
assets/script/ui/child/GuideMainUI.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "1.0.8",
+  "uuid": "ae12e13b-f670-452b-9389-ad3ab3d14bc0",
+  "isPlugin": false,
+  "loadPluginInWeb": true,
+  "loadPluginInNative": true,
+  "loadPluginInEditor": false,
+  "subMetas": {}
+}

+ 109 - 2
assets/script/ui/public/GuideUI.ts

@@ -56,7 +56,7 @@ export class GuideUI extends BaseUI {
         this.loadSemeImg(PathUtils.addGP('guide/bg', '', 1), this.node, 'bg')
     }
 
-    async initUI(json: any, page: number = 1) {
+    async initUI(json: any, pageNum: number = 1) {
         if (Object.keys(json).length <= 0) return
         this.pages = cc.find('pages', this.node).children
         let origin = cc.find('origin', this.node)
@@ -66,6 +66,113 @@ export class GuideUI extends BaseUI {
             this.allNodes[i] = []
             if (json.pages[i]) {
                 page.active = true
+                // 每一个节点的延迟时间对象数组
+                let delayTimeObj = []
+                // 每一组actionTag的延迟时间对象数组
+                let actionTagObj = []
+                let maxActionTag = 0
+                for (let j = 0; j < json.pages[i].length; j++) {
+                    let dataJson = json.pages[i][j]
+                    let runTime = 0
+                    if (dataJson.actions) {
+                        let objParallelTime = 0
+                        for (let obj of dataJson.actions) {
+                            let objTime = 0
+                            let parallelTime = 0
+                            for (let action of obj.actions) {
+                                let actionRunTime = action.startDelay ? action.startDelay : 0
+                                let tempRunTime = action.runTime ? action.runTime : 0
+                                actionRunTime += action.repeat > 0 ? action.repeat * tempRunTime : tempRunTime
+                                actionRunTime += action.endDelay ? action.endDelay : 0
+                                if (action.isSequence) {
+                                    if (parallelTime > 0) {
+                                        objTime += parallelTime
+                                        parallelTime = 0
+                                    }
+                                    objTime += actionRunTime
+                                } else {
+                                    if (actionRunTime > parallelTime) {
+                                        parallelTime = actionRunTime
+                                    }
+                                }
+                            }
+                            objTime += parallelTime
+
+                            let objAllTime = obj.startDelay ? obj.startDelay : 0
+                            objAllTime += obj.repeat > 0 ? obj.repeat * objTime : objTime
+                            objAllTime += obj.endDelay ? obj.endDelay : 0
+                            if (obj.isSequence) {
+                                if (objParallelTime > 0) {
+                                    runTime += objParallelTime
+                                    objParallelTime = 0
+                                }
+                                runTime += objAllTime
+                            } else {
+                                if (objAllTime > objParallelTime) {
+                                    objParallelTime = objAllTime
+                                }
+                            }
+                        }
+                        runTime += objParallelTime
+                    }
+
+                    let temp = {
+                        actionTag: dataJson.actionTag ? dataJson.actionTag : 0,
+                        nodeSequence: dataJson.nodeSequence ? true : false,
+                        runTime,
+                    }
+                    if (CC_EDITOR && pageNum - 1 == i) {
+                        cc.log(
+                            '节点:',
+                            dataJson.nodeName,
+                            '运行时间---->',
+                            runTime,
+                            '执行顺序---->',
+                            temp.actionTag,
+                            '节点队列执行---->',
+                            temp.nodeSequence,
+                        )
+                    }
+                    if (!actionTagObj[temp.actionTag]) {
+                        actionTagObj[temp.actionTag] = []
+                    }
+                    actionTagObj[temp.actionTag].push(temp)
+                    delayTimeObj.push(temp)
+                    if (temp.actionTag > maxActionTag) maxActionTag = temp.actionTag
+                }
+                // 每一组actionTag的总时间数组
+                let actionTagDelayTime = new Array(maxActionTag).fill(0)
+                for (let j = 0; j <= maxActionTag; j++) {
+                    if (actionTagObj[j]) {
+                        let delayTime = 0
+                        let parallelTime = 0
+                        for (let obj of actionTagObj[j]) {
+                            if (obj.nodeSequence) {
+                                if (parallelTime > 0) {
+                                    delayTime += parallelTime
+                                    parallelTime = 0
+                                }
+                                obj.delayTime = delayTime
+                                delayTime += obj.runTime
+                            } else {
+                                if (obj.runTime > parallelTime) {
+                                    parallelTime = obj.runTime
+                                }
+                                obj.delayTime = delayTime
+                            }
+                        }
+                        actionTagDelayTime[j] = delayTime
+                        actionTagDelayTime[j] += parallelTime
+                    }
+                }
+                for (let j = 0; j < json.pages[i].length; j++) {
+                    let dataJson = json.pages[i][j]
+                    let lastAllTime = 0
+                    for (let k = 0; k < dataJson.actionTag; k++) {
+                        lastAllTime += actionTagDelayTime[k]
+                    }
+                    dataJson.actionTagDelayTime = lastAllTime + delayTimeObj[j].delayTime
+                }
                 let nodes = ccUtils.instantChildren(origin, json.pages[i].length, page)
                 for (let j = 0; j < nodes.length; j++) {
                     let node = nodes[j]
@@ -78,7 +185,7 @@ export class GuideUI extends BaseUI {
                 page.active = false
             }
         }
-        this.initPage(page)
+        this.initPage(pageNum)
         this.initPlayBtn(false)
         this.canPlay = true
     }

BIN
assets/texture/GuideUI/btnTip.png


+ 36 - 0
assets/texture/GuideUI/btnTip.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "ee914e05-0fc8-4cbb-9cc4-ba0b289680b3",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 84,
+  "height": 82,
+  "platformSettings": {},
+  "subMetas": {
+    "btnTip": {
+      "ver": "1.0.4",
+      "uuid": "55c74975-9a8d-4f9c-82b8-832218bf5ac6",
+      "rawTextureUuid": "ee914e05-0fc8-4cbb-9cc4-ba0b289680b3",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 84,
+      "height": 82,
+      "rawWidth": 84,
+      "rawHeight": 82,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

+ 12 - 0
assets/texture/Public/board.meta

@@ -0,0 +1,12 @@
+{
+  "ver": "1.1.2",
+  "uuid": "480995b1-5919-42bf-b2e9-58fb199a3601",
+  "isBundle": false,
+  "bundleName": "",
+  "priority": 1,
+  "compressionType": {},
+  "optimizeHotUpdate": {},
+  "inlineSpriteFrames": {},
+  "isRemoteBundle": {},
+  "subMetas": {}
+}

BIN
assets/texture/Public/board/blue.png


+ 36 - 0
assets/texture/Public/board/blue.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "aaaa89c4-5b14-4901-907c-a0bc522d146d",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "blue": {
+      "ver": "1.0.4",
+      "uuid": "bed552da-67aa-4da7-b7c1-634dfd163c55",
+      "rawTextureUuid": "aaaa89c4-5b14-4901-907c-a0bc522d146d",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/blue_.png


+ 36 - 0
assets/texture/Public/board/blue_.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "f87ba153-a010-4bf2-94ea-27dcf9addbbd",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "blue_": {
+      "ver": "1.0.4",
+      "uuid": "1cbfb7b7-9b5a-43be-ad93-06bc623d30d7",
+      "rawTextureUuid": "f87ba153-a010-4bf2-94ea-27dcf9addbbd",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/btn_board.png


+ 36 - 0
assets/texture/Public/board/btn_board.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "eef97bb2-f568-4157-ae96-305c748889c2",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 82,
+  "height": 81,
+  "platformSettings": {},
+  "subMetas": {
+    "btn_board": {
+      "ver": "1.0.4",
+      "uuid": "713ce7df-96af-424f-acba-34b63646b79b",
+      "rawTextureUuid": "eef97bb2-f568-4157-ae96-305c748889c2",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 82,
+      "height": 81,
+      "rawWidth": 82,
+      "rawHeight": 81,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/frame_board.png


+ 36 - 0
assets/texture/Public/board/frame_board.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "df01aa80-3c0f-41fb-b76b-b4bf2250c150",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 498,
+  "height": 81,
+  "platformSettings": {},
+  "subMetas": {
+    "frame_board": {
+      "ver": "1.0.4",
+      "uuid": "49f3bc54-8752-44a8-b4a1-611ee2a376a9",
+      "rawTextureUuid": "df01aa80-3c0f-41fb-b76b-b4bf2250c150",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 498,
+      "height": 81,
+      "rawWidth": 498,
+      "rawHeight": 81,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 145,
+      "borderRight": 113,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/green.png


+ 36 - 0
assets/texture/Public/board/green.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "be454023-a916-4170-8388-28ad49e00fcb",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "green": {
+      "ver": "1.0.4",
+      "uuid": "0618d852-c658-498d-91d3-f44ad75a69fa",
+      "rawTextureUuid": "be454023-a916-4170-8388-28ad49e00fcb",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/green_.png


+ 36 - 0
assets/texture/Public/board/green_.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "d2470fd7-42da-4a61-b9b3-bcd4320aa0a3",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "green_": {
+      "ver": "1.0.4",
+      "uuid": "f2a33759-724c-40b9-bb3a-3cc21ae17fe7",
+      "rawTextureUuid": "d2470fd7-42da-4a61-b9b3-bcd4320aa0a3",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/orange.png


+ 36 - 0
assets/texture/Public/board/orange.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "391ab240-b654-4a25-862b-bab679190ee4",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 69,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "orange": {
+      "ver": "1.0.4",
+      "uuid": "fc417158-4603-4d58-b7f8-d39e03d3a44e",
+      "rawTextureUuid": "391ab240-b654-4a25-862b-bab679190ee4",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 69,
+      "height": 71,
+      "rawWidth": 69,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/orange_.png


+ 36 - 0
assets/texture/Public/board/orange_.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "f5897bb2-98b9-4e93-a550-ed7e721de6b9",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 69,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "orange_": {
+      "ver": "1.0.4",
+      "uuid": "4d4b1b1b-61d4-4de2-9d69-94f57ea301b3",
+      "rawTextureUuid": "f5897bb2-98b9-4e93-a550-ed7e721de6b9",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 69,
+      "height": 71,
+      "rawWidth": 69,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/red.png


+ 36 - 0
assets/texture/Public/board/red.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "214176e9-9a76-4081-b3e8-6dc86c0f7b93",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "red": {
+      "ver": "1.0.4",
+      "uuid": "b25322d2-2765-44c3-913b-33f7de937a32",
+      "rawTextureUuid": "214176e9-9a76-4081-b3e8-6dc86c0f7b93",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/red_.png


+ 36 - 0
assets/texture/Public/board/red_.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "72dc3095-3edd-451a-99a2-90e0806975e4",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 72,
+  "platformSettings": {},
+  "subMetas": {
+    "red_": {
+      "ver": "1.0.4",
+      "uuid": "219810d6-ceba-46c3-83ca-04010852c94d",
+      "rawTextureUuid": "72dc3095-3edd-451a-99a2-90e0806975e4",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 72,
+      "rawWidth": 68,
+      "rawHeight": 72,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/violet.png


+ 36 - 0
assets/texture/Public/board/violet.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "1c3564de-fcd3-4101-8a38-a24021c87bf0",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "violet": {
+      "ver": "1.0.4",
+      "uuid": "cb812cf8-6b21-4e52-aaf5-dd4898f12c3a",
+      "rawTextureUuid": "1c3564de-fcd3-4101-8a38-a24021c87bf0",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/violet_.png


+ 36 - 0
assets/texture/Public/board/violet_.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "ca813c29-d149-4f4c-8ae8-7896b05f6a33",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "violet_": {
+      "ver": "1.0.4",
+      "uuid": "36b5b54c-10f8-4db7-8286-c4f4f27b7afc",
+      "rawTextureUuid": "ca813c29-d149-4f4c-8ae8-7896b05f6a33",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

BIN
assets/texture/Public/board/white.png


+ 36 - 0
assets/texture/Public/board/white.png.meta

@@ -0,0 +1,36 @@
+{
+  "ver": "2.3.5",
+  "uuid": "49e89df2-b895-4c4f-94c7-ddb8d9547cdc",
+  "type": "sprite",
+  "wrapMode": "clamp",
+  "filterMode": "bilinear",
+  "premultiplyAlpha": false,
+  "genMipmaps": false,
+  "packable": true,
+  "width": 68,
+  "height": 71,
+  "platformSettings": {},
+  "subMetas": {
+    "white": {
+      "ver": "1.0.4",
+      "uuid": "45e429a5-cfdd-47b2-b632-6430c95e37c0",
+      "rawTextureUuid": "49e89df2-b895-4c4f-94c7-ddb8d9547cdc",
+      "trimType": "auto",
+      "trimThreshold": 1,
+      "rotated": false,
+      "offsetX": 0,
+      "offsetY": 0,
+      "trimX": 0,
+      "trimY": 0,
+      "width": 68,
+      "height": 71,
+      "rawWidth": 68,
+      "rawHeight": 71,
+      "borderTop": 0,
+      "borderBottom": 0,
+      "borderLeft": 0,
+      "borderRight": 0,
+      "subMetas": {}
+    }
+  }
+}

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác