super-hero/assets/cc-common/cc-util/UmCanvasResize.ts

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);
}
}
}