skynovel
Version:
webgl novelgame framework
76 lines (64 loc) • 2.72 kB
text/typescript
/* ***** BEGIN LICENSE BLOCK *****
Copyright (c) 2018-2020 Famibee (famibee.blog38.fc2.com)
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
** ***** END LICENSE BLOCK ***** */
import {HArg, IVariable} from './CmnInterface';
import {Layer} from './Layer';
import {SysBase} from './SysBase';
import {CmnLib} from './CmnLib';
import {Container} from 'pixi.js';
export class Pages {
private pg: {fore: Layer, back: Layer};
constructor(layer: string, private readonly cls_: string, fore: Container, hArgFore: HArg, back: Container, hArgBack: HArg, sys: SysBase, val: IVariable) {
const fncF = sys.hFactoryCls[cls_];
if (! fncF) throw `属性 class【${cls_}】が不正です`;
this.pg = {fore: fncF(), back: fncF()};
this.pg.fore.name = `layer:${layer} cls:${cls_} page:A`;
this.pg.back.name = `layer:${layer} cls:${cls_} page:B`;
fore.addChild(this.fore.cnt);
back.addChild(this.back.cnt);
CmnLib.argChk_Boolean(hArgFore, 'visible', true);
CmnLib.argChk_Boolean(hArgBack, 'visible', true);
// SKYNovelではデフォルトはtrueとする
this.fore.lay(hArgFore);
this.back.lay(hArgBack);
// 組み込み変数
const valnm = `const.sn.lay.${layer}`;
val.setVal_Nochk('tmp', valnm, true);
val.defTmp(valnm +'.fore.alpha', ()=> this.pg.fore.alpha);
val.defTmp(valnm +'.back.alpha', ()=> this.pg.back.alpha);
val.defTmp(valnm +'.fore.height', ()=> this.pg.fore.height);
val.defTmp(valnm +'.back.height', ()=> this.pg.back.height);
val.defTmp(valnm +'.fore.visible', ()=> this.pg.fore.cnt.visible);
val.defTmp(valnm +'.back.visible', ()=> this.pg.back.cnt.visible);
val.defTmp(valnm +'.fore.width', ()=> this.pg.fore.width);
val.defTmp(valnm +'.back.width', ()=> this.pg.back.width);
val.defTmp(valnm +'.fore.x', ()=> this.pg.fore.x);
val.defTmp(valnm +'.back.x', ()=> this.pg.back.x);
val.defTmp(valnm +'.fore.y', ()=> this.pg.fore.y);
val.defTmp(valnm +'.back.y', ()=> this.pg.back.y);
}
destroy() {
this.pg.fore.destroy();
this.pg.back.destroy();
}
readonly lay = (hArg: HArg)=> this.getPage(hArg).lay(hArg);
readonly getPage = (hArg: HArg)=>
(Pages.argChk_page(hArg, 'fore') != 'back')
? this.pg.fore
: this.pg.back;
static argChk_page(hash: HArg, def: string): string {
const v = hash.page ?? def;
if (v == 'fore') return hash.page = v;
if (v == 'back') return hash.page = v;
throw Error('属性 page【'+ v +'】が不正です');
}
get cls() {return this.cls_;}
get fore(): Layer {return this.pg.fore;}
get back(): Layer {return this.pg.back;}
transPage(): void {
[this.pg.back, this.pg.fore] = [this.pg.fore, this.pg.back];
this.pg.back.copy(this.pg.fore);
}
}