export default class Trajectory extends ui.view.DefaultTheme.TrajectoryUI { constructor() { super(); let pos1 = [0, 0]; this.panelTrajectory.on(Laya.Event.MOUSE_DOWN, this, e => pos1 = [e.stageX, e.stageY]); this.panelTrajectory.on(Laya.Event.MOUSE_UP, this, e => { const distanceX = e.stageX - pos1[0]; const distanceY = e.stageY - pos1[1]; if(Math.sqrt(Math.abs(distanceX) + Math.abs(distanceY)) > 10) { return; } this.onNext(); }); this.btnSummary.on(Laya.Event.CLICK, this, this.onSummary); this.panelTrajectory.vScrollBar.elasticDistance = 150; this.scbSpeed.on(Laya.Event.CHANGE, this, () => this.speed = this.scbSpeed.value); this.scbSpeed.on(Laya.Event.MOUSE_UP, this, () => this.onNext()); } #speed; #auto; static load() { return [ "images/atlas/images/progress.atlas", 'images/atlas/images/slider.atlas', ]; } static #createComponent = Laya.plugin.extractComponents(Trajectory.uiView, ['boxTrajectoryItem']); #createTrajectoryItem() { const item = Trajectory.#createComponent('boxTrajectoryItem'); item.labContent = item.getChildByName('labContent'); item.labAge = item.getChildByName('hboxAge').getChildByName('labAge'); const config = $ui.common.trajectoryItem; $_.deepMapSet(item, config.box); item.grade = grade => { $_.deepMapSet(item, config.grade[grade || 0]); } item.getChildByName('hboxAge')._childs.forEach(child => child.color = config.ageColor); item.labContent.color = config.contentColor; return item; } #isEnd; #trajectoryItems; #talents; init({propertyAllocate, talents}) { this.boxParticle.visible = false; this.boxSpeed.visible = true; this.btnSummary.visible = false; this.#trajectoryItems = []; this.#isEnd = false; this.#talents = talents; core.start(propertyAllocate); this.updateProperty(); this.onNext(); } close() { this.scbSpeed.value = 0; this.speed = 0; this.#trajectoryItems.forEach(item => { item.removeSelf(); item.destroy(); }); this.#trajectoryItems = null; } updateProperty() { const types = core.PropertyTypes; const propertys = core.propertys; this.labCharm.text = propertys[types.CHR]; this.labIntelligence.text = propertys[types.INT]; this.labStrength.text = propertys[types.STR]; this.labMoney.text = propertys[types.MNY]; this.labSpirit.text = propertys[types.SPR]; } onNext() { if(this.#isEnd) return; const { age, content, isEnd } = core.next(); this.#isEnd = isEnd; if(isEnd) { this.boxSpeed.visible = false; this.btnSummary.visible = true; } this.renderTrajectory(age, content); if(age >= 100) { this.boxParticle.visible = true; } Laya.timer.frameOnce(1, this, () => { this.panelTrajectory.scrollTo(0, this.panelTrajectory.contentHeight); }); this.updateProperty(); } renderTrajectory(age, content) { const item = this.#createTrajectoryItem(); item.labAge.text = ''+age; item.labContent.text = content.map( ({type, description, grade, name, postEvent}) => { switch(type) { case 'TLT': return `天赋【${name}】发动:${description}`; case 'EVT': return description + (postEvent?`\n${postEvent}`:''); } } ).join('\n'); item.grade(content[content.length - 1].grade); this.vboxTrajectory.addChild(item); this.#trajectoryItems.push(item); this.#trajectoryItems.forEach((item, index) => item.y = index); } onSummary() { const talents = this.#talents; $ui.switchView(UI.pages.SUMMARY, {talents}); } get speed() { return this.#speed; } set speed(speed) { this.#speed = speed; this.prgSpeed.value = speed / this.scbSpeed.max; clearInterval(this.#auto); this.#auto = null; if(!speed) return; this.#auto = setInterval( () => this.onNext(), 3000 * (1 - this.prgSpeed.value) + 300 ); } }