xx 11 months ago
parent
commit
8e5612dd94

+ 8 - 0
assets/data/data.ts

@@ -31,6 +31,12 @@ export class attributes_data{
     public text_sound_data:att_text_sound_data = null; //文本及语音
     public question_select:att_question_select = null; //问题选择
     public count_down:att_count_down = null; //倒计时
+    public container_layer:att_container = null; //容器层
+}
+
+
+export class att_container{
+    public widget_list:widget_item_data[] = []; //控件列表
 }
 
 export class att_count_down{
@@ -71,6 +77,8 @@ export class ani_frame{ //动画帧
     public transparent:number = 255; //透明度
     public url:string = "";//资源
     public url_name:string = "";
+    public scale_x:number=1; //缩放
+    public scale_y:number = 1;
 }
 
 

+ 9 - 5
assets/resources/prefab/run/scene_page.prefab

@@ -166,7 +166,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": -540,
-      "y": -960,
+      "y": -959.9999999999999,
       "z": 0
     },
     "_lrot": {
@@ -263,7 +263,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920
+      "height": 1919.9999999999998
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -403,7 +403,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920
+      "height": 1919.9999999999998
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -759,7 +759,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920
+      "height": 1919.9999999999998
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -909,7 +909,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920
+      "height": 1919.9999999999998
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -995,6 +995,10 @@
       "__uuid__": "6e5ce0cd-11e9-41d1-b398-5e1d6f5aab1d",
       "__expectedType__": "cc.Prefab"
     },
+    "widget_container_prefab": {
+      "__uuid__": "7987037b-3b05-4aa5-ad00-d7ce6aa061f7",
+      "__expectedType__": "cc.Prefab"
+    },
     "widget_animation_prefab": {
       "__uuid__": "cf554c72-98e6-4a7c-a229-b2db7736547d",
       "__expectedType__": "cc.Prefab"

+ 350 - 0
assets/resources/prefab/run/widget/widget_container.prefab

@@ -0,0 +1,350 @@
+[
+  {
+    "__type__": "cc.Prefab",
+    "_name": "widget_container",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "_native": "",
+    "data": {
+      "__id__": 1
+    },
+    "optimizationPolicy": 0,
+    "persistent": false
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "widget_container",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "_parent": null,
+    "_children": [
+      {
+        "__id__": 2
+      }
+    ],
+    "_active": true,
+    "_components": [
+      {
+        "__id__": 10
+      },
+      {
+        "__id__": 12
+      },
+      {
+        "__id__": 14
+      }
+    ],
+    "_prefab": {
+      "__id__": 16
+    },
+    "_lpos": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_lrot": {
+      "__type__": "cc.Quat",
+      "x": 0,
+      "y": 0,
+      "z": 0,
+      "w": 1
+    },
+    "_lscale": {
+      "__type__": "cc.Vec3",
+      "x": 1,
+      "y": 1,
+      "z": 1
+    },
+    "_mobility": 0,
+    "_layer": 33554432,
+    "_euler": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_id": ""
+  },
+  {
+    "__type__": "cc.Node",
+    "_name": "img_zhaobutong",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "_parent": {
+      "__id__": 1
+    },
+    "_children": [],
+    "_active": false,
+    "_components": [
+      {
+        "__id__": 3
+      },
+      {
+        "__id__": 5
+      },
+      {
+        "__id__": 7
+      }
+    ],
+    "_prefab": {
+      "__id__": 9
+    },
+    "_lpos": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_lrot": {
+      "__type__": "cc.Quat",
+      "x": 0,
+      "y": 0,
+      "z": 0,
+      "w": 1
+    },
+    "_lscale": {
+      "__type__": "cc.Vec3",
+      "x": 1,
+      "y": 1,
+      "z": 1
+    },
+    "_mobility": 0,
+    "_layer": 33554432,
+    "_euler": {
+      "__type__": "cc.Vec3",
+      "x": 0,
+      "y": 0,
+      "z": 0
+    },
+    "_id": ""
+  },
+  {
+    "__type__": "cc.UITransform",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 4
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 100,
+      "height": 100
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "23gj6Ll/tPdq6OHEIgelsk"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 6
+    },
+    "_customMaterial": null,
+    "_srcBlendFactor": 2,
+    "_dstBlendFactor": 4,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_spriteFrame": {
+      "__uuid__": "81848ce8-921b-4400-b961-a62e4d96f457@f9941",
+      "__expectedType__": "cc.SpriteFrame"
+    },
+    "_type": 0,
+    "_fillType": 0,
+    "_sizeMode": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_useGrayscale": false,
+    "_atlas": null,
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "f7GYVnKs1KVo3etb40d0d3"
+  },
+  {
+    "__type__": "cc.Widget",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 2
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 8
+    },
+    "_alignFlags": 45,
+    "_target": null,
+    "_left": 0,
+    "_right": 0,
+    "_top": 0,
+    "_bottom": 0,
+    "_horizontalCenter": 0,
+    "_verticalCenter": 0,
+    "_isAbsLeft": true,
+    "_isAbsRight": true,
+    "_isAbsTop": true,
+    "_isAbsBottom": true,
+    "_isAbsHorizontalCenter": true,
+    "_isAbsVerticalCenter": true,
+    "_originalWidth": 284,
+    "_originalHeight": 268,
+    "_alignMode": 2,
+    "_lockFlags": 0,
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "35PDEOvCNPxI6jtOxxNG5M"
+  },
+  {
+    "__type__": "cc.PrefabInfo",
+    "root": {
+      "__id__": 1
+    },
+    "asset": {
+      "__id__": 0
+    },
+    "fileId": "68XIga/DNJ1b0X8NU4SnEx",
+    "instance": null,
+    "targetOverrides": null,
+    "nestedPrefabInstanceRoots": null
+  },
+  {
+    "__type__": "cc.UITransform",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 1
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 11
+    },
+    "_contentSize": {
+      "__type__": "cc.Size",
+      "width": 100,
+      "height": 100
+    },
+    "_anchorPoint": {
+      "__type__": "cc.Vec2",
+      "x": 0.5,
+      "y": 0.5
+    },
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "88hqnMkhpPGqb/qDFn4uBx"
+  },
+  {
+    "__type__": "cc.Sprite",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 1
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 13
+    },
+    "_customMaterial": null,
+    "_srcBlendFactor": 2,
+    "_dstBlendFactor": 4,
+    "_color": {
+      "__type__": "cc.Color",
+      "r": 255,
+      "g": 255,
+      "b": 255,
+      "a": 255
+    },
+    "_spriteFrame": null,
+    "_type": 0,
+    "_fillType": 0,
+    "_sizeMode": 0,
+    "_fillCenter": {
+      "__type__": "cc.Vec2",
+      "x": 0,
+      "y": 0
+    },
+    "_fillStart": 0,
+    "_fillRange": 0,
+    "_isTrimmedMode": true,
+    "_useGrayscale": false,
+    "_atlas": null,
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "39cBmhhZFOhbPBVAFNYqgn"
+  },
+  {
+    "__type__": "e32cam7v0NHqJMBzwrmjfuh",
+    "_name": "",
+    "_objFlags": 0,
+    "__editorExtras__": {},
+    "node": {
+      "__id__": 1
+    },
+    "_enabled": true,
+    "__prefab": {
+      "__id__": 15
+    },
+    "icon": {
+      "__id__": 1
+    },
+    "img_zhaobutong": {
+      "__id__": 2
+    },
+    "_id": ""
+  },
+  {
+    "__type__": "cc.CompPrefabInfo",
+    "fileId": "1c/7HbEwFJCJRbyN191w8B"
+  },
+  {
+    "__type__": "cc.PrefabInfo",
+    "root": {
+      "__id__": 1
+    },
+    "asset": {
+      "__id__": 0
+    },
+    "fileId": "43bsJEwzBMBriLvLW10lgK",
+    "instance": null,
+    "targetOverrides": null
+  }
+]

+ 13 - 0
assets/resources/prefab/run/widget/widget_container.prefab.meta

@@ -0,0 +1,13 @@
+{
+  "ver": "1.1.49",
+  "importer": "prefab",
+  "imported": true,
+  "uuid": "7987037b-3b05-4aa5-ad00-d7ce6aa061f7",
+  "files": [
+    ".json"
+  ],
+  "subMetas": {},
+  "userData": {
+    "syncNodeName": "widget_container"
+  }
+}

+ 20 - 20
assets/scene/game.scene

@@ -93,7 +93,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": 540,
-      "y": 960.0000000000002,
+      "y": 960,
       "z": 0
     },
     "_lrot": {
@@ -178,7 +178,7 @@
     "_priority": 0,
     "_fov": 45,
     "_fovAxis": 0,
-    "_orthoHeight": 960.0000000000001,
+    "_orthoHeight": 960,
     "_near": 0,
     "_far": 1000,
     "_color": {
@@ -347,7 +347,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -651,7 +651,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -1173,7 +1173,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -2022,7 +2022,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -4217,7 +4217,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -4278,7 +4278,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": -540,
-      "y": -960.0000000000001,
+      "y": -960,
       "z": 0
     },
     "_lrot": {
@@ -4317,7 +4317,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -5156,7 +5156,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": 0,
-      "y": 820.0000000000001,
+      "y": 820,
       "z": 0
     },
     "_lrot": {
@@ -5538,7 +5538,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": -421,
-      "y": 780.0000000000001,
+      "y": 780,
       "z": 0
     },
     "_lrot": {
@@ -9129,7 +9129,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -9714,7 +9714,7 @@
     "_lpos": {
       "__type__": "cc.Vec3",
       "x": -540,
-      "y": -960.0000000000001,
+      "y": -960,
       "z": 0
     },
     "_lrot": {
@@ -9753,7 +9753,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -15302,7 +15302,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -28920,7 +28920,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -29013,7 +29013,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -29182,7 +29182,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -29234,7 +29234,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",
@@ -29358,7 +29358,7 @@
     "_contentSize": {
       "__type__": "cc.Size",
       "width": 1080,
-      "height": 1920.0000000000002
+      "height": 1920
     },
     "_anchorPoint": {
       "__type__": "cc.Vec2",

+ 1 - 0
assets/script/config.ts

@@ -149,6 +149,7 @@ export class config {
         TEXT_SOUND:6, // 文本和语音
         QUESTION_SELECT:7, //问题选择
         COUNT_DOWN:8, //倒计时
+        CONTAINER_LAYER:9, //容器层
 
     }
     static SceneType:Map<number,scene_item_data> = new Map();

+ 1 - 1
assets/script/run/gameManager.ts

@@ -596,7 +596,7 @@ export class gameManager extends Component {
         let temp:widget_item_data[] = []
         for (let index = 0; index < scene_data.page_widget_list.length; index++) {
             const data = scene_data.page_widget_list[index];
-            if(data.type<=4 ){
+            if(data.type<=4 ||data.type==config.Widget_Type_List.CONTAINER_LAYER){
                 temp.push(data)
             }
         }

+ 70 - 0
assets/script/run/scene_page.ts

@@ -25,6 +25,7 @@ export class scene_page extends Component {
     @property(Prefab) widget_drag_prefab:Prefab = null;
     @property(Prefab) widget_slide_prefab:Prefab = null;
     @property(Prefab) widget_img_prefab:Prefab = null;
+    @property(Prefab) widget_container_prefab:Prefab = null;
     @property(Prefab) widget_animation_prefab:Prefab = null;
     private mData:scene_item_data = null;
     private mIsMask:boolean = false;
@@ -229,6 +230,9 @@ export class scene_page extends Component {
                         item = instantiate(this.widget_drag_prefab)
                     }
                 break;
+                case config.Widget_Type_List.CONTAINER_LAYER:
+                    item = instantiate(this.widget_container_prefab)
+                break;
                 case config.Widget_Type_List.IMG_TYPE:
                     item = instantiate(this.widget_img_prefab)
                 break;
@@ -246,12 +250,78 @@ export class scene_page extends Component {
                     item.parent = this.content;
                     this.mWidgetList.set(widget_data.att.id,item)
                 }
+
+                //新增加容器控件
+                if(widget_data.type==config.Widget_Type_List.CONTAINER_LAYER&&com!=null){
+                    this.initContainerWidgetList(com.getIcon(),widget_data.att.container_layer.widget_list)
+                }
             }
             
     
         }
     }
 
+    public initContainerWidgetList(container:Node,widget_list:widget_item_data[]){
+        widget_list.sort((a,b)=>{
+            return a.att.z - b.att.z;
+        })
+        let is_dai_dao_ju_drag = (id:number)=>{
+            let task:guo_ju_qing_dai_dao_ju =gameManager.Singleton.mSceneManager.getSceneTask()._guo_ju_qing_dai_dao_ju;
+            if(task==null){
+                return false;
+            }
+
+            for (let index = 0; index < task.widget_list.length; index++) {
+                const element = task.widget_list[index];
+                if(id==element.widget_id){
+                    return true
+                }
+            }
+            return false;
+        } 
+        for (let index = 0; index < widget_list.length; index++) {
+            const widget_data = widget_list[index];
+            let item:Node = null;
+            switch (widget_data.type) {
+                case config.Widget_Type_List.CLICK_TYPE:
+                    item = instantiate(this.widget_click_prefab)
+                break;
+                case config.Widget_Type_List.SLIDE_TYPE:
+                    item = instantiate(this.widget_slide_prefab)
+                break;
+                case config.Widget_Type_List.DRAG_TYPE:
+                    if(is_dai_dao_ju_drag(widget_data.att.id)){
+
+                    }else{
+                        item = instantiate(this.widget_drag_prefab)
+                    }
+                break;
+                // case config.Widget_Type_List.CONTAINER_LAYER:
+                //     item = instantiate(this.widget_container_prefab)
+                // break;
+                case config.Widget_Type_List.IMG_TYPE:
+                    item = instantiate(this.widget_img_prefab)
+                break;
+                case config.Widget_Type_List.ACTION_TYPE:
+                    item = instantiate(this.widget_animation_prefab)
+                break;
+            }
+            if(item){
+                let com = item.getComponent(widget_base);
+                if(com===null){
+                    console.log("error--widget_data.type:",widget_data.type)
+                }else{
+                    item.name =`type${widget_data.type}-id${ widget_data.att.id}`
+                    com.initView(widget_data)
+                    item.parent =container;
+                    this.mWidgetList.set(widget_data.att.id,item)
+                }
+            }
+    
+    
+        }
+    }
+
     public getBG(){
         return this.content;
     }

+ 13 - 2
assets/script/run/widget/widget_base.ts

@@ -14,6 +14,7 @@ class BindTarget{
     rotation:number;
     anchorPointX:number;
     anchorPointY:number;
+    scale:Vec3;
 }
 @ccclass('widget_base')
 export class widget_base extends Component {
@@ -244,14 +245,20 @@ export class widget_base extends Component {
         this.bindTarget.pos = new Vec3(up_frame.pos_x,up_frame.pos_y)
         this.bindTarget.anchorPointX = up_frame.anchor_point_x==undefined?0.5:up_frame.anchor_point_x
         this.bindTarget.anchorPointY = up_frame.anchor_point_y==undefined?0.5:up_frame.anchor_point_y
-   
+        up_frame.scale_x = up_frame.scale_x==undefined?1:up_frame.scale_x
+        up_frame.scale_y = up_frame.scale_y==undefined?1:up_frame.scale_y
+        this.bindTarget.scale = new Vec3(up_frame.scale_x,up_frame.scale_y)
+        frame.scale_x = frame.scale_x==undefined?1:frame.scale_x
+        frame.scale_y = frame.scale_y==undefined?1:frame.scale_y
+
         let color_opactiy_tw_size = tween(this.bindTarget)
-        .to( tweenDuration, { pos:n_pos,color: _color,opacity:frame.transparent,size:new Size(frame.size_width,frame.size_height),rotation:frame.rotation, anchorPointX:frame.anchor_point_x, anchorPointY:frame.anchor_point_y }, {
+        .to( tweenDuration, { scale:new Vec3(frame.scale_x,frame.scale_y),pos:n_pos,color: _color,opacity:frame.transparent,size:new Size(frame.size_width,frame.size_height),rotation:frame.rotation, anchorPointX:frame.anchor_point_x, anchorPointY:frame.anchor_point_y }, {
             onUpdate(tar:BindTarget){
                 self.icon.getComponent(Sprite).color = tar.color; 
                 self.icon.getComponent(UIOpacity).opacity = tar.opacity;
                 self.icon.getComponent(UITransform).setContentSize(tar.size)
                 self.icon.getComponent(UITransform).setAnchorPoint(tar.anchorPointX, tar.anchorPointY)
+                self.icon.scale = new Vec3(tar.scale.x,tar.scale.y,1);
                 if(self.mCurAnimation.isMove){
                     self.node.position = tar.pos
                 }
@@ -284,6 +291,10 @@ export class widget_base extends Component {
 
     }
 
+    public getIcon(){
+        return this.icon
+    }
+
     public offEvent(){
         this.node.off(Node.EventType.TOUCH_START)
         this.node.off(Node.EventType.TOUCH_END)

+ 17 - 0
assets/script/run/widget/widget_container.ts

@@ -0,0 +1,17 @@
+import { _decorator, Component, Node, Size, UITransform } from 'cc';
+import { widget_base } from './widget_base';
+import { att_container } from '../../../data/data';
+const { ccclass, property } = _decorator;
+
+@ccclass('widget_container')
+export class widget_container extends widget_base {
+    @property(Node) img_zhaobutong:Node = null;
+    private mContainerData:att_container = null;
+    protected init(): void {
+        if(this.mData.att.container_layer!=null){
+            this.mContainerData = this.mData.att.container_layer
+        }
+    }
+}
+
+

+ 9 - 0
assets/script/run/widget/widget_container.ts.meta

@@ -0,0 +1,9 @@
+{
+  "ver": "4.0.23",
+  "importer": "typescript",
+  "imported": true,
+  "uuid": "e32ca9bb-bf43-47a8-9301-cf0ae68dfba1",
+  "files": [],
+  "subMetas": {},
+  "userData": {}
+}