@combos-fun/plugin-renderer-text 0.0.54 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-skill.md +1 -1
- package/dist/plugin-renderer-text.cjs.js +1 -1
- package/dist/plugin-renderer-text.cjs.js.map +1 -1
- package/dist/plugin-renderer-text.cjs.prod.js +1 -1
- package/dist/plugin-renderer-text.esm.js +2 -2
- package/dist/plugin-renderer-text.esm.js.map +1 -1
- package/package.json +5 -5
package/agent-skill.md
CHANGED
|
@@ -26,4 +26,4 @@ score.addComponent(new Text({
|
|
|
26
26
|
|
|
27
27
|
Useful style fields include `fill`, font fields, `align`, wrapping fields, spacing, `stroke`, `dropShadow`, and `backgroundColor`; arbitrary CSS properties are not supported. Wrapping requires both `wordWrap: true` and `wordWrapWidth`.
|
|
28
28
|
|
|
29
|
-
Text or style changes update the Pixi object, and rendered bounds overwrite `
|
|
29
|
+
Text or style changes update the Pixi object, and rendered bounds overwrite `Transform2D.size`. Load custom webfonts before adding the Component. `splitTextStyle` removes `backgroundColor` before Pixi construction; `parseTextColor` accepts numeric colors, `#rgb`, `#rrggbb`/`#rrggbbaa`, and `0x...` strings.
|
|
@@ -122,7 +122,7 @@ let Text = class Text extends pluginRenderer.Renderer {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
setSize(changed) {
|
|
125
|
-
const
|
|
125
|
+
const transform = changed.gameObject.getComponent(pluginRenderer.Transform2D);
|
|
126
126
|
if (!transform)
|
|
127
127
|
return;
|
|
128
128
|
transform.size.width = this.texts[changed.gameObject.id].text.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-renderer-text.cjs.js","sources":["../lib/component.ts","../lib/textStyle.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\nimport type { TextStyleInput } from './textStyle';\n\nexport type { TextStyleInput } from './textStyle';\n\nexport interface TextParams {\n text: string;\n style?: TextStyleInput;\n}\n\nexport default class Text extends Component<TextParams> {\n static componentName: string = 'Text';\n\n @Field({\n type: 'string',\n group: 'Text',\n label: 'text',\n description: 'Visible text content.',\n editor: 'text',\n })\n text: string = '';\n\n // Complex style object — Scene Edit exposes leaf fields later if needed.\n style: TextParams['style'] = {};\n\n init(obj?: TextParams) {\n this.style = { fontSize: 20 };\n if (obj) {\n this.text = obj.text;\n Object.assign(this.style, obj.style);\n }\n }\n}\n","import type { TextStyle } from 'pixi.js';\n\n/** Combos extra on Pixi v8 `TextStyle` — stripped before constructing Pixi Text. */\nexport type TextColor = number | string;\n\nexport type TextStyleInput = Partial<TextStyle> & {\n backgroundColor?: TextColor;\n};\n\nexport function splitTextStyle(style: TextStyleInput = {}): {\n backgroundColor: TextColor | undefined;\n pixiStyle: Partial<TextStyle>;\n} {\n const { backgroundColor, ...pixiStyle } = style;\n return { backgroundColor, pixiStyle };\n}\n\n/**\n * Accept the common agent guesses: `0xffffff`, `\"#fff\"`, `\"#ffffff\"`, `\"0xff0000\"`.\n * Returns `null` when the value cannot be used as a Pixi fill color.\n */\nexport function parseTextColor(color: TextColor | undefined | null): number | null {\n if (color == null) return null;\n if (typeof color === 'number') {\n if (!Number.isFinite(color)) return null;\n return color >>> 0;\n }\n const raw = color.trim();\n if (!raw) return null;\n\n if (raw[0] === '#') {\n const hex = raw.slice(1);\n if (hex.length === 3 && /^[0-9a-fA-F]{3}$/.test(hex)) {\n return parseInt(hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2], 16);\n }\n if ((hex.length === 6 || hex.length === 8) && /^[0-9a-fA-F]+$/.test(hex)) {\n return parseInt(hex.slice(0, 6), 16);\n }\n return null;\n }\n\n if (/^0x[0-9a-fA-F]+$/.test(raw)) {\n return parseInt(raw, 16) >>> 0;\n }\n\n return null;\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\n\nimport { RendererManager, ContainerManager, RendererSystem, Renderer } from '@combos-fun/plugin-renderer';\nimport { Graphics, Text as TextEngine } from '@combos-fun/renderer-adapter';\n\nimport TextComponent from './component';\nimport { parseTextColor, splitTextStyle } from './textStyle';\n\n@decorators.componentObserver({\n Text: ['text', { prop: ['style'], deep: true }],\n})\nexport default class Text extends Renderer {\n static systemName = 'Text';\n name: string = 'Text';\n texts: {\n [propName: number]: {\n text: TextEngine;\n background?: Graphics;\n component: TextComponent;\n };\n } = {};\n renderSystem: RendererSystem;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n init() {\n this.renderSystem = this.game.getSystem(RendererSystem) as RendererSystem;\n this.renderSystem.rendererManager.register(this);\n }\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Text') return;\n if (changed.type === OBSERVER_TYPE.ADD) {\n const component = changed.component as TextComponent;\n const { pixiStyle } = splitTextStyle(component.style);\n const text = new TextEngine(component.text, pixiStyle);\n const container = this.containerManager.getContainer(changed.gameObject.id);\n container.addChildAt(text, 0);\n this.texts[changed.gameObject.id] = {\n text,\n component,\n };\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n const entry = this.texts[changed.gameObject.id];\n const container = this.containerManager.getContainer(changed.gameObject.id);\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n }\n container.removeChild(entry.text);\n entry.text.destroy({ children: true });\n delete this.texts[changed.gameObject.id];\n } else {\n this.change(changed);\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n }\n }\n change(changed: ComponentChanged) {\n const { text, component } = this.texts[changed.gameObject.id];\n if (changed.prop.prop[0] === 'text') {\n text.text = component.text;\n } else if (changed.prop.prop[0] === 'style') {\n const { pixiStyle } = splitTextStyle((changed.component as TextComponent).style);\n Object.assign(text.style, pixiStyle);\n }\n }\n setSize(changed: ComponentChanged) {\n const { transform } = changed.gameObject;\n if (!transform) return;\n transform.size.width = this.texts[changed.gameObject.id].text.width;\n transform.size.height = this.texts[changed.gameObject.id].text.height;\n }\n private syncBackground(id: number) {\n const entry = this.texts[id];\n if (!entry) return;\n const color = parseTextColor(splitTextStyle(entry.component.style).backgroundColor);\n const container = this.containerManager.getContainer(id);\n if (color == null) {\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n entry.background = undefined;\n }\n return;\n }\n if (!entry.background) {\n entry.background = new Graphics();\n container.addChildAt(entry.background, 0);\n }\n const width = entry.text.width;\n const height = entry.text.height;\n entry.background.clear();\n if (width > 0 && height > 0) {\n entry.background.rect(0, 0, width, height).fill({ color });\n }\n }\n}\n"],"names":["Component","__decorate","Field","Text","Renderer","RendererSystem","OBSERVER_TYPE","TextEngine","Graphics","decorators"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-renderer-text.cjs.js","sources":["../lib/component.ts","../lib/textStyle.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\nimport type { TextStyleInput } from './textStyle';\n\nexport type { TextStyleInput } from './textStyle';\n\nexport interface TextParams {\n text: string;\n style?: TextStyleInput;\n}\n\nexport default class Text extends Component<TextParams> {\n static componentName: string = 'Text';\n\n @Field({\n type: 'string',\n group: 'Text',\n label: 'text',\n description: 'Visible text content.',\n editor: 'text',\n })\n text: string = '';\n\n // Complex style object — Scene Edit exposes leaf fields later if needed.\n style: TextParams['style'] = {};\n\n init(obj?: TextParams) {\n this.style = { fontSize: 20 };\n if (obj) {\n this.text = obj.text;\n Object.assign(this.style, obj.style);\n }\n }\n}\n","import type { TextStyle } from 'pixi.js';\n\n/** Combos extra on Pixi v8 `TextStyle` — stripped before constructing Pixi Text. */\nexport type TextColor = number | string;\n\nexport type TextStyleInput = Partial<TextStyle> & {\n backgroundColor?: TextColor;\n};\n\nexport function splitTextStyle(style: TextStyleInput = {}): {\n backgroundColor: TextColor | undefined;\n pixiStyle: Partial<TextStyle>;\n} {\n const { backgroundColor, ...pixiStyle } = style;\n return { backgroundColor, pixiStyle };\n}\n\n/**\n * Accept the common agent guesses: `0xffffff`, `\"#fff\"`, `\"#ffffff\"`, `\"0xff0000\"`.\n * Returns `null` when the value cannot be used as a Pixi fill color.\n */\nexport function parseTextColor(color: TextColor | undefined | null): number | null {\n if (color == null) return null;\n if (typeof color === 'number') {\n if (!Number.isFinite(color)) return null;\n return color >>> 0;\n }\n const raw = color.trim();\n if (!raw) return null;\n\n if (raw[0] === '#') {\n const hex = raw.slice(1);\n if (hex.length === 3 && /^[0-9a-fA-F]{3}$/.test(hex)) {\n return parseInt(hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2], 16);\n }\n if ((hex.length === 6 || hex.length === 8) && /^[0-9a-fA-F]+$/.test(hex)) {\n return parseInt(hex.slice(0, 6), 16);\n }\n return null;\n }\n\n if (/^0x[0-9a-fA-F]+$/.test(raw)) {\n return parseInt(raw, 16) >>> 0;\n }\n\n return null;\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\n\nimport { RendererManager, ContainerManager, RendererSystem, Renderer, Transform2D } from '@combos-fun/plugin-renderer';\nimport { Graphics, Text as TextEngine } from '@combos-fun/renderer-adapter';\n\nimport TextComponent from './component';\nimport { parseTextColor, splitTextStyle } from './textStyle';\n\n@decorators.componentObserver({\n Text: ['text', { prop: ['style'], deep: true }],\n})\nexport default class Text extends Renderer {\n static systemName = 'Text';\n name: string = 'Text';\n texts: {\n [propName: number]: {\n text: TextEngine;\n background?: Graphics;\n component: TextComponent;\n };\n } = {};\n renderSystem: RendererSystem;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n init() {\n this.renderSystem = this.game.getSystem(RendererSystem) as RendererSystem;\n this.renderSystem.rendererManager.register(this);\n }\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Text') return;\n if (changed.type === OBSERVER_TYPE.ADD) {\n const component = changed.component as TextComponent;\n const { pixiStyle } = splitTextStyle(component.style);\n const text = new TextEngine(component.text, pixiStyle);\n const container = this.containerManager.getContainer(changed.gameObject.id);\n container.addChildAt(text, 0);\n this.texts[changed.gameObject.id] = {\n text,\n component,\n };\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n const entry = this.texts[changed.gameObject.id];\n const container = this.containerManager.getContainer(changed.gameObject.id);\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n }\n container.removeChild(entry.text);\n entry.text.destroy({ children: true });\n delete this.texts[changed.gameObject.id];\n } else {\n this.change(changed);\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n }\n }\n change(changed: ComponentChanged) {\n const { text, component } = this.texts[changed.gameObject.id];\n if (changed.prop.prop[0] === 'text') {\n text.text = component.text;\n } else if (changed.prop.prop[0] === 'style') {\n const { pixiStyle } = splitTextStyle((changed.component as TextComponent).style);\n Object.assign(text.style, pixiStyle);\n }\n }\n setSize(changed: ComponentChanged) {\n const transform = changed.gameObject.getComponent(Transform2D);\n if (!transform) return;\n transform.size.width = this.texts[changed.gameObject.id].text.width;\n transform.size.height = this.texts[changed.gameObject.id].text.height;\n }\n private syncBackground(id: number) {\n const entry = this.texts[id];\n if (!entry) return;\n const color = parseTextColor(splitTextStyle(entry.component.style).backgroundColor);\n const container = this.containerManager.getContainer(id);\n if (color == null) {\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n entry.background = undefined;\n }\n return;\n }\n if (!entry.background) {\n entry.background = new Graphics();\n container.addChildAt(entry.background, 0);\n }\n const width = entry.text.width;\n const height = entry.text.height;\n entry.background.clear();\n if (width > 0 && height > 0) {\n entry.background.rect(0, 0, width, height).fill({ color });\n }\n }\n}\n"],"names":["Component","__decorate","Field","Text","Renderer","RendererSystem","OBSERVER_TYPE","TextEngine","Transform2D","Graphics","decorators"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("tslib"),t=require("@combos-fun/engine"),n=require("@combos-fun/inspector-decorator"),r=require("@combos-fun/plugin-renderer"),s=require("@combos-fun/renderer-adapter");let i=class extends t.Component{constructor(){super(...arguments),this.text="",this.style={}}static{this.componentName="Text"}init(e){this.style={fontSize:20},e&&(this.text=e.text,Object.assign(this.style,e.style))}};function o(e={}){const{backgroundColor:t,...n}=e;return{backgroundColor:t,pixiStyle:n}}function c(e){if(null==e)return null;if("number"==typeof e)return Number.isFinite(e)?e>>>0:null;const t=e.trim();if(!t)return null;if("#"===t[0]){const e=t.slice(1);return 3===e.length&&/^[0-9a-fA-F]{3}$/.test(e)?parseInt(e[0]+e[0]+e[1]+e[1]+e[2]+e[2],16):6!==e.length&&8!==e.length||!/^[0-9a-fA-F]+$/.test(e)?null:parseInt(e.slice(0,6),16)}return/^0x[0-9a-fA-F]+$/.test(t)?parseInt(t,16)>>>0:null}e.__decorate([n.Field({type:"string",group:"Text",label:"text",description:"Visible text content.",editor:"text"})],i.prototype,"text",void 0);let a=class extends r.Renderer{constructor(){super(...arguments),this.name="Text",this.texts={}}static{this.systemName="Text"}init(){this.renderSystem=this.game.getSystem(r.RendererSystem),this.renderSystem.rendererManager.register(this)}async componentChanged(e){if("Text"===e.componentName)if(e.type===t.OBSERVER_TYPE.ADD){const t=e.component,{pixiStyle:n}=o(t.style),r=new s.Text(t.text,n);this.containerManager.getContainer(e.gameObject.id).addChildAt(r,0),this.texts[e.gameObject.id]={text:r,component:t},this.setSize(e),this.syncBackground(e.gameObject.id)}else if(e.type===t.OBSERVER_TYPE.REMOVE){const t=this.texts[e.gameObject.id],n=this.containerManager.getContainer(e.gameObject.id);t.background&&(n.removeChild(t.background),t.background.destroy({children:!0})),n.removeChild(t.text),t.text.destroy({children:!0}),delete this.texts[e.gameObject.id]}else this.change(e),this.setSize(e),this.syncBackground(e.gameObject.id)}change(e){const{text:t,component:n}=this.texts[e.gameObject.id];if("text"===e.prop.prop[0])t.text=n.text;else if("style"===e.prop.prop[0]){const{pixiStyle:n}=o(e.component.style);Object.assign(t.style,n)}}setSize(e){const
|
|
1
|
+
"use strict";var e=require("tslib"),t=require("@combos-fun/engine"),n=require("@combos-fun/inspector-decorator"),r=require("@combos-fun/plugin-renderer"),s=require("@combos-fun/renderer-adapter");let i=class extends t.Component{constructor(){super(...arguments),this.text="",this.style={}}static{this.componentName="Text"}init(e){this.style={fontSize:20},e&&(this.text=e.text,Object.assign(this.style,e.style))}};function o(e={}){const{backgroundColor:t,...n}=e;return{backgroundColor:t,pixiStyle:n}}function c(e){if(null==e)return null;if("number"==typeof e)return Number.isFinite(e)?e>>>0:null;const t=e.trim();if(!t)return null;if("#"===t[0]){const e=t.slice(1);return 3===e.length&&/^[0-9a-fA-F]{3}$/.test(e)?parseInt(e[0]+e[0]+e[1]+e[1]+e[2]+e[2],16):6!==e.length&&8!==e.length||!/^[0-9a-fA-F]+$/.test(e)?null:parseInt(e.slice(0,6),16)}return/^0x[0-9a-fA-F]+$/.test(t)?parseInt(t,16)>>>0:null}e.__decorate([n.Field({type:"string",group:"Text",label:"text",description:"Visible text content.",editor:"text"})],i.prototype,"text",void 0);let a=class extends r.Renderer{constructor(){super(...arguments),this.name="Text",this.texts={}}static{this.systemName="Text"}init(){this.renderSystem=this.game.getSystem(r.RendererSystem),this.renderSystem.rendererManager.register(this)}async componentChanged(e){if("Text"===e.componentName)if(e.type===t.OBSERVER_TYPE.ADD){const t=e.component,{pixiStyle:n}=o(t.style),r=new s.Text(t.text,n);this.containerManager.getContainer(e.gameObject.id).addChildAt(r,0),this.texts[e.gameObject.id]={text:r,component:t},this.setSize(e),this.syncBackground(e.gameObject.id)}else if(e.type===t.OBSERVER_TYPE.REMOVE){const t=this.texts[e.gameObject.id],n=this.containerManager.getContainer(e.gameObject.id);t.background&&(n.removeChild(t.background),t.background.destroy({children:!0})),n.removeChild(t.text),t.text.destroy({children:!0}),delete this.texts[e.gameObject.id]}else this.change(e),this.setSize(e),this.syncBackground(e.gameObject.id)}change(e){const{text:t,component:n}=this.texts[e.gameObject.id];if("text"===e.prop.prop[0])t.text=n.text;else if("style"===e.prop.prop[0]){const{pixiStyle:n}=o(e.component.style);Object.assign(t.style,n)}}setSize(e){const t=e.gameObject.getComponent(r.Transform2D);t&&(t.size.width=this.texts[e.gameObject.id].text.width,t.size.height=this.texts[e.gameObject.id].text.height)}syncBackground(e){const t=this.texts[e];if(!t)return;const n=c(o(t.component.style).backgroundColor),r=this.containerManager.getContainer(e);if(null==n)return void(t.background&&(r.removeChild(t.background),t.background.destroy({children:!0}),t.background=void 0));t.background||(t.background=new s.Graphics,r.addChildAt(t.background,0));const i=t.text.width,a=t.text.height;t.background.clear(),i>0&&a>0&&t.background.rect(0,0,i,a).fill({color:n})}};a=e.__decorate([t.decorators.componentObserver({Text:["text",{prop:["style"],deep:!0}]})],a);var d=a;exports.Text=i,exports.TextSystem=d,exports.parseTextColor=c,exports.splitTextStyle=o;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
2
|
import { Component, OBSERVER_TYPE, decorators } from '@combos-fun/engine';
|
|
3
3
|
import { Field } from '@combos-fun/inspector-decorator';
|
|
4
|
-
import { Renderer, RendererSystem } from '@combos-fun/plugin-renderer';
|
|
4
|
+
import { Renderer, RendererSystem, Transform2D } from '@combos-fun/plugin-renderer';
|
|
5
5
|
import { Text as Text$2, Graphics } from '@combos-fun/renderer-adapter';
|
|
6
6
|
|
|
7
7
|
let Text$1 = class Text extends Component {
|
|
@@ -120,7 +120,7 @@ let Text = class Text extends Renderer {
|
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
setSize(changed) {
|
|
123
|
-
const
|
|
123
|
+
const transform = changed.gameObject.getComponent(Transform2D);
|
|
124
124
|
if (!transform)
|
|
125
125
|
return;
|
|
126
126
|
transform.size.width = this.texts[changed.gameObject.id].text.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-renderer-text.esm.js","sources":["../lib/component.ts","../lib/textStyle.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\nimport type { TextStyleInput } from './textStyle';\n\nexport type { TextStyleInput } from './textStyle';\n\nexport interface TextParams {\n text: string;\n style?: TextStyleInput;\n}\n\nexport default class Text extends Component<TextParams> {\n static componentName: string = 'Text';\n\n @Field({\n type: 'string',\n group: 'Text',\n label: 'text',\n description: 'Visible text content.',\n editor: 'text',\n })\n text: string = '';\n\n // Complex style object — Scene Edit exposes leaf fields later if needed.\n style: TextParams['style'] = {};\n\n init(obj?: TextParams) {\n this.style = { fontSize: 20 };\n if (obj) {\n this.text = obj.text;\n Object.assign(this.style, obj.style);\n }\n }\n}\n","import type { TextStyle } from 'pixi.js';\n\n/** Combos extra on Pixi v8 `TextStyle` — stripped before constructing Pixi Text. */\nexport type TextColor = number | string;\n\nexport type TextStyleInput = Partial<TextStyle> & {\n backgroundColor?: TextColor;\n};\n\nexport function splitTextStyle(style: TextStyleInput = {}): {\n backgroundColor: TextColor | undefined;\n pixiStyle: Partial<TextStyle>;\n} {\n const { backgroundColor, ...pixiStyle } = style;\n return { backgroundColor, pixiStyle };\n}\n\n/**\n * Accept the common agent guesses: `0xffffff`, `\"#fff\"`, `\"#ffffff\"`, `\"0xff0000\"`.\n * Returns `null` when the value cannot be used as a Pixi fill color.\n */\nexport function parseTextColor(color: TextColor | undefined | null): number | null {\n if (color == null) return null;\n if (typeof color === 'number') {\n if (!Number.isFinite(color)) return null;\n return color >>> 0;\n }\n const raw = color.trim();\n if (!raw) return null;\n\n if (raw[0] === '#') {\n const hex = raw.slice(1);\n if (hex.length === 3 && /^[0-9a-fA-F]{3}$/.test(hex)) {\n return parseInt(hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2], 16);\n }\n if ((hex.length === 6 || hex.length === 8) && /^[0-9a-fA-F]+$/.test(hex)) {\n return parseInt(hex.slice(0, 6), 16);\n }\n return null;\n }\n\n if (/^0x[0-9a-fA-F]+$/.test(raw)) {\n return parseInt(raw, 16) >>> 0;\n }\n\n return null;\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\n\nimport { RendererManager, ContainerManager, RendererSystem, Renderer } from '@combos-fun/plugin-renderer';\nimport { Graphics, Text as TextEngine } from '@combos-fun/renderer-adapter';\n\nimport TextComponent from './component';\nimport { parseTextColor, splitTextStyle } from './textStyle';\n\n@decorators.componentObserver({\n Text: ['text', { prop: ['style'], deep: true }],\n})\nexport default class Text extends Renderer {\n static systemName = 'Text';\n name: string = 'Text';\n texts: {\n [propName: number]: {\n text: TextEngine;\n background?: Graphics;\n component: TextComponent;\n };\n } = {};\n renderSystem: RendererSystem;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n init() {\n this.renderSystem = this.game.getSystem(RendererSystem) as RendererSystem;\n this.renderSystem.rendererManager.register(this);\n }\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Text') return;\n if (changed.type === OBSERVER_TYPE.ADD) {\n const component = changed.component as TextComponent;\n const { pixiStyle } = splitTextStyle(component.style);\n const text = new TextEngine(component.text, pixiStyle);\n const container = this.containerManager.getContainer(changed.gameObject.id);\n container.addChildAt(text, 0);\n this.texts[changed.gameObject.id] = {\n text,\n component,\n };\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n const entry = this.texts[changed.gameObject.id];\n const container = this.containerManager.getContainer(changed.gameObject.id);\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n }\n container.removeChild(entry.text);\n entry.text.destroy({ children: true });\n delete this.texts[changed.gameObject.id];\n } else {\n this.change(changed);\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n }\n }\n change(changed: ComponentChanged) {\n const { text, component } = this.texts[changed.gameObject.id];\n if (changed.prop.prop[0] === 'text') {\n text.text = component.text;\n } else if (changed.prop.prop[0] === 'style') {\n const { pixiStyle } = splitTextStyle((changed.component as TextComponent).style);\n Object.assign(text.style, pixiStyle);\n }\n }\n setSize(changed: ComponentChanged) {\n const { transform } = changed.gameObject;\n if (!transform) return;\n transform.size.width = this.texts[changed.gameObject.id].text.width;\n transform.size.height = this.texts[changed.gameObject.id].text.height;\n }\n private syncBackground(id: number) {\n const entry = this.texts[id];\n if (!entry) return;\n const color = parseTextColor(splitTextStyle(entry.component.style).backgroundColor);\n const container = this.containerManager.getContainer(id);\n if (color == null) {\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n entry.background = undefined;\n }\n return;\n }\n if (!entry.background) {\n entry.background = new Graphics();\n container.addChildAt(entry.background, 0);\n }\n const width = entry.text.width;\n const height = entry.text.height;\n entry.background.clear();\n if (width > 0 && height > 0) {\n entry.background.rect(0, 0, width, height).fill({ color });\n }\n }\n}\n"],"names":["Text","TextEngine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin-renderer-text.esm.js","sources":["../lib/component.ts","../lib/textStyle.ts","../lib/system.ts"],"sourcesContent":["import { Component } from '@combos-fun/engine';\nimport { Field } from '@combos-fun/inspector-decorator';\nimport type { TextStyleInput } from './textStyle';\n\nexport type { TextStyleInput } from './textStyle';\n\nexport interface TextParams {\n text: string;\n style?: TextStyleInput;\n}\n\nexport default class Text extends Component<TextParams> {\n static componentName: string = 'Text';\n\n @Field({\n type: 'string',\n group: 'Text',\n label: 'text',\n description: 'Visible text content.',\n editor: 'text',\n })\n text: string = '';\n\n // Complex style object — Scene Edit exposes leaf fields later if needed.\n style: TextParams['style'] = {};\n\n init(obj?: TextParams) {\n this.style = { fontSize: 20 };\n if (obj) {\n this.text = obj.text;\n Object.assign(this.style, obj.style);\n }\n }\n}\n","import type { TextStyle } from 'pixi.js';\n\n/** Combos extra on Pixi v8 `TextStyle` — stripped before constructing Pixi Text. */\nexport type TextColor = number | string;\n\nexport type TextStyleInput = Partial<TextStyle> & {\n backgroundColor?: TextColor;\n};\n\nexport function splitTextStyle(style: TextStyleInput = {}): {\n backgroundColor: TextColor | undefined;\n pixiStyle: Partial<TextStyle>;\n} {\n const { backgroundColor, ...pixiStyle } = style;\n return { backgroundColor, pixiStyle };\n}\n\n/**\n * Accept the common agent guesses: `0xffffff`, `\"#fff\"`, `\"#ffffff\"`, `\"0xff0000\"`.\n * Returns `null` when the value cannot be used as a Pixi fill color.\n */\nexport function parseTextColor(color: TextColor | undefined | null): number | null {\n if (color == null) return null;\n if (typeof color === 'number') {\n if (!Number.isFinite(color)) return null;\n return color >>> 0;\n }\n const raw = color.trim();\n if (!raw) return null;\n\n if (raw[0] === '#') {\n const hex = raw.slice(1);\n if (hex.length === 3 && /^[0-9a-fA-F]{3}$/.test(hex)) {\n return parseInt(hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2], 16);\n }\n if ((hex.length === 6 || hex.length === 8) && /^[0-9a-fA-F]+$/.test(hex)) {\n return parseInt(hex.slice(0, 6), 16);\n }\n return null;\n }\n\n if (/^0x[0-9a-fA-F]+$/.test(raw)) {\n return parseInt(raw, 16) >>> 0;\n }\n\n return null;\n}\n","import { decorators, ComponentChanged, OBSERVER_TYPE } from '@combos-fun/engine';\n\nimport { RendererManager, ContainerManager, RendererSystem, Renderer, Transform2D } from '@combos-fun/plugin-renderer';\nimport { Graphics, Text as TextEngine } from '@combos-fun/renderer-adapter';\n\nimport TextComponent from './component';\nimport { parseTextColor, splitTextStyle } from './textStyle';\n\n@decorators.componentObserver({\n Text: ['text', { prop: ['style'], deep: true }],\n})\nexport default class Text extends Renderer {\n static systemName = 'Text';\n name: string = 'Text';\n texts: {\n [propName: number]: {\n text: TextEngine;\n background?: Graphics;\n component: TextComponent;\n };\n } = {};\n renderSystem: RendererSystem;\n rendererManager: RendererManager;\n containerManager: ContainerManager;\n init() {\n this.renderSystem = this.game.getSystem(RendererSystem) as RendererSystem;\n this.renderSystem.rendererManager.register(this);\n }\n async componentChanged(changed: ComponentChanged) {\n if (changed.componentName !== 'Text') return;\n if (changed.type === OBSERVER_TYPE.ADD) {\n const component = changed.component as TextComponent;\n const { pixiStyle } = splitTextStyle(component.style);\n const text = new TextEngine(component.text, pixiStyle);\n const container = this.containerManager.getContainer(changed.gameObject.id);\n container.addChildAt(text, 0);\n this.texts[changed.gameObject.id] = {\n text,\n component,\n };\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n } else if (changed.type === OBSERVER_TYPE.REMOVE) {\n const entry = this.texts[changed.gameObject.id];\n const container = this.containerManager.getContainer(changed.gameObject.id);\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n }\n container.removeChild(entry.text);\n entry.text.destroy({ children: true });\n delete this.texts[changed.gameObject.id];\n } else {\n this.change(changed);\n this.setSize(changed);\n this.syncBackground(changed.gameObject.id);\n }\n }\n change(changed: ComponentChanged) {\n const { text, component } = this.texts[changed.gameObject.id];\n if (changed.prop.prop[0] === 'text') {\n text.text = component.text;\n } else if (changed.prop.prop[0] === 'style') {\n const { pixiStyle } = splitTextStyle((changed.component as TextComponent).style);\n Object.assign(text.style, pixiStyle);\n }\n }\n setSize(changed: ComponentChanged) {\n const transform = changed.gameObject.getComponent(Transform2D);\n if (!transform) return;\n transform.size.width = this.texts[changed.gameObject.id].text.width;\n transform.size.height = this.texts[changed.gameObject.id].text.height;\n }\n private syncBackground(id: number) {\n const entry = this.texts[id];\n if (!entry) return;\n const color = parseTextColor(splitTextStyle(entry.component.style).backgroundColor);\n const container = this.containerManager.getContainer(id);\n if (color == null) {\n if (entry.background) {\n container.removeChild(entry.background);\n entry.background.destroy({ children: true });\n entry.background = undefined;\n }\n return;\n }\n if (!entry.background) {\n entry.background = new Graphics();\n container.addChildAt(entry.background, 0);\n }\n const width = entry.text.width;\n const height = entry.text.height;\n entry.background.clear();\n if (width > 0 && height > 0) {\n entry.background.rect(0, 0, width, height).fill({ color });\n }\n }\n}\n"],"names":["Text","TextEngine"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@combos-fun/plugin-renderer-text",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Text rendering",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "dist/plugin-renderer-text.esm.js",
|
|
@@ -36,10 +36,10 @@
|
|
|
36
36
|
"author": "sun668 <q947692259@gmail.com>",
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"pixi.js": "^8.18.1",
|
|
39
|
-
"@combos-fun/
|
|
40
|
-
"@combos-fun/renderer-adapter": "0.0
|
|
41
|
-
"@combos-fun/
|
|
42
|
-
"@combos-fun/
|
|
39
|
+
"@combos-fun/plugin-renderer": "0.2.0",
|
|
40
|
+
"@combos-fun/renderer-adapter": "0.2.0",
|
|
41
|
+
"@combos-fun/engine": "0.2.0",
|
|
42
|
+
"@combos-fun/inspector-decorator": "0.2.0"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"tsx": "^4.20.3"
|