Commit 024b29bc authored by rockyl's avatar rockyl

tslib独立出来

增加env
parent c833d73d
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff is collapsed.
"use strict";
exports.__esModule = true;
var TouchZoom = (function () {
function TouchZoom() {
this.zoomTo = 1.1;
}
TouchZoom.prototype.mounted = function () {
this.host.anchorX = this.host.width / 2;
this.host.anchorY = this.host.height / 2;
this.host.addEventListener(engine.MouseEvent.MOUSE_DOWN, this._onMouseDown, this);
this.host.addEventListener(engine.MouseEvent.MOUSE_UP, this._onMouseUp, this);
};
TouchZoom.prototype._onMouseDown = function (e) {
this.host.scaleX = this.host.scaleY = this.zoomTo;
};
TouchZoom.prototype._onMouseUp = function (e) {
this.host.scaleX = this.host.scaleY = 1;
};
TouchZoom.id = 'touch-zoom';
return TouchZoom;
}());
exports["default"] = TouchZoom;
......@@ -6,7 +6,8 @@
"types": "index.d.ts",
"dependencies": {
"glob": "^7.1.6",
"rollup-plugin-typescript": "^1.0.1"
"rollup-plugin-typescript": "^1.0.1",
"tslib": "^1.10.0"
},
"devDependencies": {
"dts-bundle": "^0.7.3",
......
......@@ -27,7 +27,7 @@ export default {
//useTsconfigDeclarationDir: true,
}),
commonjs(),
//uglify({}),
uglify({}),
],
onwarn: function(){
......
import { EventDispatcher } from "../events/EventDispatcher";
import {EventDispatcher} from "../events/EventDispatcher";
//import { Parser } from "../svga/parser";
//import { VideoEntity } from "../svga/VideoEntity";
import { TextureCache } from "../utils";
import { Texture } from "../texture";
import {TextureCache} from "../utils";
import {Texture} from "../texture";
import {httpRequest} from "../net";
export class Loader extends EventDispatcher {
......@@ -34,7 +35,7 @@ export class Loader extends EventDispatcher {
this.loadImage((suc, data) => {
if (suc) {
if (this.caches[url]) {
callback(true, { json: this.caches[url], img: data })
callback(true, {json: this.caches[url], img: data})
}
} else {
callback(false, data)
......@@ -44,7 +45,7 @@ export class Loader extends EventDispatcher {
this.loadJson((suc, data) => {
if (suc) {
if (this.caches[pngFile]) {
callback(true, { json: data, img: this.caches[pngFile] })
callback(true, {json: data, img: this.caches[pngFile]})
}
} else {
callback(false, data)
......@@ -52,34 +53,13 @@ export class Loader extends EventDispatcher {
}, url)
}
httpRequest(callback: Function, url: string, method: string = 'get',type: 'text'|'json' = 'text'){
//每次都要new
let _req;
if (window["XMLHttpRequest"]) {
_req = new XMLHttpRequest();
} else if (window["ActiveXObject"]) {
_req = new window["ActiveXObject"]();
} else {
alert("请升级至最新版本的浏览器")
}
if (_req != null) {
_req.open("GET", url, true);
_req.responseType = type;
_req.send();
_req.onreadystatechange = () => {
if (_req.readyState == 4 && _req.status == 200) {
this.cache(url, _req.response);
callback(true, _req.response)
}
};
_req.onerror = (reason): void => {
callback(false, reason)
loadRaw(callback: Function, url: string, type: 'text' | 'json') {
httpRequest((s, p) => {
if (s) {
this.cache(url, p);
}
}
}
loadRaw(callback: Function, url: string, type: 'text'|'json') {
this.httpRequest(callback, url, 'get', type);
callback(s, p);
}, url, 'get', {}, type);
}
loadJson(callback: Function, url: string) {
......@@ -92,10 +72,10 @@ export class Loader extends EventDispatcher {
loadTexture(callback: Function, url: string) {
this.loadImage((s, payload) => {
if (s){
if (s) {
this.cache(url, payload);
callback(s, TextureCache[url] = Texture.from(payload));
}else{
} else {
callback(s, payload);
}
}, url)
......
/**
* Created by rockyl on 2019-11-22.
*/
import {obj2query} from "../zeroing/utils";
/**
* http请求
* @param callback
* @param url
* @param method
* @param params
* @param type
*/
export function httpRequest(callback: Function, url: string, method: string = 'get', params?: any, type: 'text' | 'json' | 'jsonp' = 'text') {
if (type === "jsonp") {
jsonp(callback, url, params);
} else {
let _req;
if (window["XMLHttpRequest"]) {
_req = new XMLHttpRequest();
} else if (window["ActiveXObject"]) {
_req = new window["ActiveXObject"]();
} else {
console.log('no xhr');
}
if (_req != null) {
const isGet = method.toUpperCase() === 'GET';
const queryStr = obj2query(params);
if (isGet) {
url = urlJoin(url, queryStr);
}
_req.open(method, url, true);
_req.responseType = type;
if (isGet) {
_req.send();
} else {
_req.send(queryStr);
}
_req.onreadystatechange = () => {
if (_req.readyState == 4 && _req.status == 200) {
callback && callback(true, _req.response)
}
};
_req.onerror = (reason): void => {
callback && callback(false, reason)
}
}
}
}
export function jsonp(callback, url, params) {
const src = urlJoin(url, obj2query(params));
const scriptEl = document.createElement('script');
scriptEl.src = src;
scriptEl.onload = function () {
callback && callback(true);
document.body.removeChild(scriptEl);
};
scriptEl.onerror = function () {
callback && callback(false);
document.body.removeChild(scriptEl);
};
/*const callbackFuncName = '__zeroing_jsonp_callback__' + Math.random();
window[callbackFuncName] = function () {
callback(result);
};*/
document.body.appendChild(scriptEl);
}
export function urlJoin(url, query) {
if (query) {
return url + (url.indexOf('?') < 0 ? '?' : '') + (url[url.length - 1] === '&' ? '' : '&') + query;
} else {
return url;
}
}
......@@ -24,6 +24,7 @@ export * from "./2d/texture";
export * from "./2d/ui";
export * from './2d/tween'
export * from './2d/net'
export { default as toDisplayDataURL } from "./2d/utils/toDisplayDataURL";
......
......@@ -25,19 +25,33 @@ export function applyScript(ctor: Function) {
/**
* 脚本接口
*/
export interface IScript {
host: any;
export class ScriptBase {
private _host: Container;
disabled: boolean;
mounted();
get host() {
return this._host
}
mounted() {
}
destroy() {
destroy();
}
update(t: number) {
update(t);
}
awake();
awake() {
sleep();
}
sleep() {
}
}
/**
......@@ -83,7 +97,7 @@ export function registerScripts(scripts) {
*/
class ScriptsProxy {
private _host: Container;
private _scripts: IScript[] = [];
private _scripts: ScriptBase[] = [];
constructor(host) {
this._host = host;
......@@ -99,15 +113,15 @@ class ScriptsProxy {
* @param options
* @param disabled
*/
add(name, options, disabled): IScript {
add(name, options, disabled): ScriptBase {
let def = scriptDefs[name];
if (!def) {
console.warn('script def not exists');
return;
}
let script: IScript = new def();
script['host'] = this._host;
script['_disabled'] = disabled;
let script: ScriptBase = new def();
script['_host'] = this._host;
script['_disabled'] = disabled; //因为在注册的时候,会包装disabled属性
for (let k in options) {
script[k] = options[k];
}
......@@ -125,7 +139,7 @@ class ScriptsProxy {
* 移除一个脚本
* @param index
*/
remove(index): IScript {
remove(index): ScriptBase {
let script = this._scripts.splice(index, 1)[0];
if (script) {
if (this._host && this._host.stage) {
......@@ -139,7 +153,7 @@ class ScriptsProxy {
/**
* 获取所有脚本
*/
get all(): IScript[] {
get all(): ScriptBase[] {
return this._scripts;
}
......@@ -147,7 +161,7 @@ class ScriptsProxy {
* 根据名字获取脚本
* @param name
*/
get(name): IScript[] {
get(name): ScriptBase[] {
return this._scripts.filter(script => script.constructor['name'] === name);
}
......
......@@ -11,6 +11,7 @@ import {setProcessMetaLibs} from "../behavior-runtime";
import {registerScripts} from "..";
import {Tween} from "../../2d/tween";
import {Rect} from "./nodes";
import {injectEnv} from "./enviroment";
/**
* 游戏舞台
......@@ -96,15 +97,17 @@ export class GameStage extends Container {
* 开始游戏
*/
start() {
const {options, dataMapping, processes, builtinProcesses, scripts} = this._config;
const {options: {entrySceneView, env}, dataMapping, processes, builtinProcesses, scripts} = this._config;
Stage.addUpdateObj(Tween);
injectEnv(env);
registerScripts(scripts);
this.dataCenter.registerDataMapping(dataMapping);
setProcessMetaLibs(processes, builtinProcesses);
const entryViewName = options.entrySceneView;
let entryViewConfig = this.getViewConfigByName(entryViewName);
let entryViewConfig = this.getViewConfigByName(entrySceneView);
if (entryViewConfig) {
let sceneEntry = instantiate(entryViewConfig);
this._sceneContainer.push(sceneEntry);
......@@ -136,7 +139,7 @@ export class GameStage extends Container {
case 'push':
case 'replace':
case 'popAll':
if(options.center){
if (options.center) {
view.horizonCenter = 0;
view.verticalCenter = 0;
}
......
/**
* Created by rockyl on 2019-11-21.
*/
export let env = {};
export function injectEnv(data){
for(let {name, value} of data){
env[name] = value;
}
}
......@@ -3,3 +3,4 @@
*/
export * from './GameStage'
export * from './enviroment'
......@@ -12,7 +12,7 @@ class ShapeBase extends Shape {
protected __fieldDirty = true;
@dirtyFieldDetector
fillColor: any = 0;
fillColor: any = 'white';
@dirtyFieldDetector
strokeColor: any = 0;
@dirtyFieldDetector
......
......@@ -56,8 +56,8 @@ function instantiateView(config) {
}
function instantiateScript(node, ScriptConfig) {
const {script: scriptName, properties, disabled} = ScriptConfig;
const script = node.scriptsProxy.add(scriptName, properties, disabled);
const {script: scriptName, props, disabled} = ScriptConfig;
const script = node.scriptsProxy.add(scriptName, props, disabled);
}
function injectProperties(target, source) {
......
......@@ -5,6 +5,9 @@
export * from './launcher'
export * from './decorators/scripts'
export * from './decorators/events'
export * from './utils'
export * from './decorators'
export * from './game-warpper'
import {instantiate} from './game-warpper/view-interpreter'
export {
......
/**
* Created by rockyl on 2019-11-22.
*/
export * from './utils'
......@@ -53,3 +53,78 @@ export function getDataByPath(scope, path, throwException?){
}
}
}
/**
* 属性注入方法
* @param target 目标对象
* @param data 被注入对象
* @param callback 自定义注入方法
* @param ignoreMethod 是否忽略方法
* @param ignoreNull 是否忽略Null字段
*
* @return 是否有字段注入
*/
export function injectProp(target: any, data?: any, callback?: Function, ignoreMethod: boolean = true, ignoreNull: boolean = true): boolean {
if (!target || !data) {
return false;
}
let result = false;
for (let key in data) {
let value: any = data[key];
if ((!ignoreMethod || typeof value != 'function') && (!ignoreNull || value != null) && key.indexOf('_') !== 0 && key.indexOf('$') !== 0) {
if (callback) {
callback(target, key, value);
} else {
try {
target[key] = value;
} catch (e) {
}
}
result = true;
}
}
return result;
}
/**
* 属性拷贝
* @param target
* @param data
* @param config
*/
export function copyProp(target, data, config?) {
if (data) {
for (let key in config) {
let valueConfig = config[key];
if (Array.isArray(valueConfig)) {
target[key] = {};
for (let field of valueConfig) {
target[key][field] = data[key][field];
}
} else if (typeof valueConfig === 'string') {
target[valueConfig] = data[valueConfig];
} else if (typeof valueConfig === 'object') {
target[key] = {};
copyProp(target[key], data[key], valueConfig)
}
}
}
}
/**
* 对象转query字符串
* @param obj
*/
export function obj2query(obj: any): string {
if (!obj) {
return '';
}
let arr: string[] = [];
for (let key in obj) {
arr.push(key + '=' + obj[key]);
}
return arr.join('&');
}
......@@ -6,6 +6,7 @@
"sourceMap": true,
"removeComments": true,
"noEmitOnError": true,
"noEmitHelpers": true,
"declarationDir": "types",
"declaration": true,
"experimentalDecorators": true,
......
......@@ -4005,7 +4005,7 @@ ts-loader@^4.0.0:
micromatch "^3.1.4"
semver "^5.0.1"
tslib@1.10.0, tslib@^1.9.0:
tslib@1.10.0, tslib@^1.10.0, tslib@^1.9.0:
version "1.10.0"
resolved "https://registry.npm.taobao.org/tslib/download/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a"
integrity sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment