@eva/plugin-renderer-tiling-sprite 2.1.0-beta.3 → 2.1.0-beta.4
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/dist/EVA.plugin.renderer.tilingSprite.js +271 -0
- package/dist/EVA.plugin.renderer.tilingSprite.min.js +1 -0
- package/dist/plugin-renderer-tiling-sprite.cjs.js +222 -0
- package/dist/plugin-renderer-tiling-sprite.cjs.prod.js +1 -0
- package/dist/plugin-renderer-tiling-sprite.d.ts +95 -0
- package/dist/plugin-renderer-tiling-sprite.esm.js +217 -0
- package/package.json +4 -4
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
|
|
2
|
+
globalThis.EVA = globalThis.EVA || {};
|
|
3
|
+
globalThis.EVA.plugin = globalThis.EVA.plugin || {};
|
|
4
|
+
globalThis.EVA.plugin.renderer = globalThis.EVA.plugin.renderer || {};
|
|
5
|
+
var _EVA_IIFE_tilingSprite = function (exports, eva_js, pluginRenderer, rendererAdapter) {
|
|
6
|
+
'use strict';
|
|
7
|
+
function __decorate(decorators, target, key, desc) {
|
|
8
|
+
var c = arguments.length,
|
|
9
|
+
r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
|
|
10
|
+
d;
|
|
11
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
12
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
13
|
+
}
|
|
14
|
+
function __metadata(metadataKey, metadataValue) {
|
|
15
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
|
16
|
+
}
|
|
17
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
18
|
+
function adopt(value) {
|
|
19
|
+
return value instanceof P ? value : new P(function (resolve) {
|
|
20
|
+
resolve(value);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
24
|
+
function fulfilled(value) {
|
|
25
|
+
try {
|
|
26
|
+
step(generator.next(value));
|
|
27
|
+
} catch (e) {
|
|
28
|
+
reject(e);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function rejected(value) {
|
|
32
|
+
try {
|
|
33
|
+
step(generator["throw"](value));
|
|
34
|
+
} catch (e) {
|
|
35
|
+
reject(e);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function step(result) {
|
|
39
|
+
result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
|
|
40
|
+
}
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
45
|
+
var e = new Error(message);
|
|
46
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
47
|
+
};
|
|
48
|
+
function __rest(s, e) {
|
|
49
|
+
var t = {};
|
|
50
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
|
|
51
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
52
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
|
|
53
|
+
}
|
|
54
|
+
return t;
|
|
55
|
+
}
|
|
56
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
57
|
+
var e = new Error(message);
|
|
58
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
59
|
+
};
|
|
60
|
+
class SymbolKeysNotSupportedError extends Error {
|
|
61
|
+
constructor() {
|
|
62
|
+
super('Symbol keys are not supported yet!');
|
|
63
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const IDE_PROPERTY_METADATA = 'IDE_PROPERTY_METADATA';
|
|
67
|
+
function transformBasicType(type) {
|
|
68
|
+
if (type === String) {
|
|
69
|
+
return 'string';
|
|
70
|
+
}
|
|
71
|
+
if (type === Number) {
|
|
72
|
+
return 'number';
|
|
73
|
+
}
|
|
74
|
+
if (type === Boolean) {
|
|
75
|
+
return 'boolean';
|
|
76
|
+
}
|
|
77
|
+
return 'unknown';
|
|
78
|
+
}
|
|
79
|
+
function defineLegacyIDEProp(target, propertyKey, patch) {
|
|
80
|
+
const constructor = target.constructor;
|
|
81
|
+
const current = constructor.IDEProps || {};
|
|
82
|
+
current[propertyKey] = _extends(_extends({
|
|
83
|
+
key: propertyKey
|
|
84
|
+
}, current[propertyKey]), patch);
|
|
85
|
+
constructor.IDEProps = current;
|
|
86
|
+
}
|
|
87
|
+
function defineTypes(target, key, options, returnTypeFunction) {
|
|
88
|
+
let type = Reflect.getMetadata('design:type', target, key);
|
|
89
|
+
let isArray = type === Array;
|
|
90
|
+
const str = transformBasicType(type);
|
|
91
|
+
if (str !== 'unknown') {
|
|
92
|
+
type = str;
|
|
93
|
+
}
|
|
94
|
+
if (returnTypeFunction) {
|
|
95
|
+
const returnType = returnTypeFunction();
|
|
96
|
+
if (Array.isArray(returnType)) {
|
|
97
|
+
isArray = true;
|
|
98
|
+
type = returnType[0];
|
|
99
|
+
} else {
|
|
100
|
+
type = returnType;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const properties = Reflect.getMetadata(IDE_PROPERTY_METADATA, target.constructor) || {};
|
|
104
|
+
const current = properties[key] || {};
|
|
105
|
+
const property = _extends(_extends(_extends({}, current), {
|
|
106
|
+
type,
|
|
107
|
+
isArray: isArray
|
|
108
|
+
}), options);
|
|
109
|
+
properties[key] = property;
|
|
110
|
+
Reflect.defineMetadata(IDE_PROPERTY_METADATA, properties, target.constructor);
|
|
111
|
+
const legacyProperty = __rest(property, ["isArray"]);
|
|
112
|
+
defineLegacyIDEProp(target, key, legacyProperty);
|
|
113
|
+
}
|
|
114
|
+
function type(type) {
|
|
115
|
+
return Field({
|
|
116
|
+
type
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function step(step) {
|
|
120
|
+
return Field({
|
|
121
|
+
step
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function getTypeDecoratorParams(returnTypeFuncOrOptions, maybeOptions) {
|
|
125
|
+
if (typeof returnTypeFuncOrOptions === 'function') {
|
|
126
|
+
return {
|
|
127
|
+
returnTypeFunc: returnTypeFuncOrOptions,
|
|
128
|
+
options: maybeOptions || {}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
options: returnTypeFuncOrOptions || {}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
function Field(returnTypeFunction, maybeOptions) {
|
|
136
|
+
return (target, propertyKey) => {
|
|
137
|
+
if (typeof propertyKey === 'symbol') {
|
|
138
|
+
throw new SymbolKeysNotSupportedError();
|
|
139
|
+
}
|
|
140
|
+
const {
|
|
141
|
+
options,
|
|
142
|
+
returnTypeFunc
|
|
143
|
+
} = getTypeDecoratorParams(returnTypeFunction, maybeOptions);
|
|
144
|
+
defineTypes(target, propertyKey, options, returnTypeFunc);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
var ExecuteMode;
|
|
148
|
+
(function (ExecuteMode) {
|
|
149
|
+
ExecuteMode[ExecuteMode["Edit"] = 2] = "Edit";
|
|
150
|
+
ExecuteMode[ExecuteMode["Game"] = 4] = "Game";
|
|
151
|
+
ExecuteMode[ExecuteMode["All"] = 6] = "All";
|
|
152
|
+
})(ExecuteMode || (ExecuteMode = {}));
|
|
153
|
+
class TilingSprite$2 extends eva_js.Component {
|
|
154
|
+
constructor() {
|
|
155
|
+
super(...arguments);
|
|
156
|
+
this.resource = '';
|
|
157
|
+
this.tileScale = {
|
|
158
|
+
x: 1,
|
|
159
|
+
y: 1
|
|
160
|
+
};
|
|
161
|
+
this.tilePosition = {
|
|
162
|
+
x: 0,
|
|
163
|
+
y: 0
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
init(obj) {
|
|
167
|
+
if (obj) {
|
|
168
|
+
this.resource = obj.resource;
|
|
169
|
+
this.tileScale = obj.tileScale;
|
|
170
|
+
this.tilePosition = obj.tilePosition;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
TilingSprite$2.componentName = 'TilingSprite';
|
|
175
|
+
__decorate([type('string'), __metadata("design:type", String)], TilingSprite$2.prototype, "resource", void 0);
|
|
176
|
+
__decorate([type('vector2'), step(0.1), __metadata("design:type", Object)], TilingSprite$2.prototype, "tileScale", void 0);
|
|
177
|
+
__decorate([type('vector2'), step(1), __metadata("design:type", Object)], TilingSprite$2.prototype, "tilePosition", void 0);
|
|
178
|
+
let TilingSprite = class TilingSprite extends pluginRenderer.Renderer {
|
|
179
|
+
constructor() {
|
|
180
|
+
super(...arguments);
|
|
181
|
+
this.name = 'TilingSprite';
|
|
182
|
+
this.imgs = {};
|
|
183
|
+
}
|
|
184
|
+
init() {
|
|
185
|
+
this.renderSystem = this.game.getSystem(pluginRenderer.RendererSystem);
|
|
186
|
+
this.renderSystem.rendererManager.register(this);
|
|
187
|
+
}
|
|
188
|
+
rendererUpdate(gameObject) {
|
|
189
|
+
const {
|
|
190
|
+
width,
|
|
191
|
+
height
|
|
192
|
+
} = gameObject.transform.size;
|
|
193
|
+
const img = this.imgs[gameObject.id];
|
|
194
|
+
if (img) {
|
|
195
|
+
img.tilingSprite.width = width;
|
|
196
|
+
img.tilingSprite.height = height;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
componentChanged(changed) {
|
|
200
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
201
|
+
const gameObjectId = changed.gameObject.id;
|
|
202
|
+
if (changed.componentName === 'TilingSprite') {
|
|
203
|
+
const component = changed.component;
|
|
204
|
+
if (changed.type === eva_js.OBSERVER_TYPE.ADD) {
|
|
205
|
+
const sprite = new rendererAdapter.TilingSprite(null);
|
|
206
|
+
this.imgs[changed.gameObject.id] = sprite;
|
|
207
|
+
this.containerManager.getContainer(changed.gameObject.id).addChildAt(sprite.tilingSprite, 0);
|
|
208
|
+
this.setProp(changed.gameObject.id, component);
|
|
209
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
210
|
+
const {
|
|
211
|
+
data
|
|
212
|
+
} = yield eva_js.resource.getResource(component.resource);
|
|
213
|
+
if (!this.validateAsyncId(gameObjectId, asyncId)) return;
|
|
214
|
+
if (!data) {
|
|
215
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
sprite.image = data.image;
|
|
219
|
+
} else if (changed.type === eva_js.OBSERVER_TYPE.CHANGE) {
|
|
220
|
+
if (changed.prop.prop[0] === 'resource') {
|
|
221
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
222
|
+
const {
|
|
223
|
+
data
|
|
224
|
+
} = yield eva_js.resource.getResource(component.resource);
|
|
225
|
+
if (!this.validateAsyncId(gameObjectId, asyncId)) return;
|
|
226
|
+
if (!data) {
|
|
227
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
this.imgs[changed.gameObject.id].image = data.image;
|
|
231
|
+
} else {
|
|
232
|
+
this.setProp(changed.gameObject.id, component);
|
|
233
|
+
}
|
|
234
|
+
} else if (changed.type === eva_js.OBSERVER_TYPE.REMOVE) {
|
|
235
|
+
this.increaseAsyncId(gameObjectId);
|
|
236
|
+
const sprite = this.imgs[changed.gameObject.id];
|
|
237
|
+
this.containerManager.getContainer(changed.gameObject.id).removeChild(sprite.tilingSprite);
|
|
238
|
+
sprite.tilingSprite.destroy({
|
|
239
|
+
children: true
|
|
240
|
+
});
|
|
241
|
+
delete this.imgs[changed.gameObject.id];
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
setProp(id, component) {
|
|
247
|
+
this.imgs[id].tilingSprite.tilePosition = component.tilePosition;
|
|
248
|
+
this.imgs[id].tilingSprite.tileScale = component.tileScale;
|
|
249
|
+
}
|
|
250
|
+
};
|
|
251
|
+
TilingSprite = __decorate([eva_js.decorators.componentObserver({
|
|
252
|
+
TilingSprite: [{
|
|
253
|
+
prop: ['resource'],
|
|
254
|
+
deep: false
|
|
255
|
+
}, {
|
|
256
|
+
prop: ['tileScale'],
|
|
257
|
+
deep: true
|
|
258
|
+
}, {
|
|
259
|
+
prop: ['tilePosition'],
|
|
260
|
+
deep: true
|
|
261
|
+
}]
|
|
262
|
+
})], TilingSprite);
|
|
263
|
+
var TilingSprite$1 = TilingSprite;
|
|
264
|
+
exports.TilingSprite = TilingSprite$2;
|
|
265
|
+
exports.TilingSpriteSystem = TilingSprite$1;
|
|
266
|
+
Object.defineProperty(exports, '__esModule', {
|
|
267
|
+
value: true
|
|
268
|
+
});
|
|
269
|
+
return exports;
|
|
270
|
+
}({}, EVA, EVA.plugin.renderer, EVA.rendererAdapter);
|
|
271
|
+
globalThis.EVA.plugin.renderer.tilingSprite = globalThis.EVA.plugin.renderer.tilingSprite || _EVA_IIFE_tilingSprite;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},_extends.apply(null,arguments)}globalThis.EVA=globalThis.EVA||{},globalThis.EVA.plugin=globalThis.EVA.plugin||{},globalThis.EVA.plugin.renderer=globalThis.EVA.plugin.renderer||{};var _EVA_IIFE_tilingSprite=function(e,t,r,i){"use strict";function n(e,t,r,i){var n,o=arguments.length,s=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,r,i);else for(var c=e.length-1;c>=0;c--)(n=e[c])&&(s=(o<3?n(s):o>3?n(t,r,s):n(t,r))||s);return o>3&&s&&Object.defineProperty(t,r,s),s}function o(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function s(e,t,r,i){return new(r||(r=Promise))(function(n,o){function s(e){try{l(i.next(e))}catch(e){o(e)}}function c(e){try{l(i.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?n(e.value):(t=e.value,t instanceof r?t:new r(function(e){e(t)})).then(s,c)}l((i=i.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError,"function"==typeof SuppressedError&&SuppressedError;class c extends Error{constructor(){super("Symbol keys are not supported yet!"),Object.setPrototypeOf(this,new.target.prototype)}}const l="IDE_PROPERTY_METADATA";function a(e,t,r,i){let n=Reflect.getMetadata("design:type",e,t),o=n===Array;const s=function(e){return e===String?"string":e===Number?"number":e===Boolean?"boolean":"unknown"}(n);if("unknown"!==s&&(n=s),i){const e=i();Array.isArray(e)?(o=!0,n=e[0]):n=e}const c=Reflect.getMetadata(l,e.constructor)||{},a=_extends(_extends(_extends({},c[t]||{}),{type:n,isArray:o}),r);c[t]=a,Reflect.defineMetadata(l,c,e.constructor);!function(e,t,r){const i=e.constructor,n=i.IDEProps||{};n[t]=_extends(_extends({key:t},n[t]),r),i.IDEProps=n}(e,t,function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&t.indexOf(i)<0&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var n=0;for(i=Object.getOwnPropertySymbols(e);n<i.length;n++)t.indexOf(i[n])<0&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]])}return r}(a,["isArray"]))}function p(e){return d({type:e})}function u(e){return d({step:e})}function d(e,t){return(r,i)=>{if("symbol"==typeof i)throw new c;const{options:n,returnTypeFunc:o}=function(e,t){return"function"==typeof e?{returnTypeFunc:e,options:t||{}}:{options:e||{}}}(e,t);a(r,i,n,o)}}var g;!function(e){e[e.Edit=2]="Edit",e[e.Game=4]="Game",e[e.All=6]="All"}(g||(g={}));class f extends t.Component{constructor(){super(...arguments),this.resource="",this.tileScale={x:1,y:1},this.tilePosition={x:0,y:0}}init(e){e&&(this.resource=e.resource,this.tileScale=e.tileScale,this.tilePosition=e.tilePosition)}}f.componentName="TilingSprite",n([p("string"),o("design:type",String)],f.prototype,"resource",void 0),n([p("vector2"),u(.1),o("design:type",Object)],f.prototype,"tileScale",void 0),n([p("vector2"),u(1),o("design:type",Object)],f.prototype,"tilePosition",void 0);let y=class extends r.Renderer{constructor(){super(...arguments),this.name="TilingSprite",this.imgs={}}init(){this.renderSystem=this.game.getSystem(r.RendererSystem),this.renderSystem.rendererManager.register(this)}rendererUpdate(e){const{width:t,height:r}=e.transform.size,i=this.imgs[e.id];i&&(i.tilingSprite.width=t,i.tilingSprite.height=r)}componentChanged(e){return s(this,void 0,void 0,function*(){const r=e.gameObject.id;if("TilingSprite"===e.componentName){const n=e.component;if(e.type===t.OBSERVER_TYPE.ADD){const o=new i.TilingSprite(null);this.imgs[e.gameObject.id]=o,this.containerManager.getContainer(e.gameObject.id).addChildAt(o.tilingSprite,0),this.setProp(e.gameObject.id,n);const s=this.increaseAsyncId(r),{data:c}=yield t.resource.getResource(n.resource);if(!this.validateAsyncId(r,s))return;if(!c)return void console.error(`GameObject:${e.gameObject.name}'s TilingSprite resource load error`);o.image=c.image}else if(e.type===t.OBSERVER_TYPE.CHANGE)if("resource"===e.prop.prop[0]){const i=this.increaseAsyncId(r),{data:o}=yield t.resource.getResource(n.resource);if(!this.validateAsyncId(r,i))return;if(!o)return void console.error(`GameObject:${e.gameObject.name}'s TilingSprite resource load error`);this.imgs[e.gameObject.id].image=o.image}else this.setProp(e.gameObject.id,n);else if(e.type===t.OBSERVER_TYPE.REMOVE){this.increaseAsyncId(r);const t=this.imgs[e.gameObject.id];this.containerManager.getContainer(e.gameObject.id).removeChild(t.tilingSprite),t.tilingSprite.destroy({children:!0}),delete this.imgs[e.gameObject.id]}}})}setProp(e,t){this.imgs[e].tilingSprite.tilePosition=t.tilePosition,this.imgs[e].tilingSprite.tileScale=t.tileScale}};y=n([t.decorators.componentObserver({TilingSprite:[{prop:["resource"],deep:!1},{prop:["tileScale"],deep:!0},{prop:["tilePosition"],deep:!0}]})],y);var h=y;return e.TilingSprite=f,e.TilingSpriteSystem=h,Object.defineProperty(e,"__esModule",{value:!0}),e}({},EVA,EVA.plugin.renderer,EVA.rendererAdapter);globalThis.EVA.plugin.renderer.tilingSprite=globalThis.EVA.plugin.renderer.tilingSprite||_EVA_IIFE_tilingSprite;
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var eva_js = require('@eva/eva.js');
|
|
6
|
+
var inspectorDecorator = require('@eva/inspector-decorator');
|
|
7
|
+
var pluginRenderer = require('@eva/plugin-renderer');
|
|
8
|
+
var rendererAdapter = require('@eva/renderer-adapter');
|
|
9
|
+
|
|
10
|
+
/******************************************************************************
|
|
11
|
+
Copyright (c) Microsoft Corporation.
|
|
12
|
+
|
|
13
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
14
|
+
purpose with or without fee is hereby granted.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
17
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
18
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
19
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
20
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
21
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
22
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
23
|
+
***************************************************************************** */
|
|
24
|
+
|
|
25
|
+
function __decorate(decorators, target, key, desc) {
|
|
26
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
27
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
28
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
29
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function __metadata(metadataKey, metadataValue) {
|
|
33
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
37
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
38
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
39
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
40
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
41
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
42
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
47
|
+
var e = new Error(message);
|
|
48
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* 平铺精灵组件
|
|
53
|
+
*
|
|
54
|
+
* TilingSprite 组件用于创建可平铺重复的纹理,支持无限滚动效果。
|
|
55
|
+
* 纹理会在指定区域内重复平铺,并可以设置平铺的缩放和偏移,
|
|
56
|
+
* 适用于背景滚动、地面贴图、水面波纹等需要重复纹理的场景。
|
|
57
|
+
*
|
|
58
|
+
* 主要功能:
|
|
59
|
+
* - 纹理平铺重复
|
|
60
|
+
* - 支持平铺缩放
|
|
61
|
+
* - 支持平铺偏移(实现滚动效果)
|
|
62
|
+
* - 性能优化(只渲染可见区域)
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* // 创建滚动背景
|
|
67
|
+
* const background = new GameObject('background');
|
|
68
|
+
* background.addComponent(new TilingSprite({
|
|
69
|
+
* resource: 'bgTile', // 平铺纹理资源
|
|
70
|
+
* tileScale: { x: 1, y: 1 }, // 平铺缩放
|
|
71
|
+
* tilePosition: { x: 0, y: 0 } // 平铺偏移
|
|
72
|
+
* }));
|
|
73
|
+
* background.transform.size = { width: 800, height: 600 };
|
|
74
|
+
*
|
|
75
|
+
* // 实现无限滚动
|
|
76
|
+
* const tilingSprite = background.getComponent('TilingSprite');
|
|
77
|
+
* let offset = 0;
|
|
78
|
+
* setInterval(() => {
|
|
79
|
+
* offset += 1;
|
|
80
|
+
* tilingSprite.tilePosition = { x: offset, y: 0 };
|
|
81
|
+
* }, 16);
|
|
82
|
+
*
|
|
83
|
+
* // 创建水面效果
|
|
84
|
+
* const water = new GameObject('water');
|
|
85
|
+
* water.addComponent(new TilingSprite({
|
|
86
|
+
* resource: 'waterTile',
|
|
87
|
+
* tileScale: { x: 2, y: 2 } // 放大 2 倍平铺
|
|
88
|
+
* }));
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
class TilingSprite$2 extends eva_js.Component {
|
|
92
|
+
constructor() {
|
|
93
|
+
super(...arguments);
|
|
94
|
+
/** 平铺纹理资源名称 */
|
|
95
|
+
this.resource = '';
|
|
96
|
+
/** 平铺缩放比例 */
|
|
97
|
+
this.tileScale = {
|
|
98
|
+
x: 1,
|
|
99
|
+
y: 1,
|
|
100
|
+
};
|
|
101
|
+
/** 平铺位置偏移(用于实现滚动效果) */
|
|
102
|
+
this.tilePosition = {
|
|
103
|
+
x: 0,
|
|
104
|
+
y: 0,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* 初始化组件
|
|
109
|
+
* @param obj - 初始化参数
|
|
110
|
+
* @param obj.resource - 纹理资源名称
|
|
111
|
+
* @param obj.tileScale - 平铺缩放
|
|
112
|
+
* @param obj.tilePosition - 平铺偏移
|
|
113
|
+
*/
|
|
114
|
+
init(obj) {
|
|
115
|
+
if (obj) {
|
|
116
|
+
this.resource = obj.resource;
|
|
117
|
+
this.tileScale = obj.tileScale;
|
|
118
|
+
this.tilePosition = obj.tilePosition;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/** 组件名称 */
|
|
123
|
+
TilingSprite$2.componentName = 'TilingSprite';
|
|
124
|
+
__decorate([
|
|
125
|
+
inspectorDecorator.type('string'),
|
|
126
|
+
__metadata("design:type", String)
|
|
127
|
+
], TilingSprite$2.prototype, "resource", void 0);
|
|
128
|
+
__decorate([
|
|
129
|
+
inspectorDecorator.type('vector2'),
|
|
130
|
+
inspectorDecorator.step(0.1),
|
|
131
|
+
__metadata("design:type", Object)
|
|
132
|
+
], TilingSprite$2.prototype, "tileScale", void 0);
|
|
133
|
+
__decorate([
|
|
134
|
+
inspectorDecorator.type('vector2'),
|
|
135
|
+
inspectorDecorator.step(1),
|
|
136
|
+
__metadata("design:type", Object)
|
|
137
|
+
], TilingSprite$2.prototype, "tilePosition", void 0);
|
|
138
|
+
|
|
139
|
+
let TilingSprite = class TilingSprite extends pluginRenderer.Renderer {
|
|
140
|
+
constructor() {
|
|
141
|
+
super(...arguments);
|
|
142
|
+
this.name = 'TilingSprite';
|
|
143
|
+
this.imgs = {};
|
|
144
|
+
}
|
|
145
|
+
init() {
|
|
146
|
+
this.renderSystem = this.game.getSystem(pluginRenderer.RendererSystem);
|
|
147
|
+
this.renderSystem.rendererManager.register(this);
|
|
148
|
+
}
|
|
149
|
+
rendererUpdate(gameObject) {
|
|
150
|
+
const { width, height } = gameObject.transform.size;
|
|
151
|
+
const img = this.imgs[gameObject.id];
|
|
152
|
+
if (img) {
|
|
153
|
+
img.tilingSprite.width = width;
|
|
154
|
+
img.tilingSprite.height = height;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
componentChanged(changed) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
const gameObjectId = changed.gameObject.id;
|
|
160
|
+
if (changed.componentName === 'TilingSprite') {
|
|
161
|
+
const component = changed.component;
|
|
162
|
+
if (changed.type === eva_js.OBSERVER_TYPE.ADD) {
|
|
163
|
+
const sprite = new rendererAdapter.TilingSprite(null);
|
|
164
|
+
this.imgs[changed.gameObject.id] = sprite;
|
|
165
|
+
this.containerManager.getContainer(changed.gameObject.id).addChildAt(sprite.tilingSprite, 0);
|
|
166
|
+
this.setProp(changed.gameObject.id, component);
|
|
167
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
168
|
+
const { data } = yield eva_js.resource.getResource(component.resource);
|
|
169
|
+
if (!this.validateAsyncId(gameObjectId, asyncId))
|
|
170
|
+
return;
|
|
171
|
+
if (!data) {
|
|
172
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
sprite.image = data.image;
|
|
176
|
+
}
|
|
177
|
+
else if (changed.type === eva_js.OBSERVER_TYPE.CHANGE) {
|
|
178
|
+
if (changed.prop.prop[0] === 'resource') {
|
|
179
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
180
|
+
const { data } = yield eva_js.resource.getResource(component.resource);
|
|
181
|
+
if (!this.validateAsyncId(gameObjectId, asyncId))
|
|
182
|
+
return;
|
|
183
|
+
if (!data) {
|
|
184
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
this.imgs[changed.gameObject.id].image = data.image;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
this.setProp(changed.gameObject.id, component);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else if (changed.type === eva_js.OBSERVER_TYPE.REMOVE) {
|
|
194
|
+
this.increaseAsyncId(gameObjectId);
|
|
195
|
+
const sprite = this.imgs[changed.gameObject.id];
|
|
196
|
+
this.containerManager.getContainer(changed.gameObject.id).removeChild(sprite.tilingSprite);
|
|
197
|
+
sprite.tilingSprite.destroy({
|
|
198
|
+
children: true,
|
|
199
|
+
});
|
|
200
|
+
delete this.imgs[changed.gameObject.id];
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
setProp(id, component) {
|
|
206
|
+
this.imgs[id].tilingSprite.tilePosition = component.tilePosition;
|
|
207
|
+
this.imgs[id].tilingSprite.tileScale = component.tileScale;
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
TilingSprite = __decorate([
|
|
211
|
+
eva_js.decorators.componentObserver({
|
|
212
|
+
TilingSprite: [
|
|
213
|
+
{ prop: ['resource'], deep: false },
|
|
214
|
+
{ prop: ['tileScale'], deep: true },
|
|
215
|
+
{ prop: ['tilePosition'], deep: true },
|
|
216
|
+
],
|
|
217
|
+
})
|
|
218
|
+
], TilingSprite);
|
|
219
|
+
var TilingSprite$1 = TilingSprite;
|
|
220
|
+
|
|
221
|
+
exports.TilingSprite = TilingSprite$2;
|
|
222
|
+
exports.TilingSpriteSystem = TilingSprite$1;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@eva/eva.js"),t=require("@eva/inspector-decorator"),i=require("@eva/plugin-renderer"),r=require("@eva/renderer-adapter");function n(e,t,i,r){var n,o=arguments.length,s=o<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,r);else for(var c=e.length-1;c>=0;c--)(n=e[c])&&(s=(o<3?n(s):o>3?n(t,i,s):n(t,i))||s);return o>3&&s&&Object.defineProperty(t,i,s),s}function o(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function s(e,t,i,r){return new(i||(i=Promise))(function(n,o){function s(e){try{a(r.next(e))}catch(e){o(e)}}function c(e){try{a(r.throw(e))}catch(e){o(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof i?t:new i(function(e){e(t)})).then(s,c)}a((r=r.apply(e,t||[])).next())})}"function"==typeof SuppressedError&&SuppressedError;class c extends e.Component{constructor(){super(...arguments),this.resource="",this.tileScale={x:1,y:1},this.tilePosition={x:0,y:0}}init(e){e&&(this.resource=e.resource,this.tileScale=e.tileScale,this.tilePosition=e.tilePosition)}}c.componentName="TilingSprite",n([t.type("string"),o("design:type",String)],c.prototype,"resource",void 0),n([t.type("vector2"),t.step(.1),o("design:type",Object)],c.prototype,"tileScale",void 0),n([t.type("vector2"),t.step(1),o("design:type",Object)],c.prototype,"tilePosition",void 0);let a=class extends i.Renderer{constructor(){super(...arguments),this.name="TilingSprite",this.imgs={}}init(){this.renderSystem=this.game.getSystem(i.RendererSystem),this.renderSystem.rendererManager.register(this)}rendererUpdate(e){const{width:t,height:i}=e.transform.size,r=this.imgs[e.id];r&&(r.tilingSprite.width=t,r.tilingSprite.height=i)}componentChanged(t){return s(this,void 0,void 0,function*(){const i=t.gameObject.id;if("TilingSprite"===t.componentName){const n=t.component;if(t.type===e.OBSERVER_TYPE.ADD){const o=new r.TilingSprite(null);this.imgs[t.gameObject.id]=o,this.containerManager.getContainer(t.gameObject.id).addChildAt(o.tilingSprite,0),this.setProp(t.gameObject.id,n);const s=this.increaseAsyncId(i),{data:c}=yield e.resource.getResource(n.resource);if(!this.validateAsyncId(i,s))return;if(!c)return void console.error(`GameObject:${t.gameObject.name}'s TilingSprite resource load error`);o.image=c.image}else if(t.type===e.OBSERVER_TYPE.CHANGE)if("resource"===t.prop.prop[0]){const r=this.increaseAsyncId(i),{data:o}=yield e.resource.getResource(n.resource);if(!this.validateAsyncId(i,r))return;if(!o)return void console.error(`GameObject:${t.gameObject.name}'s TilingSprite resource load error`);this.imgs[t.gameObject.id].image=o.image}else this.setProp(t.gameObject.id,n);else if(t.type===e.OBSERVER_TYPE.REMOVE){this.increaseAsyncId(i);const e=this.imgs[t.gameObject.id];this.containerManager.getContainer(t.gameObject.id).removeChild(e.tilingSprite),e.tilingSprite.destroy({children:!0}),delete this.imgs[t.gameObject.id]}}})}setProp(e,t){this.imgs[e].tilingSprite.tilePosition=t.tilePosition,this.imgs[e].tilingSprite.tileScale=t.tileScale}};a=n([e.decorators.componentObserver({TilingSprite:[{prop:["resource"],deep:!1},{prop:["tileScale"],deep:!0},{prop:["tilePosition"],deep:!0}]})],a);var p=a;exports.TilingSprite=c,exports.TilingSpriteSystem=p;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { Component } from '@eva/eva.js';
|
|
2
|
+
import { ComponentChanged } from '@eva/eva.js';
|
|
3
|
+
import { ContainerManager } from '@eva/plugin-renderer';
|
|
4
|
+
import { GameObject } from '@eva/eva.js';
|
|
5
|
+
import { Renderer } from '@eva/plugin-renderer';
|
|
6
|
+
import { RendererManager } from '@eva/plugin-renderer';
|
|
7
|
+
import { RendererSystem } from '@eva/plugin-renderer';
|
|
8
|
+
import { TilingSprite as TilingSprite_2 } from '@eva/renderer-adapter';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 平铺精灵组件
|
|
12
|
+
*
|
|
13
|
+
* TilingSprite 组件用于创建可平铺重复的纹理,支持无限滚动效果。
|
|
14
|
+
* 纹理会在指定区域内重复平铺,并可以设置平铺的缩放和偏移,
|
|
15
|
+
* 适用于背景滚动、地面贴图、水面波纹等需要重复纹理的场景。
|
|
16
|
+
*
|
|
17
|
+
* 主要功能:
|
|
18
|
+
* - 纹理平铺重复
|
|
19
|
+
* - 支持平铺缩放
|
|
20
|
+
* - 支持平铺偏移(实现滚动效果)
|
|
21
|
+
* - 性能优化(只渲染可见区域)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // 创建滚动背景
|
|
26
|
+
* const background = new GameObject('background');
|
|
27
|
+
* background.addComponent(new TilingSprite({
|
|
28
|
+
* resource: 'bgTile', // 平铺纹理资源
|
|
29
|
+
* tileScale: { x: 1, y: 1 }, // 平铺缩放
|
|
30
|
+
* tilePosition: { x: 0, y: 0 } // 平铺偏移
|
|
31
|
+
* }));
|
|
32
|
+
* background.transform.size = { width: 800, height: 600 };
|
|
33
|
+
*
|
|
34
|
+
* // 实现无限滚动
|
|
35
|
+
* const tilingSprite = background.getComponent('TilingSprite');
|
|
36
|
+
* let offset = 0;
|
|
37
|
+
* setInterval(() => {
|
|
38
|
+
* offset += 1;
|
|
39
|
+
* tilingSprite.tilePosition = { x: offset, y: 0 };
|
|
40
|
+
* }, 16);
|
|
41
|
+
*
|
|
42
|
+
* // 创建水面效果
|
|
43
|
+
* const water = new GameObject('water');
|
|
44
|
+
* water.addComponent(new TilingSprite({
|
|
45
|
+
* resource: 'waterTile',
|
|
46
|
+
* tileScale: { x: 2, y: 2 } // 放大 2 倍平铺
|
|
47
|
+
* }));
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare class TilingSprite extends Component<TilingSpriteParams> {
|
|
51
|
+
/** 组件名称 */
|
|
52
|
+
static componentName: string;
|
|
53
|
+
/** 平铺纹理资源名称 */
|
|
54
|
+
resource: string;
|
|
55
|
+
/** 平铺缩放比例 */
|
|
56
|
+
tileScale: TilingSpriteParams['tileScale'];
|
|
57
|
+
/** 平铺位置偏移(用于实现滚动效果) */
|
|
58
|
+
tilePosition: TilingSpriteParams['tilePosition'];
|
|
59
|
+
/**
|
|
60
|
+
* 初始化组件
|
|
61
|
+
* @param obj - 初始化参数
|
|
62
|
+
* @param obj.resource - 纹理资源名称
|
|
63
|
+
* @param obj.tileScale - 平铺缩放
|
|
64
|
+
* @param obj.tilePosition - 平铺偏移
|
|
65
|
+
*/
|
|
66
|
+
init(obj?: TilingSpriteParams): void;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export declare interface TilingSpriteParams {
|
|
70
|
+
resource: string;
|
|
71
|
+
tileScale: {
|
|
72
|
+
x: number;
|
|
73
|
+
y: number;
|
|
74
|
+
};
|
|
75
|
+
tilePosition: {
|
|
76
|
+
x: number;
|
|
77
|
+
y: number;
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export declare class TilingSpriteSystem extends Renderer {
|
|
82
|
+
name: string;
|
|
83
|
+
imgs: {
|
|
84
|
+
[propName: number]: TilingSprite_2;
|
|
85
|
+
};
|
|
86
|
+
renderSystem: RendererSystem;
|
|
87
|
+
rendererManager: RendererManager;
|
|
88
|
+
containerManager: ContainerManager;
|
|
89
|
+
init(): void;
|
|
90
|
+
rendererUpdate(gameObject: GameObject): void;
|
|
91
|
+
componentChanged(changed: ComponentChanged): Promise<void>;
|
|
92
|
+
setProp(id: number, component: TilingSprite): void;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export { }
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { Component, decorators, OBSERVER_TYPE, resource } from '@eva/eva.js';
|
|
2
|
+
import { type, step } from '@eva/inspector-decorator';
|
|
3
|
+
import { Renderer, RendererSystem } from '@eva/plugin-renderer';
|
|
4
|
+
import { TilingSprite as TilingSprite$3 } from '@eva/renderer-adapter';
|
|
5
|
+
|
|
6
|
+
/******************************************************************************
|
|
7
|
+
Copyright (c) Microsoft Corporation.
|
|
8
|
+
|
|
9
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
10
|
+
purpose with or without fee is hereby granted.
|
|
11
|
+
|
|
12
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
13
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
14
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
15
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
16
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
17
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
18
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
19
|
+
***************************************************************************** */
|
|
20
|
+
|
|
21
|
+
function __decorate(decorators, target, key, desc) {
|
|
22
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
23
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
24
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
25
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function __metadata(metadataKey, metadataValue) {
|
|
29
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function __awaiter(thisArg, _arguments, P, generator) {
|
|
33
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
34
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
35
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
36
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
37
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
38
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
43
|
+
var e = new Error(message);
|
|
44
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* 平铺精灵组件
|
|
49
|
+
*
|
|
50
|
+
* TilingSprite 组件用于创建可平铺重复的纹理,支持无限滚动效果。
|
|
51
|
+
* 纹理会在指定区域内重复平铺,并可以设置平铺的缩放和偏移,
|
|
52
|
+
* 适用于背景滚动、地面贴图、水面波纹等需要重复纹理的场景。
|
|
53
|
+
*
|
|
54
|
+
* 主要功能:
|
|
55
|
+
* - 纹理平铺重复
|
|
56
|
+
* - 支持平铺缩放
|
|
57
|
+
* - 支持平铺偏移(实现滚动效果)
|
|
58
|
+
* - 性能优化(只渲染可见区域)
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* // 创建滚动背景
|
|
63
|
+
* const background = new GameObject('background');
|
|
64
|
+
* background.addComponent(new TilingSprite({
|
|
65
|
+
* resource: 'bgTile', // 平铺纹理资源
|
|
66
|
+
* tileScale: { x: 1, y: 1 }, // 平铺缩放
|
|
67
|
+
* tilePosition: { x: 0, y: 0 } // 平铺偏移
|
|
68
|
+
* }));
|
|
69
|
+
* background.transform.size = { width: 800, height: 600 };
|
|
70
|
+
*
|
|
71
|
+
* // 实现无限滚动
|
|
72
|
+
* const tilingSprite = background.getComponent('TilingSprite');
|
|
73
|
+
* let offset = 0;
|
|
74
|
+
* setInterval(() => {
|
|
75
|
+
* offset += 1;
|
|
76
|
+
* tilingSprite.tilePosition = { x: offset, y: 0 };
|
|
77
|
+
* }, 16);
|
|
78
|
+
*
|
|
79
|
+
* // 创建水面效果
|
|
80
|
+
* const water = new GameObject('water');
|
|
81
|
+
* water.addComponent(new TilingSprite({
|
|
82
|
+
* resource: 'waterTile',
|
|
83
|
+
* tileScale: { x: 2, y: 2 } // 放大 2 倍平铺
|
|
84
|
+
* }));
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
class TilingSprite$2 extends Component {
|
|
88
|
+
constructor() {
|
|
89
|
+
super(...arguments);
|
|
90
|
+
/** 平铺纹理资源名称 */
|
|
91
|
+
this.resource = '';
|
|
92
|
+
/** 平铺缩放比例 */
|
|
93
|
+
this.tileScale = {
|
|
94
|
+
x: 1,
|
|
95
|
+
y: 1,
|
|
96
|
+
};
|
|
97
|
+
/** 平铺位置偏移(用于实现滚动效果) */
|
|
98
|
+
this.tilePosition = {
|
|
99
|
+
x: 0,
|
|
100
|
+
y: 0,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 初始化组件
|
|
105
|
+
* @param obj - 初始化参数
|
|
106
|
+
* @param obj.resource - 纹理资源名称
|
|
107
|
+
* @param obj.tileScale - 平铺缩放
|
|
108
|
+
* @param obj.tilePosition - 平铺偏移
|
|
109
|
+
*/
|
|
110
|
+
init(obj) {
|
|
111
|
+
if (obj) {
|
|
112
|
+
this.resource = obj.resource;
|
|
113
|
+
this.tileScale = obj.tileScale;
|
|
114
|
+
this.tilePosition = obj.tilePosition;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** 组件名称 */
|
|
119
|
+
TilingSprite$2.componentName = 'TilingSprite';
|
|
120
|
+
__decorate([
|
|
121
|
+
type('string'),
|
|
122
|
+
__metadata("design:type", String)
|
|
123
|
+
], TilingSprite$2.prototype, "resource", void 0);
|
|
124
|
+
__decorate([
|
|
125
|
+
type('vector2'),
|
|
126
|
+
step(0.1),
|
|
127
|
+
__metadata("design:type", Object)
|
|
128
|
+
], TilingSprite$2.prototype, "tileScale", void 0);
|
|
129
|
+
__decorate([
|
|
130
|
+
type('vector2'),
|
|
131
|
+
step(1),
|
|
132
|
+
__metadata("design:type", Object)
|
|
133
|
+
], TilingSprite$2.prototype, "tilePosition", void 0);
|
|
134
|
+
|
|
135
|
+
let TilingSprite = class TilingSprite extends Renderer {
|
|
136
|
+
constructor() {
|
|
137
|
+
super(...arguments);
|
|
138
|
+
this.name = 'TilingSprite';
|
|
139
|
+
this.imgs = {};
|
|
140
|
+
}
|
|
141
|
+
init() {
|
|
142
|
+
this.renderSystem = this.game.getSystem(RendererSystem);
|
|
143
|
+
this.renderSystem.rendererManager.register(this);
|
|
144
|
+
}
|
|
145
|
+
rendererUpdate(gameObject) {
|
|
146
|
+
const { width, height } = gameObject.transform.size;
|
|
147
|
+
const img = this.imgs[gameObject.id];
|
|
148
|
+
if (img) {
|
|
149
|
+
img.tilingSprite.width = width;
|
|
150
|
+
img.tilingSprite.height = height;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
componentChanged(changed) {
|
|
154
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
155
|
+
const gameObjectId = changed.gameObject.id;
|
|
156
|
+
if (changed.componentName === 'TilingSprite') {
|
|
157
|
+
const component = changed.component;
|
|
158
|
+
if (changed.type === OBSERVER_TYPE.ADD) {
|
|
159
|
+
const sprite = new TilingSprite$3(null);
|
|
160
|
+
this.imgs[changed.gameObject.id] = sprite;
|
|
161
|
+
this.containerManager.getContainer(changed.gameObject.id).addChildAt(sprite.tilingSprite, 0);
|
|
162
|
+
this.setProp(changed.gameObject.id, component);
|
|
163
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
164
|
+
const { data } = yield resource.getResource(component.resource);
|
|
165
|
+
if (!this.validateAsyncId(gameObjectId, asyncId))
|
|
166
|
+
return;
|
|
167
|
+
if (!data) {
|
|
168
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
sprite.image = data.image;
|
|
172
|
+
}
|
|
173
|
+
else if (changed.type === OBSERVER_TYPE.CHANGE) {
|
|
174
|
+
if (changed.prop.prop[0] === 'resource') {
|
|
175
|
+
const asyncId = this.increaseAsyncId(gameObjectId);
|
|
176
|
+
const { data } = yield resource.getResource(component.resource);
|
|
177
|
+
if (!this.validateAsyncId(gameObjectId, asyncId))
|
|
178
|
+
return;
|
|
179
|
+
if (!data) {
|
|
180
|
+
console.error(`GameObject:${changed.gameObject.name}'s TilingSprite resource load error`);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
this.imgs[changed.gameObject.id].image = data.image;
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
this.setProp(changed.gameObject.id, component);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else if (changed.type === OBSERVER_TYPE.REMOVE) {
|
|
190
|
+
this.increaseAsyncId(gameObjectId);
|
|
191
|
+
const sprite = this.imgs[changed.gameObject.id];
|
|
192
|
+
this.containerManager.getContainer(changed.gameObject.id).removeChild(sprite.tilingSprite);
|
|
193
|
+
sprite.tilingSprite.destroy({
|
|
194
|
+
children: true,
|
|
195
|
+
});
|
|
196
|
+
delete this.imgs[changed.gameObject.id];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
setProp(id, component) {
|
|
202
|
+
this.imgs[id].tilingSprite.tilePosition = component.tilePosition;
|
|
203
|
+
this.imgs[id].tilingSprite.tileScale = component.tileScale;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
TilingSprite = __decorate([
|
|
207
|
+
decorators.componentObserver({
|
|
208
|
+
TilingSprite: [
|
|
209
|
+
{ prop: ['resource'], deep: false },
|
|
210
|
+
{ prop: ['tileScale'], deep: true },
|
|
211
|
+
{ prop: ['tilePosition'], deep: true },
|
|
212
|
+
],
|
|
213
|
+
})
|
|
214
|
+
], TilingSprite);
|
|
215
|
+
var TilingSprite$1 = TilingSprite;
|
|
216
|
+
|
|
217
|
+
export { TilingSprite$2 as TilingSprite, TilingSprite$1 as TilingSpriteSystem };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eva/plugin-renderer-tiling-sprite",
|
|
3
|
-
"version": "2.1.0-beta.
|
|
3
|
+
"version": "2.1.0-beta.4",
|
|
4
4
|
"description": "@eva/plugin-renderer-tiling-sprite",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"module": "dist/plugin-renderer-tiling-sprite.esm.js",
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"homepage": "https://eva.js.org",
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"@eva/inspector-decorator": "^2.0.0-beta.0",
|
|
22
|
-
"@eva/plugin-renderer": "2.1.0-beta.
|
|
23
|
-
"@eva/renderer-adapter": "2.1.0-beta.
|
|
24
|
-
"@eva/eva.js": "2.1.0-beta.
|
|
22
|
+
"@eva/plugin-renderer": "2.1.0-beta.4",
|
|
23
|
+
"@eva/renderer-adapter": "2.1.0-beta.4",
|
|
24
|
+
"@eva/eva.js": "2.1.0-beta.4"
|
|
25
25
|
}
|
|
26
26
|
}
|