the-world-engine
Version:
three.js based, unity like game engine for browser
124 lines (118 loc) • 2.91 kB
JavaScript
import { GlobalConfig } from "../../../GlobalConfig";
import { Component } from "../../hierarchy_object/Component";
import { CssSpriteRenderer, ImageRenderingMode } from "../render/CssSpriteRenderer";
import { CssFilter } from "../render/filter/CssFilter";
import { ZaxisSorter } from "../render/ZaxisSorter";
export class SpriteInstance {
Qe;
Ve;
Tn;
$o;
ga;
ca;
constructor(t, e, i, r, s, n) {
this.Qe = t;
this.Ve = e;
this.Tn = i;
this.$o = r;
this.ga = s;
this.ca = n;
}
get width() {
return this.Qe;
}
get height() {
return this.Ve;
}
get position() {
return this.Tn.clone();
}
get rotation() {
return this.$o?.clone();
}
get scale() {
return this.ga?.clone();
}
get centerOffset() {
return this.ca?.clone();
}
}
export class SpriteStaticInstancer extends Component {
va=GlobalConfig.defaultSpriteSrc;
Sa=false;
Ca=0;
on=true;
an=.1;
cn=ImageRenderingMode.Pixelated;
Zs=new CssFilter;
wa=null;
Nh=false;
start() {
this.Nh = true;
this.wa?.call(this);
}
setInstances(t) {
if (!this.Nh) {
this.wa = () => this.setInstances(t);
return;
}
const e = this.engine.instantiater;
for (let i = 0; i < t.length; ++i) {
const r = t[i];
const s = e.buildGameObject(this.gameObject.name + "_instance_" + i, r.position, r.rotation, r.scale).withComponent(CssSpriteRenderer, (t => {
t.asyncSetImageFromPath(this.va);
t.imageWidth = r.width;
t.imageHeight = r.height;
if (r.centerOffset) t.centerOffset = r.centerOffset;
t.pointerEvents = this.on;
t.viewScale = this.an;
t.imageRenderingMode = this.cn;
t.filter.copy(this.Zs);
}));
if (this.Sa) {
s.withComponent(ZaxisSorter, (t => t.offset = this.Ca));
}
this.gameObject.addChildFromBuilder(s);
}
this.destroy();
}
get imageSource() {
return this.va;
}
set imageSource(t) {
this.va = t;
}
get useZindexSorter() {
return this.Sa;
}
set useZindexSorter(t) {
this.Sa = t;
}
get zindexSortOffset() {
return this.Ca;
}
set zindexSortOffset(t) {
this.Ca = t;
}
get pointerEvents() {
return this.on;
}
set pointerEvents(t) {
this.on = t;
}
get viewScale() {
return this.an;
}
set viewScale(t) {
this.an = t;
}
get filter() {
return this.Zs;
}
get imageRenderingMode() {
return this.cn;
}
set imageRenderingMode(t) {
this.cn = t;
}
}