diff --git a/ShadowEditor.Web/src/editor/menubar/PlayMenu.js b/ShadowEditor.Web/src/editor/menubar/PlayMenu.js index 08a185ee..985d9f19 100644 --- a/ShadowEditor.Web/src/editor/menubar/PlayMenu.js +++ b/ShadowEditor.Web/src/editor/menubar/PlayMenu.js @@ -26,7 +26,7 @@ PlayMenu.prototype.render = function () { cls: 'title', html: L_PLAY, onClick: this.onTogglePlay.bind(this), - }, , { + }, { xtype: 'div', cls: 'options', children: [{ @@ -36,14 +36,12 @@ PlayMenu.prototype.render = function () { cls: 'option', html: '播放', onClick: this.onTogglePlay.bind(this), - }, - // { - // xtype: 'div', - // cls: 'option', - // html: '全屏播放', - // onClick: this.playFullscreen.bind(this), - // }, - { + }, { + xtype: 'div', + cls: 'option', + html: '全屏播放', + onClick: this.playFullscreen.bind(this), + }, { xtype: 'div', cls: 'option', html: '新窗口播放', @@ -95,11 +93,24 @@ PlayMenu.prototype.stopPlay = function () { // 停止播放 this.app.player.stop(); }; -// PlayMenu.prototype.playFullscreen = function () { // 全屏播放 -// var dom = this.app.editor.renderer.domElement; -// dom.requestFullscreen(); -// this.startPlayer(); -// }; +PlayMenu.prototype.playFullscreen = function () { // 全屏播放 + if (!this.isPlaying) { + this.startPlay(); + } + + this.app.player.on(`init.${this.id}`, this._requestFullscreen.bind(this)); +}; + +PlayMenu.prototype._requestFullscreen = function () { + var dom = this.app.player.renderer.domElement; + dom.addEventListener('fullscreenchange', this._onFullscreenChange.bind(this)); + dom.requestFullscreen(); +}; + +PlayMenu.prototype._onFullscreenChange = function () { + debugger + this.app.player.resize(); +}; PlayMenu.prototype.playNewWindow = function () { // 新窗口播放 UI.msg('新窗口播放!'); diff --git a/ShadowEditor.Web/src/player/Player.js b/ShadowEditor.Web/src/player/Player.js index 3b100a5b..96d24d2e 100644 --- a/ShadowEditor.Web/src/player/Player.js +++ b/ShadowEditor.Web/src/player/Player.js @@ -1,3 +1,4 @@ +import { dispatch } from '../third_party'; import UI from '../ui/UI'; import Converter from '../serialization/Converter'; @@ -18,6 +19,12 @@ function Player(options) { UI.Control.call(this, options); this.app = options.app; + this.dispatch = new dispatch([ + 'init' + ]); + this.call = this.dispatch.call.bind(this.dispatch); + this.on = this.dispatch.on.bind(this.dispatch); + this.scene = null; this.camera = null; this.renderer = null; @@ -88,6 +95,8 @@ Player.prototype.start = function () { this.loader.create(jsons).then(obj => { this.initPlayer(obj); + this.dispatch.call('init', this); + var promise1 = this.event.create(this.scene, this.camera, this.renderer, obj.scripts); var promise2 = this.control.create(this.scene, this.camera, this.renderer); var promise3 = this.audio.create(this.scene, this.camera, this.renderer); @@ -184,4 +193,21 @@ Player.prototype.animate = function () { requestAnimationFrame(this.animate.bind(this)); }; +Player.prototype.resize = function () { + if (!this.camera || !this.renderer) { + return; + } + + var camera = this.camera; + var renderer = this.renderer; + + var width = renderer.domElement.clientWidth; + var height = renderer.domElement.clientHeight; + + camera.aspect = width / height; + camera.updateProjectionMatrix(); + + renderer.setSize(width, height); +}; + export default Player; \ No newline at end of file