cb/assets/Script/module/Tool/CtrlFluxayTexture.js
2026-04-09 19:07:54 +08:00

90 lines
2.4 KiB
JavaScript

cc.Class({
extends: cc.Component,
properties: {
m_delayTime: {
default: 0,
},
m_fluxayTime: {
default: 1,
},
m_intervalTime: {
default: 1,
},
m_scale: {
default: 1,
},
m_angle: {
default: 0,
},
m_reviseStartTime: {
default: 0,
},
m_reviseTimeScale: {
default: 1,
},
},
ctor() {
this._time = 0;
},
onLoad() {
this._time -= this.m_delayTime;
let sprite = this.node.getComponent(cc.Sprite);
this._material = sprite.getMaterial(0);
this._material.setProperty("u_scale", this.m_scale);
this._material.setProperty("u_angle", this.m_angle);
this.refreshSpriteFrameData();
},
update(dt) {
if (this._time > (this.m_fluxayTime + this.m_intervalTime)) {
this._time = 0;
}
let u_time = this._time / this.m_fluxayTime;
if (this._time > this.m_fluxayTime) {
u_time = 1 + ((this._time - this.m_fluxayTime) / this.m_intervalTime);
}
if (this.m_reviseTimeScale != null && this.m_reviseStartTime != null) {
u_time = u_time / this.m_reviseTimeScale;
u_time -= this.m_reviseStartTime;
}
this._material.setProperty("u_time", u_time);
this._time += dt;
},
refreshSpriteFrameData() {
let sprite = this.node.getComponent(cc.Sprite);
let material = sprite.getMaterial(0);
let frame = sprite.spriteFrame;
if (frame != null) {
// xMin
let l = frame.uv[0];
// xMax
let r = frame.uv[10];
// yMax
let b = frame.uv[30];
// yMin
let t = frame.uv[50];
// 纹理在合图中的四个边界 uv 坐标
let u_uvOffset = new cc.Vec4(l, t, r, b);
// 纹理是否旋转
let u_uvRotated = frame.isRotated() ? 1.0 : 0.0;
// 设置材质的属性
if (material.getProperty("u_uvOffset") !== undefined) {
material.setProperty("u_uvOffset", u_uvOffset);
}
if (material.getProperty("u_uvRotated") !== undefined) {
material.setProperty("u_uvRotated", u_uvRotated);
}
}
}
});