Files
esengine/demo/src/Main.ts

126 lines
4.9 KiB
TypeScript
Raw Normal View History

2020-06-08 11:49:45 +08:00
//////////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2014-present, Egret Technology.
// All rights reserved.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Egret nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////
class Main extends eui.UILayer {
2020-06-15 12:16:23 +08:00
public static emitter: Emitter<CoreEmitterType>;
2020-06-08 11:49:45 +08:00
protected createChildren(): void {
super.createChildren();
egret.lifecycle.addLifecycleListener((context) => {
// custom lifecycle plugin
})
egret.lifecycle.onPause = () => {
egret.ticker.pause();
}
egret.lifecycle.onResume = () => {
egret.ticker.resume();
}
//inject the custom material parser
//注入自定义的素材解析器
let assetAdapter = new AssetAdapter();
egret.registerImplementation("eui.IAssetAdapter", assetAdapter);
egret.registerImplementation("eui.IThemeAdapter", new ThemeAdapter());
2020-06-15 12:16:23 +08:00
Main.emitter = new Emitter<CoreEmitterType>();
this.addEventListener(egret.Event.ENTER_FRAME, this.updateFrame, this);
2020-06-08 11:49:45 +08:00
this.runGame();
}
2020-06-15 12:16:23 +08:00
private updateFrame(evt: egret.Event){
Main.emitter.emit(CoreEmitterType.Update, evt);
let activeScene = SceneManager.getActiveScene();
if (activeScene){
let player = activeScene.findEntity("player");
if (player){
let mover = player.getComponent<Mover>(Mover);
mover.move(new Vector2(0, 0));
}
}
2020-06-15 12:16:23 +08:00
}
2020-06-08 16:23:48 +08:00
private async runGame() {
await this.loadResource();
2020-06-08 11:49:45 +08:00
this.createGameScene();
}
private async loadResource() {
try {
const loadingView = new LoadingUI();
this.stage.addChild(loadingView);
await RES.loadConfig("resource/default.res.json", "resource/");
await this.loadTheme();
await RES.loadGroup("preload", 0, loadingView);
this.stage.removeChild(loadingView);
}
catch (e) {
console.error(e);
}
}
private loadTheme() {
return new Promise((resolve, reject) => {
// load skin theme configuration file, you can manually modify the file. And replace the default skin.
//加载皮肤主题配置文件,可以手动修改这个文件。替换默认皮肤。
let theme = new eui.Theme("resource/default.thm.json", this.stage);
theme.addEventListener(eui.UIEvent.COMPLETE, () => {
resolve();
}, this);
})
}
/**
*
* Create scene interface
*/
protected createGameScene(): void {
2020-06-18 23:22:54 +08:00
let image = new eui.Image(RES.getRes("checkbox_select_disabled_png"));
this.addChild(image);
2020-06-08 18:26:05 +08:00
let scene = SceneManager.createScene("main", new MainScene(this)).setActive();
2020-06-08 16:23:48 +08:00
let player = scene.createEntity("player");
2020-06-18 23:22:54 +08:00
player.addComponent(new SpriteRenderer()).setSprite(image)
2020-06-08 18:26:05 +08:00
player.addComponent(new SpawnComponent(EnemyType.worm));
player.addComponent(new BoxCollider()).setSize(100, 100).isTrigger = true;
player.addComponent(new Mover());
2020-06-18 23:22:54 +08:00
player.position = new Vector2(100, 100);
2020-06-15 12:16:23 +08:00
2020-06-16 00:04:28 +08:00
let player2 = scene.createEntity("player2");
player2.addComponent(new BoxCollider()).setSize(99, 99);
2020-06-16 00:04:28 +08:00
// Main.emitter.addObserver(CoreEmitterType.Update, ()=>{
// console.log("update emitter");
// });
2020-06-08 11:49:45 +08:00
}
}