mirror of
https://github.com/VickScarlet/lifeRestart.git
synced 2026-03-24 13:33:26 +08:00
add unique character
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"x":0,
|
||||
"type":"View",
|
||||
"selectedBox":1,
|
||||
"selecteID":77,
|
||||
"selectedBox":83,
|
||||
"selecteID":84,
|
||||
"props":{"width":1125,"sceneColor":"#000000","height":2436},
|
||||
"nodeParent":-1,
|
||||
"label":"View",
|
||||
@@ -43,14 +43,13 @@
|
||||
"props":{"y":160,"x":563,"space":30,"height":70,"centerX":0,"anchorY":0.5,"anchorX":0.5},
|
||||
"nodeParent":73,
|
||||
"label":"HBox",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":75,
|
||||
"child":[
|
||||
{
|
||||
"x":45,
|
||||
"type":"Image",
|
||||
"props":{"y":10,"x":1,"skin":"images/accessories/title_left@3x.png","name":"left"},
|
||||
"nodeParent":75,
|
||||
@@ -63,7 +62,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":45,
|
||||
"type":"Label",
|
||||
"props":{"y":0,"x":2,"text":"UI_Title_Celebrity","fontSize":60,"font":"方正像素12","color":"#ffffff"},
|
||||
"nodeParent":75,
|
||||
@@ -76,7 +74,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":45,
|
||||
"type":"Image",
|
||||
"props":{"y":10,"x":3,"skin":"images/accessories/title_right@3x.png","name":"right"},
|
||||
"nodeParent":75,
|
||||
@@ -121,26 +118,24 @@
|
||||
"props":{"right":0,"name":"boxCharacter","left":0},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxCharacter)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":10,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"right":0,"name":"boxName","left":0,"height":100},
|
||||
"nodeParent":10,
|
||||
"label":"Box(boxName)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":12,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Image",
|
||||
"props":{"top":0,"skin":"images/border/border_1@3x.png","sizeGrid":"15,130,15,130","right":0,"left":0,"bottom":0},
|
||||
"nodeParent":12,
|
||||
@@ -153,7 +148,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":55,"font":"方正像素12","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":12,
|
||||
@@ -167,19 +161,17 @@
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"VBox",
|
||||
"props":{"top":100,"space":20,"right":25,"name":"vboxStates","left":25},
|
||||
"nodeParent":10,
|
||||
"label":"VBox(vboxStates)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":11,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","height":100,"fontSize":55,"font":"方正像素12","color":"#ffffff","centerX":0,"align":"center"},
|
||||
"nodeParent":11,
|
||||
@@ -199,14 +191,13 @@
|
||||
"props":{"right":25,"name":"boxTalent","left":25,"height":100},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxTalent)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":15,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Image",
|
||||
"props":{"y":-220,"x":-25,"top":0,"skin":"images/border/up@3x.png","right":0,"left":0,"bottom":0},
|
||||
"nodeParent":15,
|
||||
@@ -219,7 +210,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":50,"font":"方正像素12","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":15,
|
||||
@@ -232,7 +222,6 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"x":0,"width":15,"visible":false,"name":"grade1","height":100},
|
||||
"nodeParent":15,
|
||||
@@ -257,7 +246,6 @@
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"x":0,"width":15,"visible":false,"name":"grade2","height":100},
|
||||
"nodeParent":15,
|
||||
@@ -282,7 +270,6 @@
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"x":0,"width":15,"visible":false,"name":"grade3","height":100},
|
||||
"nodeParent":15,
|
||||
@@ -306,6 +293,361 @@
|
||||
]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":45,
|
||||
"type":"Box",
|
||||
"props":{"y":10,"x":10,"right":0,"name":"boxUniqueUnGenerate","left":0},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxUniqueUnGenerate)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":79,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"right":0,"name":"boxName","left":0,"height":100},
|
||||
"nodeParent":79,
|
||||
"label":"Box(boxName)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":80,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Image",
|
||||
"props":{"top":0,"skin":"images/border/border_1@3x.png","sizeGrid":"15,130,15,130","right":0,"left":0,"bottom":0},
|
||||
"nodeParent":80,
|
||||
"label":"Image",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":81,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"UI_UniqueWaTaShi","name":"label","fontSize":55,"font":"方正像素12","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":80,
|
||||
"label":"Label(label)",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":82,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"VBox",
|
||||
"props":{"top":100,"space":20,"right":25,"name":"vboxStates","left":25},
|
||||
"nodeParent":79,
|
||||
"label":"VBox(vboxStates)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":83,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"UI_UniqueWaTaShiContent","right":0,"name":"label","left":0,"leading":30,"fontSize":55,"font":"方正像素12","color":"#ffffff","align":"center"},
|
||||
"nodeParent":83,
|
||||
"label":"Label(label)",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":84,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":75,
|
||||
"type":"Box",
|
||||
"props":{"y":12,"x":10,"right":0,"name":"boxBtn","left":0,"height":200},
|
||||
"nodeParent":83,
|
||||
"label":"Box(boxBtn)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":85,
|
||||
"child":[
|
||||
{
|
||||
"x":90,
|
||||
"type":"Button",
|
||||
"props":{"width":500,"skin":"images/button/button_main@3x.png","name":"btn","label":"UI_GenerateNow","centerY":0,"centerX":0},
|
||||
"nodeParent":85,
|
||||
"label":"Button(btn)",
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":88,
|
||||
"child":[
|
||||
{
|
||||
"type":"Box",
|
||||
"props":{},
|
||||
"nodeParent":88,
|
||||
"label":"Box",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":89,
|
||||
"child":[
|
||||
{
|
||||
"type":"Animation",
|
||||
"props":{"y":96,"x":250,"width":0,"source":"view/CyberTheme/animation/circleFlash.ani","scaleX":4,"height":0,"blendMode":"lighter","autoPlay":true},
|
||||
"nodeParent":89,
|
||||
"label":"Animation",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":90,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Box",
|
||||
"props":{"renderType":"mask"},
|
||||
"nodeParent":89,
|
||||
"label":"Box",
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":91,
|
||||
"child":[
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":37,"x":25,"width":7,"lineWidth":1,"height":116,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":92,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":37,"x":470,"width":7,"lineWidth":1,"height":116,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":93,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":21,"x":44,"width":414,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":94,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":150,"x":171,"width":160,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":95,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":163,"x":44,"width":121,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":96,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":163,"x":337,"width":121,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":97,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":148,"x":29,"width":25,"rotation":40,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":98,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":150,"x":331,"width":19,"rotation":55,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":99,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":166,"x":160,"width":19,"rotation":-55,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":100,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":21,"x":458,"width":25,"rotation":40,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":101,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":26,"x":48,"width":25,"rotation":140,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":102,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Rect",
|
||||
"props":{"y":153,"x":477,"width":25,"rotation":140,"lineWidth":1,"height":6,"fillColor":"#ff0000"},
|
||||
"nodeParent":91,
|
||||
"label":"Rect",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":103,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type":"Box",
|
||||
"props":{},
|
||||
"nodeParent":88,
|
||||
"label":"Box",
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":104,
|
||||
"child":[
|
||||
{
|
||||
"type":"Box",
|
||||
"props":{"renderType":"mask"},
|
||||
"nodeParent":104,
|
||||
"label":"Box",
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":105,
|
||||
"child":[
|
||||
{
|
||||
"type":"Poly",
|
||||
"props":{"y":41,"x":35,"points":"0,0,8,-6,8,113,0,107","lineWidth":1,"lineColor":"#ff0000","fillColor":"#00ffff"},
|
||||
"nodeParent":105,
|
||||
"label":"Poly",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":106,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Poly",
|
||||
"props":{"y":41,"x":464,"points":"0,0,-8,-6,-8,113,0,107","lineWidth":1,"lineColor":"#ff0000","fillColor":"#00ffff"},
|
||||
"nodeParent":105,
|
||||
"label":"Poly",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":107,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"type":"Poly",
|
||||
"props":{"y":160,"x":177,"points":"0,0,147,0,153,10,-6,10","lineWidth":1,"lineColor":"#ff0000","fillColor":"#00ffff"},
|
||||
"nodeParent":105,
|
||||
"label":"Poly",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":108,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"type":"Animation",
|
||||
"props":{"y":172,"x":520,"source":"view/CyberTheme/animation/bottomBreath.ani","scaleX":6,"blendMode":"lighter","autoPlay":true},
|
||||
"nodeParent":104,
|
||||
"label":"Animation",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":109,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
@@ -315,13 +657,14 @@
|
||||
"props":{"right":0,"left":0,"height":0,"bottom":0},
|
||||
"nodeParent":1,
|
||||
"label":"Box",
|
||||
"isOpen":false,
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":63,
|
||||
"child":[
|
||||
{
|
||||
"x":30,
|
||||
"type":"Button",
|
||||
"props":{"y":-450,"width":500,"var":"btnRetry","skin":"images/button/button_main@3x.png","name":"btnRetry","label":"UI_AllNot","centerX":0},
|
||||
"nodeParent":63,
|
||||
@@ -585,11 +928,12 @@
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":30,
|
||||
"type":"Button",
|
||||
"props":{"y":-200,"width":500,"var":"btnNext","skin":"images/button/button_main@3x.png","name":"btnNext","label":"UI_Make_New_Life","centerX":0},
|
||||
"nodeParent":63,
|
||||
"label":"Button(btnNext)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"x":0,
|
||||
"type":"View",
|
||||
"selectedBox":1,
|
||||
"selecteID":19,
|
||||
"selecteID":28,
|
||||
"props":{"width":1125,"sceneColor":"#000000","height":2436},
|
||||
"nodeParent":-1,
|
||||
"label":"View",
|
||||
@@ -55,26 +55,24 @@
|
||||
"props":{"right":0,"name":"boxCharacter","left":0},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxCharacter)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":10,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"runtime":"Laya.runtime.ColorfulBox","right":0,"name":"boxName","left":0,"height":100},
|
||||
"nodeParent":10,
|
||||
"label":"Box(boxName)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":12,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":55,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":12,
|
||||
@@ -88,7 +86,6 @@
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"VBox",
|
||||
"props":{"top":100,"space":20,"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"vboxStates","left":25},
|
||||
"nodeParent":10,
|
||||
@@ -100,7 +97,6 @@
|
||||
"compId":11,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","height":100,"fontSize":55,"font":"SimHei","color":"#ffffff","centerX":0,"align":"center"},
|
||||
"nodeParent":11,
|
||||
@@ -120,14 +116,13 @@
|
||||
"props":{"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"boxTalent","left":25,"height":100},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxTalent)",
|
||||
"isOpen":true,
|
||||
"isOpen":false,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":15,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"颜值10 智力10 体质10 家境Π","name":"label","fontSize":50,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":15,
|
||||
@@ -139,6 +134,111 @@
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":45,
|
||||
"type":"Box",
|
||||
"props":{"y":10,"x":10,"right":0,"name":"boxUniqueUnGenerate","left":0},
|
||||
"nodeParent":8,
|
||||
"label":"Box(boxUniqueUnGenerate)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":20,
|
||||
"child":[
|
||||
{
|
||||
"x":60,
|
||||
"type":"Box",
|
||||
"props":{"y":0,"runtime":"Laya.runtime.ColorfulBox","right":0,"name":"boxName","left":0,"height":100},
|
||||
"nodeParent":20,
|
||||
"label":"Box(boxName)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":21,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"valign":"middle","text":"UI_UniqueWaTaShi","name":"label","fontSize":55,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0,"align":"center"},
|
||||
"nodeParent":21,
|
||||
"label":"Label(label)",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":22,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
},
|
||||
{
|
||||
"x":60,
|
||||
"type":"VBox",
|
||||
"props":{"top":100,"space":20,"runtime":"Laya.runtime.ColorfulBox","right":25,"name":"vboxStates","left":25},
|
||||
"nodeParent":20,
|
||||
"label":"VBox(vboxStates)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":23,
|
||||
"child":[
|
||||
{
|
||||
"x":75,
|
||||
"type":"Label",
|
||||
"props":{"y":1,"valign":"middle","text":"UI_UniqueWaTaShiContent","right":0,"name":"label","left":0,"leading":30,"fontSize":55,"font":"SimHei","color":"#ffffff","align":"center"},
|
||||
"nodeParent":23,
|
||||
"label":"Label(label)",
|
||||
"isOpen":true,
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":24,
|
||||
"child":[
|
||||
]
|
||||
},
|
||||
{
|
||||
"x":75,
|
||||
"type":"Box",
|
||||
"props":{"y":2,"right":0,"name":"boxBtn","left":0,"height":150},
|
||||
"nodeParent":23,
|
||||
"label":"Box(boxBtn)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":25,
|
||||
"child":[
|
||||
{
|
||||
"x":90,
|
||||
"type":"Box",
|
||||
"props":{"runtime":"Laya.runtime.ColorfulBox","right":50,"name":"btn","left":50,"height":120,"centerY":0},
|
||||
"nodeParent":25,
|
||||
"label":"Box(btn)",
|
||||
"isOpen":true,
|
||||
"isDirectory":true,
|
||||
"isAniNode":true,
|
||||
"hasChild":true,
|
||||
"compId":26,
|
||||
"child":[
|
||||
{
|
||||
"x":105,
|
||||
"type":"Label",
|
||||
"props":{"y":30,"x":290,"text":"UI_GenerateNow","name":"label","fontSize":60,"font":"SimHei","color":"#ffffff","centerY":0,"centerX":0},
|
||||
"nodeParent":26,
|
||||
"label":"Label(label)",
|
||||
"isDirectory":false,
|
||||
"isAniNode":true,
|
||||
"hasChild":false,
|
||||
"compId":27,
|
||||
"child":[
|
||||
]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
}]
|
||||
},
|
||||
|
||||
1
public/chunk/184.19048.js
Normal file
1
public/chunk/184.19048.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
public/chunk/211.94cf4.js
Normal file
1
public/chunk/211.94cf4.js
Normal file
File diff suppressed because one or more lines are too long
1
public/chunk/803.36088.js
Normal file
1
public/chunk/803.36088.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
public/chunk/806.29c5a.js
Normal file
1
public/chunk/806.29c5a.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
public/chunk/main.cd60f.js
Normal file
1
public/chunk/main.cd60f.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1066,7 +1066,7 @@
|
||||
"name": "刷刷刷",
|
||||
"description": "集齐橙色天赋",
|
||||
"grade": 3,
|
||||
"condition": "(ATLT?[1023])&(ATLT?[1048])&(ATLT?[1064])&(ATLT?[1114])&(ATLT?[1135])&(ATLT?[1141])",
|
||||
"condition": "(ATLT?[1023])&(ATLT?[1048])&(ATLT?[1064])&(ATLT?[1114])&(ATLT?[1135])&(ATLT?[1141])&(ATLT?[1147])",
|
||||
"hide": 0,
|
||||
"opportunity": "START"
|
||||
},
|
||||
@@ -1474,5 +1474,14 @@
|
||||
"condition": "(ATLT?[2028])&(ATLT?[2029])&(ATLT?[2030])&(ATLT?[2031])",
|
||||
"hide": 0,
|
||||
"opportunity": "START"
|
||||
},
|
||||
"265": {
|
||||
"id": 265,
|
||||
"name": "死了但没完全死",
|
||||
"description": "死而复生",
|
||||
"grade": 2,
|
||||
"condition": "EVT?[20000,20001,11504]",
|
||||
"hide": 0,
|
||||
"opportunity": "TRAJECTORY"
|
||||
}
|
||||
}
|
||||
@@ -20269,6 +20269,7 @@
|
||||
"11347*0.01",
|
||||
"11348*0.01",
|
||||
"11349",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
@@ -20325,6 +20326,7 @@
|
||||
"11346*0.1",
|
||||
"11347*0.01",
|
||||
"11348*0.01",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
@@ -20370,6 +20372,7 @@
|
||||
"20383*0.01",
|
||||
"20384*0.01",
|
||||
"40001*999999999",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
|
||||
@@ -11392,6 +11392,14 @@
|
||||
},
|
||||
"NoRandom": 1
|
||||
},
|
||||
"20002": {
|
||||
"id": 20002,
|
||||
"event": "你在睡梦中安然离世。",
|
||||
"include": "EVT?[10000]",
|
||||
"branch": [
|
||||
"EVT?[10000]:10000"
|
||||
]
|
||||
},
|
||||
"20007": {
|
||||
"id": 20007,
|
||||
"event": "你喜欢看画面人设好看的动漫。",
|
||||
|
||||
@@ -1328,7 +1328,8 @@
|
||||
"1114*0.2",
|
||||
"1023*0.2",
|
||||
"1048*0.2",
|
||||
"1033*5"
|
||||
"1033*5",
|
||||
"1147*0.2"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1589,7 +1590,8 @@
|
||||
1114,
|
||||
1023,
|
||||
1048,
|
||||
"1033*5"
|
||||
"1033*6",
|
||||
1147
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1653,7 +1655,8 @@
|
||||
"1135",
|
||||
"1107",
|
||||
"1080",
|
||||
"1065"
|
||||
"1065",
|
||||
"1148"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1066,7 +1066,7 @@
|
||||
"name": "刷刷刷",
|
||||
"description": "集齐橙色天赋",
|
||||
"grade": 3,
|
||||
"condition": "(ATLT?[1023])&(ATLT?[1048])&(ATLT?[1064])&(ATLT?[1114])&(ATLT?[1135])&(ATLT?[1141])",
|
||||
"condition": "(ATLT?[1023])&(ATLT?[1048])&(ATLT?[1064])&(ATLT?[1114])&(ATLT?[1135])&(ATLT?[1141])&(ATLT?[1147])",
|
||||
"hide": 0,
|
||||
"opportunity": "START"
|
||||
},
|
||||
@@ -1474,5 +1474,14 @@
|
||||
"condition": "(ATLT?[2028])&(ATLT?[2029])&(ATLT?[2030])&(ATLT?[2031])",
|
||||
"hide": 0,
|
||||
"opportunity": "START"
|
||||
},
|
||||
"265": {
|
||||
"id": 265,
|
||||
"name": "死了但没完全死",
|
||||
"description": "死而复生",
|
||||
"grade": 2,
|
||||
"condition": "EVT?[20000,20001,11504]",
|
||||
"hide": 0,
|
||||
"opportunity": "TRAJECTORY"
|
||||
}
|
||||
}
|
||||
@@ -20269,6 +20269,7 @@
|
||||
"11347*0.01",
|
||||
"11348*0.01",
|
||||
"11349",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
@@ -20325,6 +20326,7 @@
|
||||
"11346*0.1",
|
||||
"11347*0.01",
|
||||
"11348*0.01",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
@@ -20370,6 +20372,7 @@
|
||||
"20383*0.01",
|
||||
"20384*0.01",
|
||||
"40001*999999999",
|
||||
"20002*999999",
|
||||
"40065*1000000000000000000",
|
||||
"40066*100000000000000000",
|
||||
"40067*100000000000000000",
|
||||
|
||||
@@ -11392,6 +11392,14 @@
|
||||
},
|
||||
"NoRandom": 1
|
||||
},
|
||||
"20002": {
|
||||
"id": 20002,
|
||||
"event": "你在睡梦中安然离世。",
|
||||
"include": "EVT?[10000]",
|
||||
"branch": [
|
||||
"EVT?[10000]:10000"
|
||||
]
|
||||
},
|
||||
"20007": {
|
||||
"id": 20007,
|
||||
"event": "你喜欢看画面人设好看的动漫。",
|
||||
|
||||
@@ -1328,7 +1328,8 @@
|
||||
"1114*0.2",
|
||||
"1023*0.2",
|
||||
"1048*0.2",
|
||||
"1033*5"
|
||||
"1033*5",
|
||||
"1147*0.2"
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1589,7 +1590,8 @@
|
||||
1114,
|
||||
1023,
|
||||
1048,
|
||||
"1033*5"
|
||||
"1033*6",
|
||||
1147
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -1653,7 +1655,8 @@
|
||||
"1135",
|
||||
"1107",
|
||||
"1080",
|
||||
"1065"
|
||||
"1065",
|
||||
"1148"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
@@ -1 +1 @@
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="description" content="やり直すんだ。そして、次はうまくやる。"/><meta name="keywords" content="人生重开模拟器 liferestart life restart remake 人生重来"/><meta name="renderer" content="webkit"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="full-screen" content="true"/><meta name="x5-fullscreen" content="true"/><meta name="360-fullscreen" content="true"/><meta name="theme-color" content="#157878"/><meta name="laya" screenorientation="landscape"/><meta http-equiv="expires" content="0"/><meta http-equiv="Cache-Control" content="no-siteapp"/><title>Life Restart</title><script src="libs/laya/min/laya.core.min.js"></script><script src="libs/laya/min/laya.webgl.min.js"></script><script src="libs/laya/min/laya.filter.min.js"></script><script src="libs/laya/min/laya.particle.min.js"></script><script src="libs/laya/min/laya.ui.min.js"></script><script defer="defer" src="chunk/main.ba1cc.js"></script></head><body style="background:black"></body></html>
|
||||
<!doctype html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no"><meta name="description" content="やり直すんだ。そして、次はうまくやる。"/><meta name="keywords" content="人生重开模拟器 liferestart life restart remake 人生重来"/><meta name="renderer" content="webkit"/><meta name="apple-mobile-web-app-capable" content="yes"/><meta name="full-screen" content="true"/><meta name="x5-fullscreen" content="true"/><meta name="360-fullscreen" content="true"/><meta name="theme-color" content="#157878"/><meta name="laya" screenorientation="landscape"/><meta http-equiv="expires" content="0"/><meta http-equiv="Cache-Control" content="no-siteapp"/><title>Life Restart</title><script src="libs/laya/min/laya.core.min.js"></script><script src="libs/laya/min/laya.webgl.min.js"></script><script src="libs/laya/min/laya.filter.min.js"></script><script src="libs/laya/min/laya.particle.min.js"></script><script src="libs/laya/min/laya.ui.min.js"></script><script defer="defer" src="chunk/main.cd60f.js"></script></head><body style="background:black"></body></html>
|
||||
@@ -160,11 +160,7 @@ class App{
|
||||
globalThis.$ui = UIManager.getInstance();
|
||||
|
||||
if(theme=='default') {
|
||||
if(!localStorage.getItem('__')) {
|
||||
localStorage.setItem('__', 1);
|
||||
localStorage.setItem('theme', 'cyber');
|
||||
}
|
||||
theme = localStorage.getItem('theme');
|
||||
theme = localStorage.getItem('theme') || 'default';
|
||||
}
|
||||
|
||||
$ui.theme = theme;
|
||||
|
||||
0
src/functions/unique.js
Normal file
0
src/functions/unique.js
Normal file
@@ -141,9 +141,14 @@ export default ({
|
||||
UI_CelebrityMode: 'Celebrity',
|
||||
UI_CelebrityModeDescription: 'Past life is celebrity\nRebirth to modern',
|
||||
UI_AllNot: '↻All Not',
|
||||
UI_UniqueWaTaShi: 'Unique of mine',
|
||||
UI_UniqueWaTaShiContent: '\nUnique character card different from other 60 million player\nAll property, All talent, All random\nAll has only one chance',
|
||||
UI_GenerateNow: 'Generate Now',
|
||||
|
||||
|
||||
M_NoRank: 'There is no rank',
|
||||
M_PleaseSelectOne: 'Please Select One',
|
||||
M_UnGenerate: 'Unique Character no generate',
|
||||
M_DisableExtendTalent: 'Celebrity mode can\'t extends talent',
|
||||
|
||||
F_RemakeTimes: 'Remake {0} Times',
|
||||
|
||||
@@ -143,10 +143,13 @@ export default ({
|
||||
UI_CelebrityMode: '名人模式',
|
||||
UI_CelebrityModeDescription: '前世是古代名人\n重开到了现代',
|
||||
UI_AllNot: '↻都不是',
|
||||
|
||||
UI_UniqueWaTaShi: '独一无二的我',
|
||||
UI_UniqueWaTaShiContent: '\n6000万玩家中独一无二的角色卡\n所有属性 所有天赋 随机生成\n 每人只能生成一次',
|
||||
UI_GenerateNow: '立即生成',
|
||||
|
||||
M_NoRank: '别卷了,没有排行榜',
|
||||
M_PleaseSelectOne: '请选择一个名人',
|
||||
M_UnGenerate: '独一无二的我还没有生成',
|
||||
M_DisableExtendTalent: '名人模式不能继承天赋',
|
||||
|
||||
F_RemakeTimes: '已重开{0}次',
|
||||
|
||||
24
src/index.js
24
src/index.js
@@ -196,5 +196,29 @@ core.config({
|
||||
],
|
||||
},
|
||||
},
|
||||
characterConfig: { // config for character
|
||||
characterPullCount: 3,
|
||||
rateableKnife: 10,
|
||||
propertyWeight: [
|
||||
[ 0, 1],
|
||||
[ 1, 2],
|
||||
[ 2, 3],
|
||||
[ 3, 4],
|
||||
[ 4, 5],
|
||||
[ 5, 6],
|
||||
[ 6, 5],
|
||||
[ 7, 4],
|
||||
[ 8, 3],
|
||||
[ 9, 2],
|
||||
[10, 1],
|
||||
],
|
||||
talentWeight: [
|
||||
[ 1, 1],
|
||||
[ 2, 2],
|
||||
[ 3, 3],
|
||||
[ 4, 2],
|
||||
[ 5, 1],
|
||||
],
|
||||
},
|
||||
});
|
||||
game.start(query);
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
import { clone } from '../functions/util.js';
|
||||
import { checkCondition } from '../functions/condition.js';
|
||||
|
||||
class Achievement {
|
||||
constructor() {}
|
||||
constructor(system) {
|
||||
this.#system = system;
|
||||
}
|
||||
|
||||
// 时机
|
||||
Opportunity = {
|
||||
@@ -12,6 +11,7 @@ class Achievement {
|
||||
END: "END", // 游戏完成,点击重开 重开次数在这之后才会+1
|
||||
};
|
||||
|
||||
#system;
|
||||
#achievements;
|
||||
|
||||
initial({achievements}) {
|
||||
@@ -23,7 +23,11 @@ class Achievement {
|
||||
return Object.keys(this.#achievements).length;
|
||||
}
|
||||
|
||||
list(property) {
|
||||
get #prop() {
|
||||
return this.#system.request(this.#system.Module.PROPERTY);
|
||||
}
|
||||
|
||||
list() {
|
||||
return Object
|
||||
.values(this.#achievements)
|
||||
.map(({
|
||||
@@ -32,34 +36,34 @@ class Achievement {
|
||||
})=>({
|
||||
id, name, opportunity,
|
||||
description, hide, grade,
|
||||
isAchieved: this.isAchieved(id, property),
|
||||
isAchieved: this.isAchieved(id, this.#prop),
|
||||
}));
|
||||
}
|
||||
|
||||
get(achievementId) {
|
||||
const achievement = this.#achievements[achievementId];
|
||||
if(!achievement) throw new Error(`[ERROR] No Achievement[${achievementId}]`);
|
||||
return clone(achievement);
|
||||
return this.#system.clone(achievement);
|
||||
}
|
||||
|
||||
check(achievementId, property) {
|
||||
check(achievementId) {
|
||||
const { condition } = this.get(achievementId);
|
||||
return checkCondition(property, condition);
|
||||
return this.#system.check(condition);
|
||||
}
|
||||
|
||||
isAchieved(achievementId, property) {
|
||||
for(const [achieved] of (property.get(property.TYPES.ACHV)||[]))
|
||||
isAchieved(achievementId) {
|
||||
for(const [achieved] of (this.#prop.get(this.#prop.TYPES.ACHV)||[]))
|
||||
if(achieved == achievementId) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
achieve(opportunity, property) {
|
||||
this.list(property)
|
||||
achieve(opportunity) {
|
||||
this.list()
|
||||
.filter(({isAchieved})=>!isAchieved)
|
||||
.filter(({opportunity: o})=>o==opportunity)
|
||||
.filter(({id})=>this.check(id, property))
|
||||
.filter(({id})=>this.check(id, this.#prop))
|
||||
.forEach(({id})=>{
|
||||
property.achieve(property.TYPES.ACHV, id)
|
||||
this.#prop.achieve(this.#prop.TYPES.ACHV, id)
|
||||
$$event('achievement', this.get(id))
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
import { clone, weightRandom } from '../functions/util.js';
|
||||
|
||||
class Character {
|
||||
constructor() {}
|
||||
constructor(system) {
|
||||
this.#system = system;
|
||||
}
|
||||
|
||||
#system;
|
||||
#characters;
|
||||
#characterPullCount;
|
||||
#rateableKnife;
|
||||
#rate;
|
||||
#pipe = [];
|
||||
#uniqueWaTaShi;
|
||||
#propertyWeight;
|
||||
#talentWeight
|
||||
|
||||
initial({characters}) {
|
||||
this.#characters = characters;
|
||||
const uniqueWaTaShi = localStorage.getItem('uniqueWaTaShi');
|
||||
if(uniqueWaTaShi != null || uniqueWaTaShi != 'undefined')
|
||||
this.#uniqueWaTaShi = JSON.parse(uniqueWaTaShi);
|
||||
return this.count;
|
||||
}
|
||||
|
||||
@@ -20,16 +28,70 @@ class Character {
|
||||
config({
|
||||
characterPullCount = 3,
|
||||
rateableKnife = 10,
|
||||
propertyWeight,
|
||||
talentWeight,
|
||||
} = {}) {
|
||||
this.#characterPullCount = characterPullCount;
|
||||
this.#rateableKnife = rateableKnife;
|
||||
this.#propertyWeight = propertyWeight;
|
||||
this.#talentWeight = talentWeight;
|
||||
}
|
||||
|
||||
get #unique() {
|
||||
if(this.#uniqueWaTaShi) {
|
||||
return this.#system.clone(this.#uniqueWaTaShi);
|
||||
}
|
||||
|
||||
const now = Date.now();
|
||||
this.#pipe.push(now);
|
||||
if(this.#pipe.length < 10) return null;
|
||||
const time = this.#pipe.shift();
|
||||
if(now - time > 10000) return null;
|
||||
return {unique: true, generate: false};
|
||||
}
|
||||
|
||||
set #unique(data) {
|
||||
this.#uniqueWaTaShi = this.#system.clone(data);
|
||||
this.#uniqueWaTaShi.unique = true;
|
||||
this.#uniqueWaTaShi.generate = true;
|
||||
localStorage.setItem(
|
||||
'uniqueWaTaShi',
|
||||
JSON.stringify(this.#uniqueWaTaShi)
|
||||
);
|
||||
}
|
||||
|
||||
get #weightRandom() {
|
||||
return this.#system.function(this.#system.Function.UTIL).weightRandom;
|
||||
}
|
||||
|
||||
generateUnique() {
|
||||
if(this.#uniqueWaTaShi) return this.#unique;
|
||||
const weightRandom = this.#weightRandom;
|
||||
const {CHR, INT, STR, MNY} = this.#system.PropertyTypes;
|
||||
|
||||
this.#unique = {
|
||||
property: {
|
||||
[CHR]: weightRandom(this.#propertyWeight),
|
||||
[INT]: weightRandom(this.#propertyWeight),
|
||||
[STR]: weightRandom(this.#propertyWeight),
|
||||
[MNY]: weightRandom(this.#propertyWeight),
|
||||
},
|
||||
talent: this.#system
|
||||
.request(this.#system.Module.TALENT)
|
||||
.random(weightRandom(this.#talentWeight)),
|
||||
}
|
||||
|
||||
return this.#unique;
|
||||
}
|
||||
|
||||
random() {
|
||||
return this.rateable();
|
||||
return {
|
||||
unique: this.#unique,
|
||||
normal: this.#rateable(),
|
||||
}
|
||||
}
|
||||
|
||||
rateable() {
|
||||
#rateable() {
|
||||
if(!this.#rate) {
|
||||
this.#rate = {};
|
||||
for(const id in this.#characters) {
|
||||
@@ -38,6 +100,7 @@ class Character {
|
||||
}
|
||||
|
||||
const r = [];
|
||||
const weightRandom = this.#weightRandom;
|
||||
new Array(this.#characterPullCount)
|
||||
.fill(0)
|
||||
.forEach(()=>{
|
||||
@@ -63,7 +126,7 @@ class Character {
|
||||
this.#rate[id] -= this.#rateableKnife;
|
||||
}
|
||||
}
|
||||
return r.map(id=>clone(this.#characters[id]));
|
||||
return r.map(id=>this.#system.clone(this.#characters[id]));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { clone } from '../functions/util.js';
|
||||
import { checkCondition } from '../functions/condition.js';
|
||||
|
||||
class Event {
|
||||
constructor() {}
|
||||
constructor(system) {
|
||||
this.#system = system;
|
||||
}
|
||||
|
||||
#system;
|
||||
#events;
|
||||
|
||||
initial({events}) {
|
||||
@@ -24,18 +24,18 @@ class Event {
|
||||
return Object.keys(this.#events).length;
|
||||
}
|
||||
|
||||
check(eventId, property) {
|
||||
check(eventId) {
|
||||
const { include, exclude, NoRandom } = this.get(eventId);
|
||||
if(NoRandom) return false;
|
||||
if(exclude && checkCondition(property, exclude)) return false;
|
||||
if(include) return checkCondition(property, include);
|
||||
if(exclude && this.#system.check(exclude)) return false;
|
||||
if(include) return this.#system.check(include);
|
||||
return true;
|
||||
}
|
||||
|
||||
get(eventId) {
|
||||
const event = this.#events[eventId];
|
||||
if(!event) throw new Error(`[ERROR] No Event[${eventId}]`);
|
||||
return clone(event);
|
||||
return this.#system.clone(event);
|
||||
}
|
||||
|
||||
information(eventId) {
|
||||
@@ -43,11 +43,11 @@ class Event {
|
||||
return { description };
|
||||
}
|
||||
|
||||
do(eventId, property) {
|
||||
do(eventId) {
|
||||
const { effect, branch, event: description, postEvent, grade } = this.get(eventId);
|
||||
if(branch)
|
||||
for(const [cond, next] of branch)
|
||||
if(checkCondition(property, cond))
|
||||
if(this.#system.check(cond))
|
||||
return { effect, next, description, grade };
|
||||
return { effect, postEvent, description, grade };
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import { clone, weightRandom, getListValuesMap, getConvertedMap } from '../functions/util.js'
|
||||
import * as util from '../functions/util.js';
|
||||
import * as fCondition from '../functions/condition.js';
|
||||
|
||||
import Property from './property.js';
|
||||
import Event from './event.js';
|
||||
import Talent from './talent.js';
|
||||
@@ -7,11 +9,24 @@ import Character from './character.js';
|
||||
|
||||
class Life {
|
||||
constructor() {
|
||||
this.#property = new Property();
|
||||
this.#event = new Event();
|
||||
this.#talent = new Talent();
|
||||
this.#achievement = new Achievement();
|
||||
this.#character = new Character();
|
||||
this.#property = new Property(this);
|
||||
this.#event = new Event(this);
|
||||
this.#talent = new Talent(this);
|
||||
this.#achievement = new Achievement(this);
|
||||
this.#character = new Character(this);
|
||||
}
|
||||
|
||||
Module = {
|
||||
PROPERTY: 'PROPERTY',
|
||||
TALENT: 'TALENT',
|
||||
EVENT: 'EVENT',
|
||||
ACHIEVEMENT: 'ACHIEVEMENT',
|
||||
CHARACTER: 'CHARACTER',
|
||||
}
|
||||
|
||||
Function = {
|
||||
CONDITION: 'CONDITION',
|
||||
UTIL: 'UTIL',
|
||||
}
|
||||
|
||||
#property;
|
||||
@@ -65,24 +80,47 @@ class Life {
|
||||
this.#character.config(characterConfig);
|
||||
}
|
||||
|
||||
request(module) {
|
||||
switch (module) {
|
||||
case this.Module.ACHIEVEMENT: return this.#achievement;
|
||||
case this.Module.CHARACTER: return this.#character;
|
||||
case this.Module.EVENT: return this.#event;
|
||||
case this.Module.PROPERTY: return this.#property;
|
||||
case this.Module.TALENT: return this.#talent;
|
||||
default: return null;
|
||||
}
|
||||
}
|
||||
|
||||
function(type) {
|
||||
switch (type) {
|
||||
case this.Function.CONDITION: return fCondition;
|
||||
case this.Function.UTIL: return util;
|
||||
}
|
||||
}
|
||||
|
||||
check(condition) {
|
||||
return fCondition.checkCondition(this.#property,condition);
|
||||
}
|
||||
|
||||
clone(...args) {
|
||||
return util.clone(...args);
|
||||
}
|
||||
|
||||
remake(talents) {
|
||||
this.#initialData = clone(this.#defaultPropertys);
|
||||
this.#initialData.TLT = clone(talents);
|
||||
this.#initialData = util.clone(this.#defaultPropertys);
|
||||
this.#initialData.TLT = util.clone(talents);
|
||||
this.#triggerTalents = {};
|
||||
return this.talentReplace(this.#initialData.TLT);
|
||||
}
|
||||
|
||||
start(allocation) {
|
||||
for(const key in allocation) {
|
||||
this.#initialData[key] = clone(allocation[key]);
|
||||
this.#initialData[key] = util.clone(allocation[key]);
|
||||
}
|
||||
this.#property.restart(this.#initialData);
|
||||
this.doTalent()
|
||||
this.#property.restartLastStep();
|
||||
this.#achievement.achieve(
|
||||
this.AchievementOpportunity.START,
|
||||
this.#property
|
||||
);
|
||||
this.#achievement.achieve(this.AchievementOpportunity.START);
|
||||
}
|
||||
|
||||
getPropertyPoints() {
|
||||
@@ -102,10 +140,7 @@ class Life {
|
||||
const isEnd = this.#property.isEnd();
|
||||
|
||||
const content = [talentContent, eventContent].flat();
|
||||
this.#achievement.achieve(
|
||||
this.AchievementOpportunity.TRAJECTORY,
|
||||
this.#property
|
||||
)
|
||||
this.#achievement.achieve(this.AchievementOpportunity.TRAJECTORY);
|
||||
return { age, content, isEnd };
|
||||
}
|
||||
|
||||
@@ -131,7 +166,7 @@ class Life {
|
||||
|
||||
const contents = [];
|
||||
for(const talentId of talents) {
|
||||
const result = this.#talent.do(talentId, this.#property);
|
||||
const result = this.#talent.do(talentId);
|
||||
if(!result) continue;
|
||||
this.#triggerTalents[talentId] = this.getTalentCurrentTriggerCount(talentId) + 1;
|
||||
const { effect, name, description, grade } = result;
|
||||
@@ -148,7 +183,7 @@ class Life {
|
||||
}
|
||||
|
||||
doEvent(eventId) {
|
||||
const { effect, next, description, postEvent, grade } = this.#event.do(eventId, this.#property);
|
||||
const { effect, next, description, postEvent, grade } = this.#event.do(eventId);
|
||||
this.#property.change(this.PropertyTypes.EVT, eventId);
|
||||
this.#property.effect(effect);
|
||||
const content = {
|
||||
@@ -162,7 +197,7 @@ class Life {
|
||||
}
|
||||
|
||||
random(events) {
|
||||
return weightRandom(
|
||||
return util.weightRandom(
|
||||
events.filter(
|
||||
([eventId])=>this.#event.check(eventId, this.#property)
|
||||
)
|
||||
@@ -181,11 +216,12 @@ class Life {
|
||||
|
||||
characterRandom() {
|
||||
const characters = this.#character.random();
|
||||
characters.forEach(
|
||||
v=>v.talent=v.talent.map(
|
||||
id=>this.#talent.get(id)
|
||||
)
|
||||
const replaceTalent = v=>v.talent=v.talent.map(
|
||||
id=>this.#talent.get(id)
|
||||
);
|
||||
characters.normal.forEach(replaceTalent);
|
||||
if(characters.unique && characters.unique.talent)
|
||||
replaceTalent(characters.unique);
|
||||
return characters;
|
||||
}
|
||||
|
||||
@@ -197,12 +233,16 @@ class Life {
|
||||
return this.#talent.exclude(talents, exclusive);
|
||||
}
|
||||
|
||||
generateUnique() {
|
||||
this.#character.generateUnique();
|
||||
}
|
||||
|
||||
#getJudges(...types) {
|
||||
return getListValuesMap(types.flat(), key => this.#property.judge(key));
|
||||
return util.getListValuesMap(types.flat(), key => this.#property.judge(key));
|
||||
}
|
||||
|
||||
#getPropertys(...types) {
|
||||
return getListValuesMap(types.flat(), key => this.#property.get(key));
|
||||
return util.getListValuesMap(types.flat(), key => this.#property.get(key));
|
||||
}
|
||||
|
||||
get lastExtendTalent() {
|
||||
@@ -210,10 +250,7 @@ class Life {
|
||||
}
|
||||
|
||||
get summary() {
|
||||
this.#achievement.achieve(
|
||||
this.AchievementOpportunity.SUMMARY,
|
||||
this.#property
|
||||
)
|
||||
this.#achievement.achieve(this.AchievementOpportunity.SUMMARY);
|
||||
|
||||
const pt = this.PropertyTypes;
|
||||
|
||||
@@ -259,16 +296,13 @@ class Life {
|
||||
get PropertyTypes() { return this.#property.TYPES; }
|
||||
get AchievementOpportunity() { return this.#achievement.Opportunity; }
|
||||
get talentSelectLimit() { return this.#talentSelectLimit; }
|
||||
get propertyAllocateLimit() { return clone(this.#propertyAllocateLimit); }
|
||||
get propertyAllocateLimit() { return util.clone(this.#propertyAllocateLimit); }
|
||||
|
||||
get propertys() { return this.#property.getPropertys(); }
|
||||
get times() { return this.#property.get(this.PropertyTypes.TMS) || 0; }
|
||||
set times(v) {
|
||||
this.#property.set(this.PropertyTypes.TMS, v);
|
||||
this.#achievement.achieve(
|
||||
this.AchievementOpportunity.END,
|
||||
this.#property
|
||||
)
|
||||
this.#achievement.achieve(this.AchievementOpportunity.END);
|
||||
}
|
||||
get specialThanks() { return this.#specialThanks; }
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { max, min, sum, clone, listRandom } from '../functions/util.js';
|
||||
|
||||
class Property {
|
||||
constructor() {}
|
||||
constructor(system) {
|
||||
this.#system = system;
|
||||
}
|
||||
|
||||
TYPES = {
|
||||
// 本局
|
||||
@@ -70,11 +70,16 @@ class Property {
|
||||
]
|
||||
}
|
||||
|
||||
#system;
|
||||
#ageData;
|
||||
#data = {};
|
||||
#total;
|
||||
#judge;
|
||||
|
||||
get #util() {
|
||||
return this.#system.function(this.#system.Function.UTIL);
|
||||
}
|
||||
|
||||
initial({age, total}) {
|
||||
this.#ageData = age;
|
||||
for(const a in age) {
|
||||
@@ -151,6 +156,7 @@ class Property {
|
||||
}
|
||||
|
||||
get(prop) {
|
||||
const util = this.#util;
|
||||
switch(prop) {
|
||||
case this.TYPES.AGE:
|
||||
case this.TYPES.CHR:
|
||||
@@ -161,14 +167,14 @@ class Property {
|
||||
case this.TYPES.LIF:
|
||||
case this.TYPES.TLT:
|
||||
case this.TYPES.EVT:
|
||||
return clone(this.#data[prop]);
|
||||
return util.clone(this.#data[prop]);
|
||||
case this.TYPES.LAGE:
|
||||
case this.TYPES.LCHR:
|
||||
case this.TYPES.LINT:
|
||||
case this.TYPES.LSTR:
|
||||
case this.TYPES.LMNY:
|
||||
case this.TYPES.LSPR:
|
||||
return min(
|
||||
return util.min(
|
||||
this.#data[prop],
|
||||
this.get(this.fallback(prop))
|
||||
);
|
||||
@@ -178,7 +184,7 @@ class Property {
|
||||
case this.TYPES.HSTR:
|
||||
case this.TYPES.HMNY:
|
||||
case this.TYPES.HSPR:
|
||||
return max(
|
||||
return util.max(
|
||||
this.#data[prop],
|
||||
this.get(this.fallback(prop))
|
||||
);
|
||||
@@ -189,7 +195,7 @@ class Property {
|
||||
const HSTR = this.get(this.TYPES.HSTR);
|
||||
const HMNY = this.get(this.TYPES.HMNY);
|
||||
const HSPR = this.get(this.TYPES.HSPR);
|
||||
return Math.floor(sum(HCHR, HINT, HSTR, HMNY, HSPR)*2 + HAGE/2);
|
||||
return Math.floor(util.sum(HCHR, HINT, HSTR, HMNY, HSPR)*2 + HAGE/2);
|
||||
case this.TYPES.TMS:
|
||||
return this.lsget('times') || 0;
|
||||
case this.TYPES.EXT:
|
||||
@@ -253,7 +259,7 @@ class Property {
|
||||
case this.TYPES.LIF:
|
||||
case this.TYPES.TLT:
|
||||
case this.TYPES.EVT:
|
||||
this.hl(prop, this.#data[prop] = clone(value));
|
||||
this.hl(prop, this.#data[prop] = this.#system.clone(value));
|
||||
this.achieve(prop, value);
|
||||
return;
|
||||
case this.TYPES.TMS:
|
||||
@@ -267,7 +273,7 @@ class Property {
|
||||
}
|
||||
|
||||
getPropertys() {
|
||||
return clone({
|
||||
return this.#system.clone({
|
||||
[this.TYPES.AGE]: this.get(this.TYPES.AGE),
|
||||
[this.TYPES.CHR]: this.get(this.TYPES.CHR),
|
||||
[this.TYPES.INT]: this.get(this.TYPES.INT),
|
||||
@@ -315,7 +321,8 @@ class Property {
|
||||
|
||||
hookSpecial(prop) {
|
||||
switch(prop) {
|
||||
case this.TYPES.RDM: return listRandom(this.SPECIAL.RDM);
|
||||
case this.TYPES.RDM:
|
||||
return this.#util.listRandom(this.SPECIAL.RDM);
|
||||
default: return prop;
|
||||
}
|
||||
}
|
||||
@@ -334,15 +341,6 @@ class Property {
|
||||
const d = this.#judge[prop];
|
||||
let length = d.length;
|
||||
|
||||
// progress judge
|
||||
// const p = 1/length;
|
||||
// const progress = () => {
|
||||
// const min = d[length][0] || 0;
|
||||
// const max = d[length+1]?.[0] || value;
|
||||
// if(max == min) return 1;
|
||||
// return p * (length + (value - min) / (max - min));
|
||||
// }
|
||||
|
||||
const progress = () => Math.max(Math.min(value, 10), 0) / 10;
|
||||
|
||||
while(length--) {
|
||||
@@ -363,7 +361,7 @@ class Property {
|
||||
}
|
||||
|
||||
getAgeData(age) {
|
||||
return clone(this.#ageData[age]);
|
||||
return this.#system.clone(this.#ageData[age]);
|
||||
}
|
||||
|
||||
hl(prop, value) {
|
||||
@@ -378,8 +376,8 @@ class Property {
|
||||
default: return;
|
||||
}
|
||||
const [l, h] = keys;
|
||||
this.#data[l] = min(this.#data[l], value);
|
||||
this.#data[h] = max(this.#data[h], value);
|
||||
this.#data[l] = this.#util.min(this.#data[l], value);
|
||||
this.#data[h] = this.#util.max(this.#data[h], value);
|
||||
}
|
||||
|
||||
achieve(prop, newData) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { clone, weightRandom } from '../functions/util.js';
|
||||
import { checkCondition, extractMaxTriggers } from '../functions/condition.js';
|
||||
|
||||
class Talent {
|
||||
constructor() {}
|
||||
constructor(system) {
|
||||
this.#system = system;
|
||||
}
|
||||
|
||||
#system;
|
||||
#talents;
|
||||
#talentPullCount;
|
||||
#talentRate;
|
||||
@@ -11,11 +11,12 @@ class Talent {
|
||||
|
||||
initial({talents}) {
|
||||
this.#talents = talents;
|
||||
const emt = this.#system.function(this.#system.Function.CONDITION).extractMaxTriggers;
|
||||
for(const id in talents) {
|
||||
const talent = talents[id];
|
||||
talent.id= Number(id);
|
||||
talent.grade = Number(talent.grade);
|
||||
talent.max_triggers = extractMaxTriggers(talent.condition);
|
||||
talent.max_triggers = emt(talent.condition);
|
||||
if(talent.replacement) {
|
||||
for(let key in talent.replacement) {
|
||||
const obj = {};
|
||||
@@ -34,6 +35,10 @@ class Talent {
|
||||
return Object.keys(this.#talents).length;
|
||||
}
|
||||
|
||||
get #prop() {
|
||||
return this.#system.request(this.#system.Module.PROPERTY);
|
||||
}
|
||||
|
||||
config({
|
||||
talentPullCount = 10, // number of talents to pull from the talent pool
|
||||
talentRate = { 1:100, 2:10, 3:1, total: 1000 }, // rate of talent pull
|
||||
@@ -45,15 +50,15 @@ class Talent {
|
||||
}
|
||||
|
||||
|
||||
check(talentId, property) {
|
||||
check(talentId) {
|
||||
const { condition } = this.get(talentId);
|
||||
return checkCondition(property, condition);
|
||||
return this.#system.check(this.#prop, condition);
|
||||
}
|
||||
|
||||
get(talentId) {
|
||||
const talent = this.#talents[talentId];
|
||||
if(!talent) throw new Error(`[ERROR] No Talent[${talentId}]`);
|
||||
return clone(talent);
|
||||
return this.#system.clone(talent);
|
||||
}
|
||||
|
||||
information(talentId) {
|
||||
@@ -81,7 +86,7 @@ class Talent {
|
||||
}
|
||||
|
||||
getRate(additionValues = {}) {
|
||||
const rate = clone(this.#talentRate);
|
||||
const rate = this.#system.clone(this.#talentRate);
|
||||
const addition = { 1:1, 2:1, 3:1, };
|
||||
|
||||
Object.keys(additionValues).forEach(key => {
|
||||
@@ -131,6 +136,19 @@ class Talent {
|
||||
});
|
||||
}
|
||||
|
||||
random(count) {
|
||||
const talents = Object
|
||||
.keys(this.#talents)
|
||||
.filter(id=>!this.#talents[id].exclusive);
|
||||
return new Array(count)
|
||||
.fill(1)
|
||||
.map(()=>talents.splice(
|
||||
Math.floor(Math.random()*talents.length)%talents.length,
|
||||
1
|
||||
)[0]
|
||||
);
|
||||
}
|
||||
|
||||
allocationAddition(talents) {
|
||||
if(Array.isArray(talents)) {
|
||||
let addition = 0;
|
||||
@@ -141,9 +159,9 @@ class Talent {
|
||||
return Number(this.get(talents).status) || 0;
|
||||
}
|
||||
|
||||
do(talentId, property) {
|
||||
do(talentId) {
|
||||
const { effect, condition, grade, name, description } = this.get(talentId);
|
||||
if(condition && !checkCondition(property, condition))
|
||||
if(condition && !this.#system.check(condition))
|
||||
return null;
|
||||
return { effect, grade, name, description };
|
||||
}
|
||||
@@ -154,7 +172,8 @@ class Talent {
|
||||
if(!replacement) return null;
|
||||
const list = [];
|
||||
if(replacement.grade) {
|
||||
this.forEach(({id, grade})=>{
|
||||
this.forEach(({id, grade, exclusive})=>{
|
||||
if(exclusive) return;
|
||||
if(!replacement.grade[grade]) return;
|
||||
if(this.exclude(talents, id)) return;
|
||||
list.push([id, replacement.grade[grade]]);
|
||||
@@ -170,16 +189,17 @@ class Talent {
|
||||
return list;
|
||||
}
|
||||
|
||||
const wr = this.#system.function(this.#system.Function.UTIL).weightRandom;
|
||||
const replace = (talent, talents) => {
|
||||
const replaceList = getReplaceList(talent, talents);
|
||||
if(!replaceList) return talent;
|
||||
const rand = weightRandom(replaceList);
|
||||
const rand = wr(replaceList);
|
||||
return replace(
|
||||
rand, talents.concat(rand)
|
||||
);
|
||||
}
|
||||
|
||||
const newTalents = clone(talents);
|
||||
const newTalents = this.#system.clone(talents);
|
||||
const result = {};
|
||||
for(const talent of talents) {
|
||||
const replaceId = replace(talent, newTalents);
|
||||
@@ -194,7 +214,7 @@ class Talent {
|
||||
forEach(callback) {
|
||||
if(typeof callback != 'function') return;
|
||||
for(const id in this.#talents)
|
||||
callback(clone(this.#talents[id]), id);
|
||||
callback(this.#system.clone(this.#talents[id]), id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,14 +1,13 @@
|
||||
export default class CyberCelebrity extends ui.view.CyberTheme.CelebrityUI {
|
||||
constructor() {
|
||||
super();
|
||||
this.btnRetry.on(Laya.Event.CLICK, this, this.random);
|
||||
this.btnRetry.on(Laya.Event.CLICK, this, ()=>this.random());
|
||||
this.btnNext.on(Laya.Event.CLICK, this, this.next);
|
||||
this.panelCharacter.vScrollBar.elasticDistance = 150;
|
||||
}
|
||||
|
||||
#characters;
|
||||
#selected;
|
||||
static #createComponent = Laya.plugin.extractComponents(CyberCelebrity.uiView, ['boxCharacter','boxTalent']);
|
||||
static #createComponent = Laya.plugin.extractComponents(CyberCelebrity.uiView, ['boxCharacter','boxTalent','boxUniqueUnGenerate']);
|
||||
#createCharacterItem(dataSource, click) {
|
||||
const {name, property, talent} = dataSource;
|
||||
const item = CyberCelebrity.#createComponent('boxCharacter');
|
||||
@@ -45,6 +44,30 @@ export default class CyberCelebrity extends ui.view.CyberTheme.CelebrityUI {
|
||||
if(click) item.click(click);
|
||||
return item;
|
||||
}
|
||||
#createUniqueUnGenerateItem(generate) {
|
||||
const item = CyberCelebrity.#createComponent('boxUniqueUnGenerate');
|
||||
const boxName = item.getChildByName('boxName');
|
||||
const vboxStates = item.getChildByName('vboxStates');
|
||||
const label = vboxStates.getChildByName('label');
|
||||
const boxBtn = vboxStates.getChildByName('boxBtn');
|
||||
const btn = boxBtn.getChildByName('btn');
|
||||
|
||||
label.event(Laya.Event.RESIZE);
|
||||
vboxStates.scaleY = 0;
|
||||
item.dataSource = false;
|
||||
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||
item.click = (cb, caller) => {
|
||||
boxName.offAll(Laya.Event.CLICK);
|
||||
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||
}
|
||||
item.generate = (cb, caller) => {
|
||||
btn.offAll(Laya.Event.CLICK);
|
||||
btn.on(Laya.Event.CLICK, caller || this, cb);
|
||||
}
|
||||
if(generate) item.generate(generate);
|
||||
return item;
|
||||
}
|
||||
|
||||
|
||||
init() {
|
||||
this.random();
|
||||
@@ -55,27 +78,47 @@ export default class CyberCelebrity extends ui.view.CyberTheme.CelebrityUI {
|
||||
this.vboxCharacter.destroyChildren(true);
|
||||
}
|
||||
|
||||
random() {
|
||||
random(g) {
|
||||
this.#selected = null;
|
||||
this.vboxCharacter.destroyChildren(true);
|
||||
this.#characters = core.characterRandom();
|
||||
this.#characters.forEach(character => {
|
||||
const item = this.#createCharacterItem(character);
|
||||
const {unique, normal} = core.characterRandom();
|
||||
const items = [];
|
||||
const uniqueItem = this.generateUnique(unique, ()=>{
|
||||
core.generateUnique();
|
||||
this.random(normal);
|
||||
|
||||
});
|
||||
if(uniqueItem) items.push(uniqueItem);
|
||||
(g||normal).forEach(character => items.push(this.#createCharacterItem(character)));
|
||||
|
||||
items.forEach((item, i) => {
|
||||
item.y = i;
|
||||
this.vboxCharacter.addChild(item);
|
||||
item.click(()=>{
|
||||
if(this.#selected) this.#selected.switch(false);
|
||||
this.#selected = item;
|
||||
item.switch(true);
|
||||
item.event(Laya.Event.RESIZE);
|
||||
});
|
||||
})
|
||||
});
|
||||
if(g&&uniqueItem) {
|
||||
this.#selected = uniqueItem;
|
||||
uniqueItem.switch(true);
|
||||
uniqueItem.event(Laya.Event.RESIZE);
|
||||
}
|
||||
}
|
||||
|
||||
generateUnique(data, generate) {
|
||||
if(!data) return null;
|
||||
if(!data.generate) return this.#createUniqueUnGenerateItem(generate);
|
||||
data.name = $lang.UI_UniqueWaTaShi;
|
||||
return this.#createCharacterItem(data);
|
||||
}
|
||||
|
||||
next() {
|
||||
if(!this.#selected) {
|
||||
$$event('message', ['M_PleaseSelectOne']);
|
||||
return;
|
||||
}
|
||||
if(!this.#selected) return $$event('message', ['M_PleaseSelectOne']);
|
||||
if(!this.#selected.dataSource) return $$event('message', ['M_UnGenerate']);
|
||||
|
||||
const {property: propertyAllocate, talent: talents} = this.#selected.dataSource;
|
||||
const replace = core.remake(talents.map(talent => talent.id));
|
||||
if(replace.length > 0) {
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
export default class Celebrity extends ui.view.DefaultTheme.CelebrityUI {
|
||||
constructor() {
|
||||
super();
|
||||
this.btnRetry.on(Laya.Event.CLICK, this, this.random);
|
||||
this.btnRetry.on(Laya.Event.CLICK, this, ()=>this.random());
|
||||
this.btnNext.on(Laya.Event.CLICK, this, this.next);
|
||||
this.panelCharacter.vScrollBar.elasticDistance = 150;
|
||||
}
|
||||
|
||||
#characters;
|
||||
#selected;
|
||||
static #createComponent = Laya.plugin.extractComponents(Celebrity.uiView, ['boxCharacter','boxTalent']);
|
||||
static #createComponent = Laya.plugin.extractComponents(Celebrity.uiView, ['boxCharacter','boxTalent','boxUniqueUnGenerate']);
|
||||
#createCharacterItem(dataSource, click) {
|
||||
const {name, property, talent} = dataSource;
|
||||
const style = $ui.common.characterItem;
|
||||
@@ -47,6 +46,35 @@ export default class Celebrity extends ui.view.DefaultTheme.CelebrityUI {
|
||||
if(click) item.click(click);
|
||||
return item;
|
||||
}
|
||||
#createUniqueUnGenerateItem(generate) {
|
||||
const style = $ui.common.characterItem;
|
||||
const item = Celebrity.#createComponent('boxUniqueUnGenerate');
|
||||
const boxName = item.getChildByName('boxName');
|
||||
const vboxStates = item.getChildByName('vboxStates');
|
||||
const label = vboxStates.getChildByName('label');
|
||||
const boxBtn = vboxStates.getChildByName('boxBtn');
|
||||
const btn = boxBtn.getChildByName('btn');
|
||||
|
||||
$_.deepMapSet(boxName, style.name);
|
||||
$_.deepMapSet(vboxStates, style.state);
|
||||
$_.deepMapSet(btn, style.name);
|
||||
|
||||
boxBtn.y = label.height + vboxStates.space;
|
||||
label.event(Laya.Event.RESIZE);
|
||||
vboxStates.scaleY = 0;
|
||||
item.dataSource = false;
|
||||
item.switch = showDetails => vboxStates.scaleY = !!showDetails?1:0;
|
||||
item.click = (cb, caller) => {
|
||||
boxName.offAll(Laya.Event.CLICK);
|
||||
boxName.on(Laya.Event.CLICK, caller || this, cb);
|
||||
}
|
||||
item.generate = (cb, caller) => {
|
||||
btn.offAll(Laya.Event.CLICK);
|
||||
btn.on(Laya.Event.CLICK, caller || this, cb);
|
||||
}
|
||||
if(generate) item.generate(generate);
|
||||
return item;
|
||||
}
|
||||
|
||||
init() {
|
||||
this.random();
|
||||
@@ -57,27 +85,47 @@ export default class Celebrity extends ui.view.DefaultTheme.CelebrityUI {
|
||||
this.vboxCharacter.destroyChildren(true);
|
||||
}
|
||||
|
||||
random() {
|
||||
random(g) {
|
||||
this.#selected = null;
|
||||
this.vboxCharacter.destroyChildren(true);
|
||||
this.#characters = core.characterRandom();
|
||||
this.#characters.forEach(character => {
|
||||
const item = this.#createCharacterItem(character);
|
||||
const {unique, normal} = core.characterRandom();
|
||||
const items = [];
|
||||
const uniqueItem = this.generateUnique(unique, ()=>{
|
||||
core.generateUnique();
|
||||
this.random(normal);
|
||||
|
||||
});
|
||||
if(uniqueItem) items.push(uniqueItem);
|
||||
(g||normal).forEach(character => items.push(this.#createCharacterItem(character)));
|
||||
|
||||
items.forEach((item, i) => {
|
||||
item.y = i;
|
||||
this.vboxCharacter.addChild(item);
|
||||
item.click(()=>{
|
||||
if(this.#selected) this.#selected.switch(false);
|
||||
this.#selected = item;
|
||||
item.switch(true);
|
||||
item.event(Laya.Event.RESIZE);
|
||||
});
|
||||
})
|
||||
});
|
||||
if(g&&uniqueItem) {
|
||||
this.#selected = uniqueItem;
|
||||
uniqueItem.switch(true);
|
||||
uniqueItem.event(Laya.Event.RESIZE);
|
||||
}
|
||||
}
|
||||
|
||||
generateUnique(data, generate) {
|
||||
if(!data) return null;
|
||||
if(!data.generate) return this.#createUniqueUnGenerateItem(generate);
|
||||
data.name = $lang.UI_UniqueWaTaShi;
|
||||
return this.#createCharacterItem(data);
|
||||
}
|
||||
|
||||
next() {
|
||||
if(!this.#selected) {
|
||||
$$event('message', ['M_PleaseSelectOne']);
|
||||
return;
|
||||
}
|
||||
if(!this.#selected) return $$event('message', ['M_PleaseSelectOne']);
|
||||
if(!this.#selected.dataSource) return $$event('message', ['M_UnGenerate']);
|
||||
|
||||
const {property: propertyAllocate, talent: talents} = this.#selected.dataSource;
|
||||
const replace = core.remake(talents.map(talent => talent.id));
|
||||
if(replace.length > 0) {
|
||||
|
||||
Reference in New Issue
Block a user