79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
|
import { sys } from 'cc';
|
||
|
import { view, ResolutionPolicy, log } from 'cc';
|
||
|
import { _decorator, Component, Node } from 'cc';
|
||
|
import * as cc from 'cc';
|
||
|
import { UmLog } from './UmLog';
|
||
|
import { UmClientEvent } from './UmOneToMultiListener';
|
||
|
import { UmConfig } from './UmConfig';
|
||
|
const { ccclass, property } = _decorator;
|
||
|
|
||
|
@ccclass('UmCanvasResize')
|
||
|
export class UmCanvasResize extends Component {
|
||
|
public static startFit: number = ResolutionPolicy.SHOW_ALL;
|
||
|
public static currentFit: number = ResolutionPolicy.FIXED_WIDTH;
|
||
|
|
||
|
onLoad() {
|
||
|
if (UmCanvasResize.isListenerCanvasResize()) {// && !document.getElementById('GameDiv')
|
||
|
window.addEventListener('resize', this._onEventCanvasResized);
|
||
|
UmCanvasResize.currentFit = Number(view.getResolutionPolicy);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
onDestroy() {
|
||
|
UmCanvasResize.resetFitCanvasSize();
|
||
|
}
|
||
|
|
||
|
_onEventCanvasResized() {
|
||
|
UmLog.log("[Canvas] => _onEventCanvasResized");
|
||
|
UmCanvasResize.updateFitCanvasSize();
|
||
|
}
|
||
|
|
||
|
public static isListenerCanvasResize(): boolean {
|
||
|
if (sys.isBrowser) {
|
||
|
if (sys.isMobile) return true;
|
||
|
|
||
|
if (UmConfig.isModeDebug) {
|
||
|
let url = window.location.href;
|
||
|
if (url?.length > 0 && url.includes("http://localhost:")) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public static updateFitCanvasSize() {
|
||
|
const viewSize = cc.screen.windowSize;
|
||
|
const designSize = view.getDesignResolutionSize();
|
||
|
let windowWidth = viewSize.width;
|
||
|
let windowHeight = viewSize.height;
|
||
|
let windowRatio = windowWidth * 1.0 / windowHeight;
|
||
|
const designRatio = designSize.width * 1.0 / designSize.height;
|
||
|
let height = designSize.height;
|
||
|
if (windowRatio <= designRatio) {
|
||
|
height = designSize.width / viewSize.width * viewSize.height;
|
||
|
UmCanvasResize.currentFit = ResolutionPolicy.FIXED_WIDTH;
|
||
|
log("[Canvas] => updateFitCanvasSize ==> ", designSize.width, height, " ==> FIT_WIDTH");
|
||
|
}
|
||
|
else {
|
||
|
UmCanvasResize.currentFit = ResolutionPolicy.SHOW_ALL
|
||
|
log("[Canvas] => updateFitCanvasSize ==> ", designSize.width, height, " ==> FIT_SHOW_ALL");
|
||
|
}
|
||
|
view.setResolutionPolicy(UmCanvasResize.currentFit);
|
||
|
UmClientEvent.dispatchEvent("canvas-resize");
|
||
|
}
|
||
|
|
||
|
public static updateCurrentFitCanvasSize() {
|
||
|
log("[Canvas] => updateCurrentFitCanvasSize");
|
||
|
view.setResolutionPolicy(UmCanvasResize.currentFit);
|
||
|
}
|
||
|
|
||
|
public static resetFitCanvasSize() {
|
||
|
if (UmCanvasResize.isListenerCanvasResize()) {
|
||
|
view.setResolutionPolicy(UmCanvasResize.startFit);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|