Commit af6a8e74 authored by rockyl's avatar rockyl

提交

parent 8f20e2d8
This diff is collapsed.
This diff is collapsed.
......@@ -3,6 +3,7 @@ import {DisplayObject} from "./DisplayObject";
import {devicePixelRatio} from "../const";
let container;
let el;
/**
* 此类对于需要在canvas上放置html其他类型元素的时候非常有用<br/>
......@@ -87,6 +88,8 @@ export class FloatDisplay extends DisplayObject {
container.style.position = "absolute";
container.style.left = "0";
container.style.top = "0";
container.style.fontSize = '30px';
container.style.lineHeight = 'normal';
s.stage.rootDiv.appendChild(container);//, s.stage.rootDiv.childNodes[0]
}
if (s._htmlElement) {
......@@ -126,7 +129,11 @@ export class FloatDisplay extends DisplayObject {
let s = this;
let she: any;
if (typeof (htmlElement) == "string") {
she = document.getElementById(htmlElement);
if (!el) {
el = document.createElement('div');
}
el.innerHTML = htmlElement;
she = el.children[0];
} else if (htmlElement._instanceType == "Video") {
she = htmlElement.media;
} else {
......
......@@ -676,7 +676,12 @@ export class TextField extends Sprite {
}
ctx.fillText(line, 0, y, maxW);
} else {
let x = 0;
let lineWidth = 0;
for (let char of line) {
let charWidth = measureChar(char);
lineWidth += charWidth;
}
let x = -lineWidth / 2;
for (let j = 0, lj = line.length; j < lj; j++) {
const char = line[j];
let style = s.getStyle(index);
......
......@@ -20,9 +20,11 @@ export class Process {
private _meta;
private _target;
private _originProps;
private _scope: any;
constructor(id) {
this.id = id;
this._scope = {};
}
get processConfig() {
......@@ -37,6 +39,10 @@ export class Process {
return this._sequence;
}
get scope() {
return this._scope;
}
init(context) {
const {vm, parent, sequence, id, target} = context;
this._vm = vm;
......@@ -104,19 +110,19 @@ export class Process {
if (metaConfig.script.indexOf(linkScheme) === 0) {
func = this._vm.getScript(metaConfig.script.replace(linkScheme, ''));
} else {
func = new Function('args', 'props', 'target', 'global', 'vm', warpAsyncScript(metaConfig.script));
func = new Function('args', 'props', 'target', 'global', 'vm', 'scope', warpAsyncScript(metaConfig.script));
}
if (func) {
let globalContext = this._vm.globalContext;
globalContext.gameStage = engine.gameStage;
globalContext.dataCenter = engine.gameStage.dataCenter;
globalContext.env = engine.env;
result = await func(payload, this._config.props, this._target, globalContext, this._vm);
if (log){
result = await func(payload, this._config.props, this._target, globalContext, this._vm, this._parent.scope);
if (log) {
console.log(`[${this._vm.id}:${this.id}] output: <${result.type}>`, result.payload);
}
} else {
if (log){
if (log) {
console.log('script lose');
}
}
......@@ -214,6 +220,9 @@ export class Process {
case 'static':
props[key] = name;
break;
case 'scope':
props[key] = getDataByPath(this._parent.scope, name);
break;
case 'arguments':
props[key] = args ? getDataByPath(args, name) : undefined;
break;
......
......@@ -13,8 +13,7 @@ import {Rect} from "./nodes";
import {injectEnv} from "./enviroment";
import {Toast} from "./Toast";
import {arrayFind} from "../utils";
import {registerCustomModuleAssets, registerScripts} from "..";
import {registerCustomModuleFromConfig} from "./custom-module";
import {registerCustomModules, registerScripts} from "..";
/**
* 游戏舞台
......@@ -150,7 +149,7 @@ export class GameStage extends Container {
//registerScripts(scripts);
//registerCustomModuleFromConfig(customs);
registerCustomModuleAssets(customs);
registerCustomModules(customs);
if(dataMapping){
this.dataCenter.registerDataMapping(dataMapping);
......
......@@ -11,9 +11,10 @@ const customMap = {};
* 注册自定义模块素材映射
* @param customs
*/
export function registerCustomModuleAssets(customs) {
export function registerCustomModules(customs) {
for (let custom of customs) {
customMap[custom.id].assets = custom.assets;
customMap[custom.id].props = custom.props;
}
}
......@@ -87,3 +88,11 @@ export function resolveCustomAsset(id, uuid) {
return config;
}
}
/**
* 获取配置参数
* @param id
*/
export function getProps(id) {
return customMap[id].props;
}
/**
* Created by rockyl on 2020-01-07.
*/
import {FloatDisplay} from "../../../2d/display";
export class HtmlView extends FloatDisplay{
}
......@@ -61,12 +61,14 @@ export class Label extends TextField {
if (this._htmlText != value) {
this._htmlText = value;
let matchResult = value.match(ESCAPE_REG_EXP);
if(this._htmlText){
let matchResult = value.match(ESCAPE_REG_EXP);
if (matchResult) {
this.dealEscape(value, matchResult, this.onHtmlMutated);
} else {
this.text = htmlToPureText(value);
if (matchResult) {
this.dealEscape(value, matchResult, this.onHtmlMutated);
} else {
this.text = htmlToPureText(value);
}
}
}
}
......
......@@ -9,3 +9,4 @@ export * from './TextInput'
export * from './ScrollView'
export * from './ScrollList'
export * from './BitmapText'
export * from './HtmlView'
......@@ -3,7 +3,7 @@
*/
import {Container} from "../../2d/display";
import {Rect, Image, Label, Circle, ScrollView, TextInput, ScrollList, BitmapText} from "./nodes";
import {Rect, Image, Label, Circle, ScrollView, TextInput, ScrollList, BitmapText, HtmlView} from "./nodes";
import {injectProperties, instantiateScript,} from "../utils";
const nodeTypeMapping = {
......@@ -16,6 +16,7 @@ const nodeTypeMapping = {
scrollView: ScrollView,
scrollList: ScrollList,
bitmapText: BitmapText,
htmlView: HtmlView,
};
export function registerNodeType(name, def) {
......@@ -42,15 +43,6 @@ function instantiateView(config) {
node.__originConfig = config;
injectProperties(node, properties);
if (scripts && scripts.length > 0) {
for (let scriptConfig of scripts) {
instantiateScript(node, scriptConfig);
}
}
if (events) {
node.eventsProxy.start(events);
}
if (children && children.length > 0) {
for (let childConfig of children) {
const childNode = instantiateView(childConfig);
......@@ -60,5 +52,14 @@ function instantiateView(config) {
}
}
if (scripts && scripts.length > 0) {
for (let scriptConfig of scripts) {
instantiateScript(node, scriptConfig);
}
}
if (events && node.eventsProxy) {
node.eventsProxy.start(events);
}
return node;
}
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