Commit 38f51109 authored by Stepheno's avatar Stepheno

(feat)

parents
File added
{"currentScene":"assets/scenes/main.scene","dependencies":{"animation/Zoom":"1.0.0","animation/Translation":"1.0.0","net/SampleApi":"1.0.0","net/WebService":"1.0.0","net/ApiComponent":"1.0.0","ui/ScrollView":"1.0.0","ui/Button":"1.0.0","animation/TouchZoom":"1.0.0","animation/Wave":"1.0.0","other/RelativeLayout":"1.0.0","other/FullStageSize":"1.0.0","other/CameraController":"1.0.0","renderer/TextureRenderer":"1.0.0","renderer/RectRenderer":"1.0.0","renderer/TextRenderer":"1.0.0","renderer/CircleRenderer":"1.0.0","base/TouchInterrupt":"1.0.0","base/InteractComponent":"1.0.0","renderer/GraphicRenderer":"1.0.0","base/Transform":"1.0.3","base/ScillaComponent":"1.0.0","renderer/Renderer":"1.0.0"},"oss-remote-path":"scilla/bank/questions"}
\ No newline at end of file
{"ver":"1.0.1","uuid":"0399eb76-219c-4467-9239-18a1ad6bfc10","subMetas":{},"isGroup":true}
{
"name": "user",
"root": {
"uuid": "20190301114308",
"components": [
{
"script": "components/base/Transform"
}
],
"children": [
{
"uuid": "20190301114245",
"name": "user",
"components": [
{
"script": "components/base/Transform",
"properties": {
"height": 100
}
},
{
"script": "components/other/RelativeLayout",
"properties": {
"left": 0,
"right": 0,
"top": 0,
"once": false
}
}
],
"children": [
{
"name": "HeaderBg",
"components": [
{
"script": "components/base/Transform",
"properties": {}
},
{
"script": "components/renderer/TextureRenderer",
"properties": {
"texture": "res|dd5d6029-2c18-40fa-9c2f-ba34be8d07f9"
}
},
{
"script": "components/other/RelativeLayout",
"properties": {
"left": 0
}
},
{
"script": "components/renderer/CircleRenderer",
"properties": {
"radius": 33.5,
"isMask": true
}
}
],
"uuid": "18b9c1de-cbe7-4944-98e6-3fd1eeca6d6f",
"children": [
{
"name": "Header",
"components": [
{
"script": "components/base/Transform",
"properties": {
"width": 67,
"height": 67
}
},
{
"script": "components/renderer/TextureRenderer",
"properties": {
"texture": "res|a59f50ff-7e02-4b21-a66e-115cbd59c8e4"
}
}
],
"uuid": "5eda0103-6b90-4f8f-ab92-e7f38a5d3ed0"
}
]
},
{
"name": "Name",
"components": [
{
"script": "components/base/Transform",
"properties": {}
},
{
"script": "components/renderer/TextRenderer",
"properties": {
"fillColor": "rgba(0, 0, 0, 1)",
"textStyle": {
"fontSize": 30
},
"text": ""
}
},
{
"script": "components/other/RelativeLayout",
"properties": {
"left": 180
}
}
],
"uuid": "9c06324f-329e-46e4-832f-61cb6f389bb6"
},
{
"name": "Score",
"components": [
{
"script": "components/base/Transform",
"properties": {}
},
{
"script": "components/renderer/TextRenderer",
"properties": {
"textStyle": {
"fontSize": 30
},
"fillColor": "rgba(0, 0, 0, 1)",
"text": ""
}
},
{
"script": "components/other/RelativeLayout",
"properties": {
"right": 70
},
"disabled": false
}
],
"uuid": "124fe030-86da-4eef-9432-6d1be4c28220"
},
{
"name": "Bottom",
"components": [
{
"script": "components/base/Transform",
"properties": {}
},
{
"script": "components/renderer/TextureRenderer",
"properties": {
"texture": "res|d5be8ed3-45a8-4575-a2a3-ba5ba405bc14"
}
},
{
"script": "components/other/RelativeLayout",
"properties": {
"bottom": 0
}
}
],
"uuid": "1ff43867-1581-4a3c-975e-b5cd9757fc06"
}
]
}
]
}
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"13ff5ffe-e02b-4973-b291-6e0d25991e33","subMetas":{},"type":"prefab"}
{"ver":"1.0.1","uuid":"d79519a3-915b-4a9f-9303-a15b642cfe24","subMetas":{},"isGroup":true}
This diff is collapsed.
{"ver":"1.0.1","uuid":"1f50815f-bf2f-4cf6-8432-f56f3aa834ef","subMetas":{},"type":"scene"}
{"ver":"1.0.1","uuid":"def65e96-eed7-44b3-9804-e76dea9e5062","subMetas":{},"isGroup":true}
import InteractComponent from 'components/base/InteractComponent'
import { Entity, createTween, resource, math } from 'scilla';
import TextRenderer from 'components/renderer/TextRenderer';
import TextureRenderer from 'components/renderer/TextureRenderer';
import {engine} from 'scilla';
import Transform from 'components/base/Transform';
import SubmitApi from './api/SubmitApi';
import Button from 'components/ui/Button';
import { fly } from './utils/plane';
const itemScore = 12.5
export default class Game extends InteractComponent{
private list : Array<Array<number>>
private score: number = 0
private index: number = 0
private clickable: boolean = true
public scoreEntity: Entity
public imageEntity: Entity
public btnGroup: Entity
public paperEntity: Entity
public playSheet: resource
public qsSheet: resource
onAwake(){
super.onAwake();
}
public onClick(index) {
if (!this.clickable) return
this.clickable = false
index = Number(index)
if (this.isAnsweredCorrectly(index)) {
this.score += 12.5
}
this.switchNext()
}
private switchNext() {
this.index += 1
if (this.index >= this.list.length) {
setTimeout(() => this.clickable = true, 500)
return this.switchToScore()
}
fly(this.index, this)
const image = this.paperEntity.getChildrenByName('Image')[0]
const imageTs = image.getComponent(Transform)
createTween(this, imageTs, true, {initFields: ['alpha']})
.to({ alpha: 0 }, 500)
.call(() => {
this.initUI()
})
.to({ alpha: 1 }, 500)
.call(() => this.clickable = true)
this.btnGroup.children.forEach(btn => {
const ts = btn.getComponent(Transform)
const button = btn.getComponent(Button)
button.interactable = false
createTween(this, ts, true, {initFields: ['alpha', 'scale']})
.to({
alpha: 0,
scale: {
x: 0.8,
y: 0.8,
},
}, 500)
.to({
alpha: 1,
scale: {
x: 1,
y: 1,
},
}, 500)
.call(() => {
button.interactable = true
})
})
}
private switchToScore() {
const navigater: any = this.entity.parent.getComponentByName('./scripts/navigator/SingleSceneNavigator')
navigater.push('score')
this.postToSubmitScore()
}
postToSubmitScore() {
const submit = this.entity.getComponent(SubmitApi)
console.log(this.score, Math.floor(this.score / itemScore))
engine.dataCenter.set('custom', 'num', Math.floor(this.score / itemScore))
submit.execute()
}
private isAnsweredCorrectly(index) {
return this.list[this.index][1] === index
}
public initialize() {
this.index = 0
this.initScore(0)
this.initList()
this.initUI()
}
private async initUI() {
const info = this.list[this.index]
this.imageEntity.getComponent(TextureRenderer).texture = this.qsSheet.getTexture(`qs${info[0] + 1}.png`)
this.btnGroup.children.forEach(async (btn, i) => {
const img = btn.children[0]
const renderer = img.getComponent(TextureRenderer)
renderer.texture = this.playSheet.getTexture(`${info[0] + 1}-${i + 1}.png`)
})
}
private initList() {
this.list = [[0, 1], [1, 1], [2, 0], [3, 2], [4, 2], [5, 1], [6, 0], [7, 1]].sort(() => Math.random() - 0.5)
}
private initScore(num) {
Object.defineProperty(this, 'score', {
get() { return this._score || 0 },
set(v) {
this._score = v
const label = this.scoreEntity.getChildrenByName('Label')[0]
const text = label.getComponent(TextRenderer)
text.text = String(v)
engine.dataCenter.set('custom', 'score', String(v))
},
})
this.score = num
}
onUpdate(t){
super.onUpdate(t);
}
onTouchBegin(e) {
super.onTouchBegin(e);
}
onTouchMove(e) {
super.onTouchMove(e);
}
onTouchOver(e) {
super.onTouchOver(e);
}
onTouchOut(e) {
super.onTouchOut(e);
}
onTouchEnd(e) {
super.onTouchEnd(e);
}
}
{"ver":"1.0.1","uuid":"0b610f96-8788-464c-8d2a-6d3334c9e658","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"97271300-5f2c-48a7-b17e-3e5351ef720a","subMetas":{},"isGroup":true}
import { utils, dynamic } from "scilla";
import SampleApi from "components/net/SampleApi";
/**
* 获取渲染数据
*/
export default class HomeApi extends SampleApi {
//唯一标识
name: string = 'index';
//访问路径
uri: string = '/customActivity/zhaohang/answer/index';
shareCode: dynamic;
protected async execute() {
super.execute({ shareCode: this.shareCode });
}
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"f621eaaf-2718-4b7a-a5b1-f66e7aa77f09","subMetas":{},"type":"script"}
import { utils, dynamic } from "scilla";
import SampleApi from "components/net/SampleApi";
/**
* 获取渲染数据
*/
export default class RankListApi extends SampleApi {
//唯一标识
name: string = 'rankList';
//访问路径
uri: string = '/customActivity/zhaohang/answer/rankList';
//请求方式
method: string = 'GET';
shareCode: dynamic;
protected async execute() {
super.execute();
}
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"a441e9d1-bf77-4910-b606-61ac4bac44a6","subMetas":{},"type":"script"}
import { utils, dynamic, engine } from "scilla";
import SampleApi from "components/net/SampleApi";
/**
* 获取渲染数据
*/
export default class SubmitApi extends SampleApi {
//唯一标识
name: string = 'submit';
//访问路径
uri: string = '/customActivity/zhaohang/answer/submit';
//请求方式
method: string = 'POST';
score: dynamic
protected async execute() {
console.log(this.score, engine.dataCenter)
super.execute({ score: Number(this.score || 0) });
}
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"cdb44b8d-9865-4a7f-8a94-74977002b6e5","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"1e5fd51b-fa8b-4b87-8d69-1b8f0d75c6d6","subMetas":{},"isGroup":true}
import DialogContent from '../popup/DialogContent';
export default class Share extends DialogContent {
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"a7f660a7-9b1c-4ff7-81d3-7c8bf167b888","subMetas":{},"type":"script"}
import DialogContent from '../popup/DialogContent';
export default class Toast extends DialogContent{
onAwake(){
super.onAwake();
}
onUpdate(t){
super.onUpdate(t);
}
}
{"ver":"1.0.1","uuid":"c2b1b2d4-738c-4381-b929-6056c41aa456","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"a0c1c8be-0c27-4502-8c0b-1a5a47bec303","subMetas":{},"isGroup":true}
/**
* Created by rocky.l on 2017/1/19.
*
* 场景导航器
*/
import {EventEmitter} from 'scilla'
import {INavigatorDelegate, NavigatorAction, StackNavigator, } from "./StackNavigator";
export interface INavigatorViewBase {
onAddView(): boolean;
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any>;
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any>;
onWillEnter(last: string, action: NavigatorAction, parameters: any): Promise<any>;
onDidEnter(last: string, action: NavigatorAction, parameters: any): void;
onWillLeave(next: string, action: NavigatorAction, parameters: any): Promise<any>;
onDidLeave(next: string, action: NavigatorAction, parameters: any): void;
}
const showLog = false;
export class Navigator extends EventEmitter implements INavigatorDelegate {
static VIEW_WILL_ENTER: string = 'VIEW_WILL_ENTER';
static VIEW_DID_ENTER: string = 'VIEW_DID_ENTER';
static VIEW_WILL_LEAVE: string = 'VIEW_WILL_LEAVE';
static VIEW_DID_LEAVE: string = 'VIEW_DID_LEAVE';
stack: StackNavigator;
protected _classDic: any;
protected _instanceDic: any;
protected _currentName: string;
protected _currentView: INavigatorViewBase;
constructor() {
super();
this._classDic = {};
this._instanceDic = {};
this.stack = new StackNavigator(this);
}
register(name: string, clazz: any): void {
this._classDic[name] = clazz;
}
push(name: string, parameters: any = null) {
this.stack.push(name, parameters);
}
pop(parameters: any = null) {
this.stack.pop(parameters);
}
popToBottom(parameters: any = null) {
this.stack.popTo(0, null, parameters);
}
popAll(name: string, parameters: any = null) {
this.stack.popAll(name, parameters);
}
replace(name: string, parameters: any = null) {
this.stack.replace(name, parameters);
}
jump(name: string, parameters: any = null) {
this.stack.jump(name, parameters);
}
get currentView(): INavigatorViewBase {
return this._currentView;
}
get currentName(): string {
return this._currentName;
}
protected newView(name: string): INavigatorViewBase {
return new this._classDic[name]();
}
protected getViewInstanceByName(name: string): INavigatorViewBase {
let view: INavigatorViewBase = this._instanceDic[name];
if (!view) {
view = this._instanceDic[name] = this.newView(name);
}
return view;
}
protected addView(view: INavigatorViewBase, addToBottom) {
}
/**
* 栈入实现
* @param name
* @param last
* @param action
* @param parameters
* @returns {Promise<void>}
*/
async onEnter(name: string, last: string, action: NavigatorAction, parameters: any) {
let view: INavigatorViewBase = this.getViewInstanceByName(name);
this._currentView = view;
this._currentName = name;
await view.onWillMount(last, action, parameters);
let addToBottom = view.onAddView();
this.addView(view, addToBottom);
if (showLog) console.log(name + ' will enter.');
this.emit(Navigator.VIEW_WILL_ENTER, {name, last, action, parameters});
await view.onWillEnter(last, action, parameters);
if (showLog) console.log(name + ' did enter.');
this.emit(Navigator.VIEW_DID_ENTER, {name, last, action, parameters});
view.onDidEnter(last, action, parameters);
}
/**
* 栈出实现
* @param name
* @param next
* @param action
* @param parameters
* @returns {Promise<void>}
*/
async onLeave(name: string, next: string, action: NavigatorAction, parameters: any) {
let view: INavigatorViewBase = this.getViewInstanceByName(name);
await view.onWillUnMount(name, action, parameters);
if (showLog) console.log(name + ' will leave.');
this.emit(Navigator.VIEW_WILL_LEAVE, {name, next, action, parameters});
await view.onWillLeave(next, action, parameters);
if (showLog) console.log(name + ' did leave.');
this.emit(Navigator.VIEW_DID_LEAVE, {name, next, action, parameters});
view.onDidLeave(next, action, parameters);
}
/**
* 当收到错误实现
* @param error
*/
onError(error: Error) {
}
}
{"ver":"1.0.1","uuid":"ea74b1a5-4d17-4b99-8e60-1e3b5aabf31b","subMetas":{},"type":"script"}
/**
* Created by rockyl on 2019-04-09.
*
* 单场景导航器
*/
import {VirtualNavigator} from "./VirtualNavigator";
import {start, play, score, list, } from "../scenes";
import ScillaComponent from "components/base/ScillaComponent";
export default class SingleSceneNavigator extends ScillaComponent {
_navigator: VirtualNavigator;
onCreate() {
super.onCreate();
this._navigator = new VirtualNavigator(this.entity);
this._navigator.register('start', 'Start', start);
this._navigator.register('play', 'Play', play);
this._navigator.register('score', 'Score', score);
this._navigator.register('list', 'List', list);
}
onAwake() {
super.onAwake();
this.push('start', {first: true});
}
onUpdate(t) {
super.onUpdate(t);
}
onSleep() {
super.onSleep();
}
onDestroy() {
super.onDestroy();
}
push(name: string, parameters: any = null) {
this._navigator.stack.push(name, parameters);
}
pop(parameters: any = null) {
this._navigator.stack.pop(parameters);
}
popToBottom(parameters: any = null) {
this._navigator.stack.popTo(0, null, parameters);
}
popAll(name: string, parameters: any = null) {
this._navigator.stack.popAll(name, parameters);
}
replace(name: string, parameters: any = null) {
this._navigator.stack.replace(name, parameters);
}
jump(name: string, parameters: any = null) {
this._navigator.stack.jump(name, parameters);
}
}
{"ver":"1.0.1","uuid":"b9511adc-3aea-4f7e-a864-7dd8cd77f1ea","subMetas":{},"type":"script"}
/**
* Created by rocky.l on 2017/1/17.
*
* 堆栈导航器
*/
export enum NavigatorAction {Push, Pop, Replace, Jump}
export interface INavigatorDelegate {
onEnter(name: string, last: string, action: NavigatorAction, parameters: any);
onLeave(name: string, next: string, action: NavigatorAction, parameters: any);
onError(error: Error);
}
export class StackNavigator {
private _stack: string[];
private _delegate: INavigatorDelegate;
constructor(delegate: INavigatorDelegate) {
this._stack = [];
this._delegate = delegate;
}
private catchPromise(p: Promise<any>) {
if (p) {
p.catch((e => {
this._delegate.onError(e);
}))
}
}
push(name: string, parameters: any = null) {
let last: string = this.getTopSceneName();
if (last) {
if (last == name) {
return;
}
this.catchPromise(this._delegate.onLeave(last, name, NavigatorAction.Push, parameters));
}
this._stack.push(name);
this.catchPromise(this._delegate.onEnter(name, last, NavigatorAction.Push, parameters));
}
popTo(index, name?: string, parameters: any = null) {
if (this._stack.length > 0 && this._stack.length < (index + 1)) {
return;
}
let last: string = this.getTopSceneName();
this._stack.splice(Math.max(index + 1, 0));
let next: string = this._stack[index];
if (!next) {
this._stack.push(next = name);
}
if (last) {
this.catchPromise(this._delegate.onLeave(last, next, NavigatorAction.Pop, parameters));
}
this.catchPromise(this._delegate.onEnter(next, last, NavigatorAction.Pop, parameters));
}
pop(parameters: any = null) {
this.popTo(this._stack.length - 2, null, parameters);
}
popAll(name: string, parameters: any = null) {
this.popTo(-1, name, parameters);
}
replace(name: string, parameters: any = null) {
let last: string = this._stack.pop();
this._stack.push(name);
this.catchPromise(this._delegate.onLeave(last, name, NavigatorAction.Replace, parameters));
this.catchPromise(this._delegate.onEnter(name, last, NavigatorAction.Replace, parameters));
}
jump(name: string, parameters: any = null) {
if (this._stack.length < 2) {
this.push(name, parameters);
return;
}
let last: string = this._stack.pop();
this._stack.splice(1);
let next: string = name;
this._stack.push(next);
this._delegate.onLeave(last, next, NavigatorAction.Pop, parameters);
this._delegate.onEnter(next, last, NavigatorAction.Pop, parameters);
}
private getTopSceneName(): string {
return this._stack.length > 0 ? this._stack[this._stack.length - 1] : null;
}
private getBottomSceneName(): string {
return this._stack.length > 0 ? this._stack[0] : null;
}
}
{"ver":"1.0.1","uuid":"f5068160-2556-48f9-9e64-05ed06dd74d9","subMetas":{},"type":"script"}
/**
* Created by rocky.l on 2017/1/19.
*
* 场景导航器
*/
import {Entity, EventEmitter} from 'scilla'
import {INavigatorDelegate, NavigatorAction, StackNavigator, } from "./StackNavigator";
const showLog = false;
export const VIEW_WILL_ENTER: string = 'VIEW_WILL_ENTER';
export const VIEW_DID_ENTER: string = 'VIEW_DID_ENTER';
export const VIEW_WILL_LEAVE: string = 'VIEW_WILL_LEAVE';
export const VIEW_DID_LEAVE: string = 'VIEW_DID_LEAVE';
export interface INavigatorViewBase {
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any>;
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any>;
onWillEnter(last: string, action: NavigatorAction, parameters: any): Promise<any>;
onDidEnter(last: string, action: NavigatorAction, parameters: any): void;
onWillLeave(next: string, action: NavigatorAction, parameters: any): Promise<any>;
onDidLeave(next: string, action: NavigatorAction, parameters: any): void;
}
export class VirtualNavigator extends EventEmitter implements INavigatorDelegate {
stack: StackNavigator;
protected _currentName: string;
protected _currentView: INavigatorViewBase;
protected _classDic: any;
protected _container: Entity;
constructor(container) {
super();
this._container = container;
this._classDic = {};
this.stack = new StackNavigator(this);
}
register(alias: string, childName: string, componentDef): void {
this._classDic[alias] = {
childName,
componentDef,
};
}
get currentView(): INavigatorViewBase {
return this._currentView;
}
get currentName(): string {
return this._currentName;
}
protected getViewInstanceByName(name: string): INavigatorViewBase {
let {childName, componentDef,} = this._classDic[name];
let scene: Entity = this._container.getChildrenByName(childName)[0];
let component:any = scene.getComponent(componentDef);
return component;
}
/**
* 栈入实现
* @param name
* @param last
* @param action
* @param parameters
* @returns {Promise<void>}
*/
async onEnter(name: string, last: string, action: NavigatorAction, parameters: any) {
let view: INavigatorViewBase = this.getViewInstanceByName(name);
this._currentView = view;
this._currentName = name;
await view.onWillMount(last, action, parameters);
if (showLog) console.log(name + ' will enter.');
this.emit(VIEW_WILL_ENTER, {name, last, action, parameters});
await view.onWillEnter(last, action, parameters);
if (showLog) console.log(name + ' did enter.');
this.emit(VIEW_DID_ENTER, {name, last, action, parameters});
view.onDidEnter(last, action, parameters);
}
/**
* 栈出实现
* @param name
* @param next
* @param action
* @param parameters
* @returns {Promise<void>}
*/
async onLeave(name: string, next: string, action: NavigatorAction, parameters: any) {
let view: INavigatorViewBase = this.getViewInstanceByName(name);
await view.onWillUnMount(name, action, parameters);
if (showLog) console.log(name + ' will leave.');
this.emit(VIEW_WILL_LEAVE, {name, next, action, parameters});
await view.onWillLeave(next, action, parameters);
if (showLog) console.log(name + ' did leave.');
this.emit(VIEW_DID_LEAVE, {name, next, action, parameters});
view.onDidLeave(next, action, parameters);
}
/**
* 当收到错误实现
* @param error
*/
onError(error: Error) {
}
}
{"ver":"1.0.1","uuid":"aaca9542-45fc-4165-be5d-5f2f916b9238","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"b125afb1-8c01-41d8-9363-1d0c8792a15a","subMetas":{},"isGroup":true}
/**
* Created by rockyl on 2018-12-12.
*
* 对话框内容组件
*/
import ScillaComponent from "components/base/ScillaComponent";
import {fade, flew, none, zoom} from "./PopupEffect";
import {raw} from "scilla";
import {decorators} from "scilla";
// import CustomButton from "../game/CustomButton";
const {dirtyFieldTrigger} = decorators;
export default class DialogContent extends ScillaComponent {
@dirtyFieldTrigger
effect: PopupEffect = PopupEffect.none;
showEffectOptions: raw;
hideEffectOptions: raw;
// protected _closeButton: CustomButton;
effectImpl = none;
protected onModify(value, key, oldValue) {
super.onModify(value, key, oldValue);
if (key === 'effect') {
this.effectImpl = effects[value];
}
}
onAwake() {
super.onAwake();
// if (!this._closeButton) {
// const buttons = this.entity.getChildrenByName('CloseButton');
// if (buttons.length > 0) {
// this._closeButton = buttons[0].getComponent(CustomButton);
// this._closeButton.onClick.addListener(this.onTapCloseButton, this);
// }
// }
}
protected onTapCloseButton() {
this.hide();
}
setup(data) {
}
show = (data?, callback?) => {
console.log('show')
this.bubbling('showDialog', this.entity.name, data, callback);
}
hide = (action?) => {
this.bubbling('hideDialog', this.entity.name, action || 'close');
}
}
const effects = {
none,
fade,
flew,
zoom,
};
export enum PopupEffect {
none = 'none',
fade = 'fade',
flew = 'flew',
zoom = 'zoom',
}
{"ver":"1.0.1","uuid":"2657ed67-fc9d-48b4-9ffa-dc242e49f212","subMetas":{},"type":"script"}
/**
* Created by rockyl on 2018-12-12.
*
* 弹层
*/
import DialogContent from "./DialogContent";
import RectRenderer from "components/renderer/RectRenderer";
import TouchInterrupt from "components/base/TouchInterrupt";
import Transform from "components/base/Transform";
import ScillaComponent from "components/base/ScillaComponent";
import {none} from "./PopupEffect";
import {createTween} from "scilla";
export default class Popup extends ScillaComponent {
blackLayerDuration = 300;
private _bgRenderer: RectRenderer;
private _touchInterrupt: TouchInterrupt;
private _dialogStack = [];
onAwake() {
super.onAwake();
this._touchInterrupt = this.getComponent(TouchInterrupt);
this._touchInterrupt.enabled = false;
const bgRenderer = this._bgRenderer = this.getComponent(RectRenderer);
bgRenderer.enabled = false;
}
onUpdate(t) {
super.onUpdate(t);
}
onSleep() {
super.onSleep();
}
onDestroy() {
super.onDestroy();
}
setBgVisible(visible) {
if(visible){
this._bgRenderer.enabled = true;
}
this._bgRenderer.alpha = visible ? 0 : 1;
createTween(this, this._bgRenderer, true)
.to({alpha: visible ? 1 : 0}, this.blackLayerDuration)
.call(()=>{
if(!visible){
this._bgRenderer.enabled = false;
}
});
}
getDialogInStack(name){
let result;
for(let dialog of this._dialogStack){
if(dialog.name === name){
result = dialog;
break;
}
}
return result;
}
private bringToTop(dialogConfig){
let index = this._dialogStack.indexOf(dialogConfig);
if(index >= 0){
this._dialogStack.splice(index, 1);
}
this._dialogStack.push(dialogConfig);
}
private delete(dialogConfig){
let index = this._dialogStack.indexOf(dialogConfig);
this._dialogStack.splice(index, 1);
}
async showDialog(name, data?, callback?) {
let dialogConfig = this.getDialogInStack(name);
let dialog = this.entity.getChildrenByName(name)[0];
if(!dialogConfig){
dialogConfig = {
name, data, callback, dialog
};
dialog.enabled = true;
}
this.bringToTop(dialogConfig);
const parent = dialog.parent;
parent.removeChild(dialog);
parent.addChildAt(dialog, parent.children.length);
this.setBgVisible(true);
this._touchInterrupt.enabled = true;
const content: DialogContent = dialog.getComponent(DialogContent);
content && content.setup(data);
const transform = dialog.getComponent(Transform);
const effect = content ? content.effectImpl : none;
const effectOptions = content ? content.showEffectOptions : null;
await effect.show(transform, effectOptions);
}
async hideDialog(name, action?: string, data?) {
let dialogConfig = this.getDialogInStack(name);
if(!dialogConfig){
return;
}
let dialog = this.entity.getChildrenByName(name)[0];
this.delete(dialogConfig);
if(this._dialogStack.length === 0){
this.setBgVisible(false);
this._touchInterrupt.enabled = false;
}
const transform = dialog.getComponent(Transform);
const content: DialogContent = dialog.getComponent(DialogContent);
const effect = content ? content.effectImpl : none;
const effectOptions = content ? content.hideEffectOptions : null;
await effect.hide(transform, effectOptions);
dialog.enabled = false;
if (dialogConfig.callback) {
dialogConfig.callback(action, data);
dialogConfig.callback = null;
}
}
hideAll(){
for(let dialog of this._dialogStack){
this.hideDialog(dialog.name);
}
}
}
{"ver":"1.0.1","uuid":"403a3aeb-aa5d-4957-8be4-1ab61fd1b4aa","subMetas":{},"type":"script"}
/**
* Created by rockyl on 2019-05-15.
*/
import Transform from "components/base/Transform";
import {createTween, ease, engine} from "scilla";
function bearingsToOutPos(bearings) {
const {width, height} = engine.renderContext.stageSize;
let x, y;
switch (bearings) {
case 'south':
x = 0;
y = height / 2;
break;
case 'west':
x = -width / 2;
y = 0;
break;
case 'east':
x = width / 2;
y = 0;
break;
case 'north':
default:
x = 0;
y = -height / 2;
}
return {
x, y,
}
}
export const none = {
show(transform: Transform, options?) {
transform.position.setXY(0, 0);
return Promise.resolve();
},
hide(transform: Transform, options?) {
transform.position.setXY(engine.renderContext.stageSize.width, 0);
return Promise.resolve();
}
};
export const fade = {
show(transform: Transform, options?: { bearings?: string, duration?: number, easeFunc?: Function }) {
options = options || {};
transform.alpha = 0;
const toProps: any = {
alpha: 1,
};
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 300, options.easeFunc)
.call(resolve);
})
},
hide(transform: Transform, options?: { bearings?: string, duration?: number, easeFunc?: Function }) {
options = options || {};
const toProps: any = {
alpha: 0,
};
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 200, options.easeFunc)
.call(resolve);
});
}
};
export const flew = {
show(transform: Transform, options?: { bearings?: string, withFade?: boolean, duration?: number, easeFunc?: Function }) {
options = options || {};
let outPos = bearingsToOutPos(options.bearings);
transform.position.copyFrom(outPos);
const toProps: any = {
position: {x: 0, y: 0,},
};
const withFade = options.hasOwnProperty('withFade') ? options.withFade : false;
if (withFade) {
transform.alpha = 0;
toProps.alpha = 1;
}
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 300, options.easeFunc || ease.backOut)
.call(resolve);
})
},
hide(transform: Transform, options?: { bearings?: string, withFade?: boolean, duration?: number, easeFunc?: Function }) {
options = options || {};
let outPos = bearingsToOutPos(options.bearings);
const toProps: any = {
position: outPos,
};
const withFade = options.hasOwnProperty('withFade') ? options.withFade : false;
if (withFade) {
toProps.alpha = 0;
}
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 200, options.easeFunc || ease.backIn)
.call(resolve);
});
}
};
export const zoom = {
show(transform: Transform, options?: { bearings?: string, withFade?: boolean, duration?: number, easeFunc?: Function }) {
options = options || {};
transform.scale.setXY(0, 0);
const toProps: any = {
scale: {x: 1, y: 1,},
};
const withFade = options.hasOwnProperty('withFade') ? options.withFade : false;
if (withFade) {
transform.alpha = 0;
toProps.alpha = 1;
}
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 300, options.easeFunc || ease.backOut)
.call(resolve);
})
},
hide(transform: Transform, options?: { bearings?: string, withFade?: boolean, duration?: number, easeFunc?: Function }) {
options = options || {};
const toProps: any = {
scale: {x: 0, y: 0},
};
const withFade = options.hasOwnProperty('withFade') ? options.withFade : false;
if (withFade) {
toProps.alpha = 0;
}
return new Promise(resolve => {
createTween(transform, transform)
.to(toProps, options.duration || 200, options.easeFunc || ease.backIn)
.call(resolve);
});
}
};
{"ver":"1.0.1","uuid":"6c4d99c9-7dcf-4613-bd93-e4e49b8de177","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"3f49965a-92b3-4489-ade0-25e0526f1f77","subMetas":{},"isGroup":true}
export {default as play} from './play'
export {default as start} from './start'
export {default as score} from './score'
export {default as list} from './list'
{"ver":"1.0.1","uuid":"a56dbac8-b55b-4b82-b19b-9d8594b1f523","subMetas":{},"type":"script"}
import ScillaComponent from 'components/base/ScillaComponent'
import {INavigatorViewBase} from '../navigator/VirtualNavigator'
import {NavigatorAction} from '../navigator/StackNavigator'
import Transform from 'components/base/Transform';
import { createTween, engine, Entity, ease, dynamic, resource, instantiate, Bounds} from 'scilla';
import RelativeLayout from 'components/other/RelativeLayout';
import RankListApi from '../api/RankListApi';
import TextureRenderer from 'components/renderer/TextureRenderer';
import TextRenderer from 'components/renderer/TextRenderer';
export default class list extends ScillaComponent implements INavigatorViewBase{
// plane: Entity
data: dynamic
viewPort: Entity
content: Entity
itemPrefeb: resource
noData: Entity
Image: Entity
onAwake(){
super.onAwake();
}
onUpdate(t){
super.onUpdate(t);
}
onDidEnter(last: string, action: NavigatorAction, parameters: any): void {
const rl = this.plane.getComponent(RelativeLayout)
const left = rl.left
createTween(this, rl, true)
.set({
left: 1000
})
.to({
left
}, 500, ease.circInOut)
}
getList() {
const rankListComponent = this.entity.getComponent(RankListApi)
rankListComponent.execute()
}
onGetResponse() {
const contentTs = this.content.getComponent(Transform)
this.content.removeChildren()
contentTs.height = this.data.length * 100
setTimeout(() => {
this.data.forEach(async ({avatar = '', nickName = '', score = 0} = {}, index) => {
const ele = instantiate(this.itemPrefeb)
this.content.addChild(ele)
const relative = ele.getComponent(RelativeLayout)
relative.top = index * 100
if (avatar) {
const header = ele.children[0].children[0]
const headerRenderer = header.getComponent(TextureRenderer)
headerRenderer.texture = await engine.assetsManager.loadTexture(avatar)
}
if (nickName) {
const name = ele.getChildrenByName('Name')[0]
const nameRenderer = name.getComponent(TextRenderer)
nameRenderer.text = nickName.length > 7 ? nickName.substring(0, 6) + '...' : nickName
}
const scoreEle = ele.getChildrenByName('Score')[0]
const scoreRenderer = scoreEle.getComponent(TextRenderer)
scoreRenderer.text = score * 12.5 + '分'
})
}, 500)
}
onDidLeave(next: string, action: NavigatorAction, parameters: any): void {
document.getElementById('press').style.display = 'none'
}
async onWillEnter(last: string, action: NavigatorAction, parameters: any) {
this.getList()
const ts = this.entity.getComponent(Transform)
createTween(this, ts, true)
.set({
position: {x: engine.renderContext.stageSize.width},
alpha: 0,
})
.to({
position: {x: 0},
alpha: 1,
}, 500)
.call(async () => {
setTimeout(async () => {
if (document.getElementById('press')) return document.getElementById('press').style.display = 'inherit'
const image = await engine.renderContext.shortcut(0, {
quality: 1,
imgType: 'jpg',
zoomToDom: true,
bounds: new Bounds(0, 100, engine.renderContext.stageSize.width, engine.renderContext.stageSize.height)
})
image.style.position = 'absolute'
image.style.left = 0
image.style.top = '50px'
image.style.opacity = 0
image.id = 'press'
document.body.appendChild(image)
}, 200)
})
}
async onWillLeave(next: string, action: NavigatorAction, parameters: any) {
const ts = this.entity.getComponent(Transform)
createTween(this, ts, true)
.set({
position: {x: 0},
alpha: 1,
})
.to({
position: {x: -engine.renderContext.stageSize.width},
alpha: 0,
}, 500)
}
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
}
{"ver":"1.0.1","uuid":"8a18c161-c57c-486a-8aeb-1f1139873085","subMetas":{},"type":"script"}
import ScillaComponent from 'components/base/ScillaComponent'
import {INavigatorViewBase} from '../navigator/VirtualNavigator'
import {NavigatorAction} from '../navigator/StackNavigator'
import Transform from 'components/base/Transform';
import { createTween, engine, Entity } from 'scilla';
import Game from '../Game';
import {getParameter} from '../utils'
import { setEntity, fly } from '../utils/plane';
engine.dataCenter.register('custom')
const shareCode = getParameter('shareCode')
if (shareCode) {
engine.dataCenter.set('custom', 'shareCode', shareCode)
}
export default class play extends ScillaComponent implements INavigatorViewBase{
plane: Entity
onAwake(){
super.onAwake();
setEntity(this.plane, engine.renderContext.stageSize.width)
}
onUpdate(t){
super.onUpdate(t);
}
onDidEnter(last: string, action: NavigatorAction, parameters: any): void {
fly(0, this)
}
onDidLeave(next: string, action: NavigatorAction, parameters: any): void {}
async onWillEnter(last: string, action: NavigatorAction, parameters: any) {
const ts = this.entity.getComponent(Transform)
createTween(this, ts, true)
.set({
position: {x: engine.renderContext.stageSize.width},
alpha: 0,
})
.to({
position: {x: 0},
alpha: 1,
}, 500)
const game = this.entity.getComponent(Game)
game.initialize()
}
async onWillLeave(next: string, action: NavigatorAction, parameters: any) {
const ts = this.entity.getComponent(Transform)
createTween(this, ts, true)
.to({
position: {x: -engine.renderContext.stageSize.width},
alpha: 0,
}, 500)
}
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
}
{"ver":"1.0.1","uuid":"16fba571-392a-48b5-bb20-a24a890f39c9","subMetas":{},"type":"script"}
import ScillaComponent from 'components/base/ScillaComponent'
import {INavigatorViewBase} from '../navigator/VirtualNavigator'
import {NavigatorAction} from '../navigator/StackNavigator'
import Transform from 'components/base/Transform';
import { createTween, engine, dynamic, Entity, resource, createTexture, Bounds } from 'scilla';
import TextRenderer from 'components/renderer/TextRenderer';
import TextureRenderer from 'components/renderer/TextureRenderer';
import BuriedPoint from '../utils/BuriedPoint';
import Popup from '../popup/Popup';
import qrcode from 'qrcode'
export default class score extends ScillaComponent implements INavigatorViewBase{
score: dynamic
text: Entity
name: Entity
nameStr: dynamic
header: Entity
headerUrl: dynamic
Share: Entity
ToList: Entity
Detail: Entity
Code: Entity
Back: Entity
Image: Entity
Container: Entity
sheet: resource
shareCode: dynamic
onAwake(){
super.onAwake();
}
private async initInfo() {
const nameRenderer = this.name.getComponent(TextRenderer)
nameRenderer.text = this.nameStr.length
this.nameStr ? (nameRenderer.text = this.nameStr.length > 6 ? this.nameStr.substring(0, 4) + '...' : this.nameStr) : void 0
const renderer = this.text.getComponent(TextRenderer)
renderer.text = String((this.score || 0) * 12.5)
const r = this.Detail.getComponent(TextureRenderer)
r.texture = this.sheet.getTexture(`${this.mapScoreToPng(this.score)}.png`)
}
onUpdate(t){
super.onUpdate(t);
}
private initBuried() {
let share = this.Share.getComponent(BuriedPoint)
share.enabled = true
share.callSetConfig()
let toList = this.ToList.getComponent(BuriedPoint)
toList.enabled = true
toList.callSetConfig()
}
async onDidEnter(last: string, action: NavigatorAction, parameters: any) {
this.initBuried()
}
mapScoreToPng(score) {
switch (score) {
case 0:
return 0
case 1:
case 2:
case 3:
return 1
case 4:
case 5:
return 2
case 6:
case 7:
return 3
case 8:
return 4
default:
}
}
onDidLeave(next: string, action: NavigatorAction, parameters: any): void {
const save = document.getElementById('save')
save.style.display = 'none'
this.Image.enabled = false
this.Back.enabled = false
}
async onWillEnter(last: string, action: NavigatorAction, parameters: any = {}) {
this.initInfo()
const ts = this.entity.getComponent(Transform)
const run = async () => {
const defineCustom = window['defineCustom']
const data = (`${defineCustom.shareInfo.prefix}${encodeURIComponent(`${defineCustom.shareInfo.link}&shareCode=${this.shareCode}&dbnewopen`)}`)
const image = new Image()
qrcode.toDataURL(data, (_, url) => {
image.src = url
})
image.onload = () => {
const texture = createTexture(image)
this.Code.getComponent(TextureRenderer).texture = texture
setTimeout( async () => {
const shareTs = this.Share.getComponent(Transform)
const img = await engine.renderContext.shortcut(1, {
imgType: 'jpeg',
zoomToDom: false,
bounds: new Bounds(0, 0, engine.renderContext.stageSize.width, shareTs.globalPosition.y - 50),
quality: 1
})
const show = document.getElementById('img')
const save = document.getElementById('save')
show.setAttribute('src', img)
show.setAttribute('crossOrigin', 'Anonymous');
save.style.display = 'inherit'
this.callOnNextTick(() => {
this.Image.enabled = true
this.Back.enabled = true
})
}, 100)
}
}
if (parameters && parameters.first) {
ts.position.x = 0
ts.alpha = 1
run()
} else {
createTween(this, ts, true)
.set({
position: {x: engine.renderContext.stageSize.width},
alpha: 0,
})
.to({
position: {x: 0},
alpha: 1,
}, 500)
.call(run.bind(this))
}
}
onShare() {
const save = document.getElementById('save')
save.style.display = 'none'
this.Container.getComponent(Popup).showDialog('Share')
}
onHide() {
const save = document.getElementById('save')
save.style.display = 'flex'
this.Container.getComponent(Popup).hideDialog('Share')
}
onShowImage() {
const save = document.getElementById('save')
save.className = 'show'
// save.classList.add('save')
save.style.display = 'flex'
save.addEventListener('click', this.onHideImage, false)
}
onHideImage() {
const save = document.getElementById('save')
save.className = ''
save.removeEventListener('click', this.onHideImage, false)
}
async onWillLeave(next: string, action: NavigatorAction, parameters: any) {
const ts = this.entity.getComponent(Transform)
createTween(this, ts, true)
.to({
position: {x: -engine.renderContext.stageSize.width},
alpha: 0,
}, 500)
}
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
}
{"ver":"1.0.1","uuid":"4af16c8f-cb4e-4690-948e-3b9575330eb7","subMetas":{},"type":"script"}
import ScillaComponent from 'components/base/ScillaComponent'
import {INavigatorViewBase} from '../navigator/VirtualNavigator'
import {NavigatorAction} from '../navigator/StackNavigator'
import { Entity, createTween, ease, engine, dynamic, } from 'scilla';
import Transform from 'components/base/Transform';
import SingleSceneNavigator from '../navigator/SingleSceneNavigator';
import wx from '../utils/wx'
import {initEnv} from '../utils/BuriedPoint'
import BuriedPoint from '../utils/BuriedPoint';
const defineCustom = window['defineCustom']
export default class start extends ScillaComponent implements INavigatorViewBase{
Button: Entity
navigator: Entity
score: dynamic
shareCode: dynamic
private clickable: boolean = false
onClick() {
const nava = this.navigator.getComponent(SingleSceneNavigator)
if (this.clickable) {
nava.push('play')
}
}
onAwake(){
super.onAwake();
initEnv()
}
onHomeApiSuccessfully(){
if (this.score !== null) {
const nava = this.navigator.getComponent(SingleSceneNavigator)
engine.dataCenter.set('custom', 'score', String(this.score * 12.5))
engine.dataCenter.set('custom', 'num', this.score)
nava.push('score', {first: true})
}
const ts = this.getComponent(Transform)
ts.alpha = 1
this.clickable = true
const options = Object.assign({}, defineCustom.shareConfig, defineCustom.shareInfo)
this.shareCode ? (options.link = `${defineCustom.shareInfo.prefix}${encodeURIComponent(`${defineCustom.shareInfo.link}&shareCode=${this.shareCode}&dbnewopen`)
}`) : void 0
wx.init(options)
}
onUpdate(t){
super.onUpdate(t);
}
onDidEnter(last: string, action: NavigatorAction, parameters: any): void {
document.querySelector('#loading').style.display = 'none'
if (this.score) {
const buried = this.Button.getComponent(BuriedPoint)
buried.enabled = true
buried.callSetConfig()
}
}
onDidLeave(next: string, action: NavigatorAction, parameters: any): void {
}
async onWillEnter(last: string, action: NavigatorAction, parameters: any) {
if (!(parameters && parameters.first)) {
const selfTs = this.entity.getComponent(Transform)
createTween(this, selfTs, true, {initFields: ['x']})
.set({
position: {
x: engine.renderContext.stageSize.width
}
})
.to({
position: {
x: 0
}
}, 500)
}
}
async onWillLeave(next: string, action: NavigatorAction, parameters: any) {
const selfTs = this.entity.getComponent(Transform)
createTween(this, selfTs, true, {initFields: ['x']})
.to({
position: {
x: -engine.renderContext.stageSize.width
}
}, 500)
}
onWillMount(last: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
onWillUnMount(next: string, action: NavigatorAction, parameters: any): Promise<any> {
return undefined
}
}
{"ver":"1.0.1","uuid":"6c284a71-6249-4703-a2ac-3a623e66413d","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"97be3edc-85a0-4e69-aa2b-6345e7f52625","subMetas":{},"isGroup":true}
/**
* Created by rockyl on 2018-12-26.
*
* 埋点按钮
*/
import InteractComponent from "components/base/InteractComponent";
import {callApi} from "components/net/WebService";
import {engine} from "scilla";
export default class BuriedPoint extends InteractComponent {
dpm: string;
dcm: string;
private _buriedPointName: string;
private _exposured: boolean;
onAwake() {
super.onAwake();
if (this.dpm && this.dcm && !this._exposured) {
this.setConfig(this.dpm, this.dcm, true);
}
}
callSetConfig() {
this.setConfig(this.dpm, this.dcm, true);
}
onTouchTap(e) {
super.onTouchTap(e);
if (this._buriedPointName) {
logClick(this._buriedPointName);
}
}
setConfig(dpm, dcm, needLogExposure = false) {
this._buriedPointName = 'buried-point-' + Date.now() + Math.floor(Math.random() * 999999);
addBuriedPointConfig(
this._buriedPointName,
{dpm, dcm}
);
if (needLogExposure) {
logExposure(this._buriedPointName);
this._exposured = true;
}
}
}
let _buriedPoints: any = {};
let env: any;
export function initEnv() {
const cfg = engine.dataCenter.get('CFG');
env = {
app_id: cfg.appId,
oaid: cfg.opActivityId || cfg.oaId,
page_id: 3,
comp_id: 4,
}
}
export function addBuriedPoints(buriedPoints) {
for (let name in buriedPoints) {
_buriedPoints[name] = buriedPoints[name];
}
}
export function addBuriedPointConfig(name, config) {
const {dpm, dcm} = config;
_buriedPoints[name] = new BuriedPointData(dpm, dcm);
}
export function addBuriedPointConfigs(configs) {
for (let name in configs) {
addBuriedPointConfig(name, configs[name]);
}
}
export function logExposure(name) {
return log(name, 'exposure');
}
export function logClick(name) {
return log(name, 'click');
}
function log(name, type) {
if (DEBUG) {
//return;
}
let logPoint = _buriedPoints[name];
let appId = engine.dataCenter.get('CFG', 'appId');
let {dpm, dcm} = logPoint;
return callApi( //todo 埋点
type == 'exposure' ? '//embedlog.duiba.com.cn/exposure/standard' : '/log/click',
{
dpm, dcm, appId
},
'get', type == 'exposure' ? 'jsonp' : 'json'
).catch(e => {
//console.log(e);
});
}
function fillData(src) {
let result = src;
for (let key in env) {
result = result.replace(key, env[key]);
}
return result;
}
class BuriedPointData {
dpm: string;
dcm: string;
constructor(dpm, dcm) {
this.dpm = fillData(dpm);
this.dcm = fillData(dcm);
}
}
{"ver":"1.0.1","uuid":"4a036ef6-789f-4403-9b7d-062db105f92f","subMetas":{},"type":"script"}
export function getParameter(name, loca = window.location.href) {
const regexS = `[\\?&]${name}=([^&#]*)`;
const regex = new RegExp(regexS);
const results = regex.exec(loca);
if (results === null) return '';
return results[1];
}
\ No newline at end of file
{"ver":"1.0.1","uuid":"be7cb985-d506-4f79-9e5b-f5aa4c799185","subMetas":{},"type":"script"}
import {createTween, ease} from 'scilla'
import Transform from 'components/base/Transform';
let _entity
let _ts
let _width
let _y
export function setEntity(entity, width) {
_entity = entity
_ts = entity.getComponent(Transform)
_width = width
let {y: _y} = _ts.position
}
export function fly(num, ctx) {
switch(num) {
case 0:
return start(ctx)
case 1:
return second(ctx)
case 2:
return third(ctx)
case 3:
return fourth(ctx)
case 4:
return fifth(ctx)
case 5:
return sixth(ctx)
case 6:
return seventh(ctx)
case 7:
return eighth(ctx)
case 8:
return ninth(ctx)
default:
}
}
function start(ctx) {
createTween(ctx, _ts, true)
.wait(500)
.set({
position: {
x: _width,
alpha: 0,
},
rotation: 0,
})
.to({
position: {
x: 200,
alpha: 1
}
}, 1000, ease.cubicOut)
}
function second(ctx) {
createTween(ctx, _ts, true)
.to({
position: {
x: -100
}
}, 1000, ease.cubicInOut)
}
function third(ctx) {
createTween(ctx, _ts, true)
.to({
position: {x: -_width}
}, 200)
.set({
position: {x: _width + 200}
})
.to({
position: {x: 200}
}, 800, ease.cubicInOut)
}
function fourth(ctx) {
const {y} = _ts.position
createTween(ctx, _ts, true)
.to({
position: {x: -100}
}, 800, ease.cubicInOut)
}
function fifth(ctx) {
const {x} = _ts.position
createTween(ctx, _ts, true)
.to({
position: {
x: -_width,
}
}, 400, ease.cubicInOut)
.set({
rotation: -180
})
.to({
position: {x: x - 200}
}, 400, ease.cubicInOut)
}
function sixth(ctx) {
const {y, x} = _ts.position
createTween(ctx, _ts, true, {initFields: ['x', 'y', 'rotation']})
.to({
position: {
x: x + 200,
y
}
}, 800, ease.cubicInOut)
}
function seventh(ctx) {
const {x, y} = _ts.position
createTween(ctx, _ts, true, {initFields: ['x', 'y', 'rotation']})
.to({
position: {x: _width}
}, 400, ease.cubicInOut)
.set({
position: {x: -_width}
})
.to({
position: {x: -_width / 2 + 200}
}, 400, ease.cubicInOut)
}
function eighth(ctx) {
const {x} = _ts.position
createTween(ctx, _ts, true, {initFields: ['x']})
.to({
position: {x: x + 300}
}, 800, ease.cubicInOut)
}
function ninth(ctx) {
createTween(ctx, _ts, true)
.to({
position: {x: _width},
alpha: 0
}, 800)
}
{"ver":"1.0.1","uuid":"4cad1981-3b65-4db4-8f32-e6a91d56d5a6","subMetas":{},"type":"script"}
// 微信分享
let wx = Object.create(null);
export default {
// 分享信息
title: '',
desc: '',
link: '',
imgUrl: '',
// 签名信息
appId: '',
timestamp: '',
nonceStr: '',
signature: '',
success: null,
cancel: null,
debug: false,
// 免登地址 + 分享,中间页 + weserver
apk: '',
activityUrl: location.href,
config() {
const { appId, timestamp, nonceStr, signature, debug } = this;
wx &&
wx.config({
debug,
appId,
timestamp,
nonceStr,
signature,
jsApiList: [`checkJsApi`, `onMenuShareTimeline`, `onMenuShareAppMessage`]
});
},
downloadWXJsdk() {
if (document.querySelector('#__wx_script__')) return this.shareInit();
const script = document.createElement('script');
script.id = '__wx_script__';
script.src = 'https://res.wx.qq.com/open/js/jweixin-1.2.0.js';
(document.documentElement || document.body).appendChild(script);
script.onload = this.shareInit();
},
init(data) {
Object.assign(this, data);
if (data.apk) {
this.link = `http://activity.m.duiba.com.cn/customShare/share?id=2351&apk=${data.apk}&redirect=${
this.activityUrl
}`;
}
this.downloadWXJsdk();
},
shareInit() {
wx = window['wx'];
setTimeout(() => {
this.config();
this.ready();
}, 1000)
},
ready() {
wx &&
wx.ready(() => {
this.invokeWx();
});
},
invokeWx() {
wx &&
wx.onMenuShareTimeline({
title: this.title,
desc: this.desc,
link: this.link,
imgUrl: this.imgUrl,
success() {
this.success && this.success();
},
cancel() {
this.cancel && this.cancel();
}
});
wx &&
wx.onMenuShareAppMessage({
title: this.title,
desc: this.desc,
link: this.link,
imgUrl: this.imgUrl,
success() {
this.success && this.success();
},
cancel() {
this.cancel && this.cancel();
}
});
}
};
{"ver":"1.0.1","uuid":"5d9c599c-248b-4191-a855-32425a791329","subMetas":{},"type":"script"}
{"ver":"1.0.1","uuid":"a67a10bf-16e9-47b7-8f10-ee7dcdeb2551","subMetas":{},"isGroup":true}
{"ver":"1.0.1","uuid":"5079e0f6-3a88-45f8-ae33-df09aec697d1","subMetas":{"bg-detail":{"ver":"1.0.1","uuid":"0676c16f-5ae2-47bb-91b7-4f56a893f2cd","rawTextureUuid":"5079e0f6-3a88-45f8-ae33-df09aec697d1","type":"texture"}},"type":"texture","imagePath":"/Users/firefly/duiba/demoList/QuestionsOfBank/assets/singles/bg-detail.jpg"}
{"ver":"1.0.1","uuid":"4400d7c6-ac22-466b-8a80-9ecfff845c24","subMetas":{"bg":{"ver":"1.0.1","uuid":"ec564afa-879d-425a-9aa2-e6d0347e986c","rawTextureUuid":"4400d7c6-ac22-466b-8a80-9ecfff845c24","type":"texture"}},"type":"texture","imagePath":"/Users/firefly/duiba/demoList/QuestionsOfBank/assets/singles/bg.jpg"}
{"ver":"1.0.1","uuid":"128693bf-b7cf-41cf-b8e9-f5204069b29f","subMetas":{"code":{"ver":"1.0.1","uuid":"e1702fd3-dcca-43fc-9697-a4a623f65b32","rawTextureUuid":"128693bf-b7cf-41cf-b8e9-f5204069b29f","type":"texture"}},"type":"texture","imagePath":"/Users/firefly/duiba/demoList/QuestionsOfBank/assets/singles/code.png"}
{"ver":"1.0.1","uuid":"6e326551-0809-40fe-ac5c-a6fe9f2795a6","subMetas":{"paper.png":{"ver":"1.0.1","uuid":"146e575e-acbe-49a4-990b-2c7e90b56891","rawTextureUuid":"6e326551-0809-40fe-ac5c-a6fe9f2795a6","type":"texture"},"bottom.png":{"ver":"1.0.1","uuid":"d5be8ed3-45a8-4575-a2a3-ba5ba405bc14","rawTextureUuid":"6e326551-0809-40fe-ac5c-a6fe9f2795a6","type":"texture"},"header-bg.png":{"ver":"1.0.1","uuid":"dd5d6029-2c18-40fa-9c2f-ba34be8d07f9","rawTextureUuid":"6e326551-0809-40fe-ac5c-a6fe9f2795a6","type":"texture"},"header.png":{"ver":"1.0.1","uuid":"b9f295b8-e93c-4005-9e37-112c7cd15f6e","rawTextureUuid":"6e326551-0809-40fe-ac5c-a6fe9f2795a6","type":"texture"}},"type":"sheet"}
This diff is collapsed.
This diff is collapsed.
{"ver":"1.0.1","uuid":"1fce2248-1144-44aa-8ed2-6e67c67144d3","subMetas":{"paper":{"ver":"1.0.1","uuid":"e0a6ba46-6092-42cd-9019-f39136a916e3","rawTextureUuid":"1fce2248-1144-44aa-8ed2-6e67c67144d3","type":"texture"}},"type":"texture","imagePath":"/Users/firefly/duiba/demoList/QuestionsOfBank/assets/singles/paper.png"}
{"ver":"1.0.1","uuid":"7fc95697-8a09-40bd-ad91-44e1359d8f29","subMetas":{"plane":{"ver":"1.0.1","uuid":"5beaa36d-5daf-4ea7-ac4d-b1abae352db5","rawTextureUuid":"7fc95697-8a09-40bd-ad91-44e1359d8f29","type":"texture"}},"type":"texture","imagePath":"/Users/firefly/duiba/demoList/QuestionsOfBank/assets/singles/plane.png"}
{"ver":"1.0.1","uuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","subMetas":{"1-1.png":{"ver":"1.0.1","uuid":"0211dc36-97e7-41e2-8268-3b2e508a09dd","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"1-2.png":{"ver":"1.0.1","uuid":"44c5020b-cb7e-44d1-841f-a4531878268c","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"1-3.png":{"ver":"1.0.1","uuid":"9cca0a26-b8d9-4232-bf14-4ab5fb8015c7","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"2-1.png":{"ver":"1.0.1","uuid":"22ce5add-b494-406a-9c05-ba5a083333fb","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"2-2.png":{"ver":"1.0.1","uuid":"6a421cef-1dff-4a07-98d9-9f45a573dbd6","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"2-3.png":{"ver":"1.0.1","uuid":"1c7ecfcb-0c71-448f-b83a-3038034776a8","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"3-1.png":{"ver":"1.0.1","uuid":"31cac2af-787d-4738-9f4f-b8ff0aadd6ca","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"3-2.png":{"ver":"1.0.1","uuid":"42c4475e-0cc2-4a95-9c42-791f8e8255d8","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"3-3.png":{"ver":"1.0.1","uuid":"75ea72a9-3178-4299-9114-3809d8af81e6","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"4-1.png":{"ver":"1.0.1","uuid":"36984f1e-1a98-4c06-b5c4-f6c5a166dc9b","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"4-2.png":{"ver":"1.0.1","uuid":"b4f466df-ed66-4905-9474-74a48fc2f227","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"4-3.png":{"ver":"1.0.1","uuid":"6ddce65d-762f-49ba-b40b-bf824dab8aa6","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"5-1.png":{"ver":"1.0.1","uuid":"d4b76b0c-e85b-4077-91da-19b5079d4a66","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"5-2.png":{"ver":"1.0.1","uuid":"cb1cf399-8849-470e-9867-658501420674","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"5-3.png":{"ver":"1.0.1","uuid":"2c7af9c2-b3da-42ab-b9a3-7db67cf107bc","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"6-1.png":{"ver":"1.0.1","uuid":"45b00991-cd99-4957-8dc7-5b430df1f072","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"6-2.png":{"ver":"1.0.1","uuid":"47bdb598-8b01-4c1c-a806-0e671ad8893c","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"6-3.png":{"ver":"1.0.1","uuid":"d43d890f-7822-4ee3-9e05-c1d3b4590a76","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"7-1.png":{"ver":"1.0.1","uuid":"d530bf14-dd7a-4660-a53c-e90583432975","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"7-2.png":{"ver":"1.0.1","uuid":"e55cf8d2-4266-48e5-810e-9eb134602ee7","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"7-3.png":{"ver":"1.0.1","uuid":"c48b23b1-f469-44ac-9205-690b458abd4d","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"8-1.png":{"ver":"1.0.1","uuid":"3c19752c-5ecf-4a4a-b77a-d26ea3a167f5","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"8-2.png":{"ver":"1.0.1","uuid":"544f5247-0940-470a-99f0-aec89438ae3b","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"8-3.png":{"ver":"1.0.1","uuid":"938b3cfa-8eb4-4c45-a781-553e34f4ed24","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"plane.png":{"ver":"1.0.1","uuid":"5bb37e75-a255-4cc0-bf18-5c8725a6bcbc","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"score.png":{"ver":"1.0.1","uuid":"1e69f4f9-83cd-4e3a-8709-e98bc165503b","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"selectBtn.png":{"ver":"1.0.1","uuid":"43879448-4939-4eda-9636-626060009794","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"},"unSelectBtn.png":{"ver":"1.0.1","uuid":"2db0b61b-6feb-42c2-8a43-197e438b88ee","rawTextureUuid":"a7269898-a2dc-4b37-a512-c57bf1ff1802","type":"texture"}},"type":"sheet"}
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment