消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xiaoxiaofangkuaizhen_emojo/tetriWeaponCarrier.patch

104 lines
10 KiB

5 days ago
<EFBFBD><EFBFBD>diff --git a/assets/script/tetriCard/tetriWeaponCarrier.ts b/assets/script/tetriCard/tetriWeaponCarrier.ts
index 9cc3c7e9..2253570d 100644
--- a/assets/script/tetriCard/tetriWeaponCarrier.ts
+++ b/assets/script/tetriCard/tetriWeaponCarrier.ts
@@ -66,6 +66,10 @@ export class tetriWeaponCarrier extends Component {
initRoleFacingFix: number = 0;
private roleNode: Node | null = null;
private roleBaseAbsScaleX: number = 1;
+ /** <EFBFBD>[<EFBFBD>P<EFBFBD>R<EFBFBD><EFBFBD>mYt<EFBFBD>c<EFBFBD>Xig<EFBFBD>m<EFBFBD><EFBFBD>m?*/
+ private _roleCreating = false;
+ /** <EFBFBD>Y@<EFBFBD><EFBFBD>j<EFBFBD>[<EFBFBD>P<EFBFBD>T<EFBFBD><EFBFBD>rGm4d<EFBFBD>__<EFBFBD>|\<EFBFBD>m<EFBFBD>[<EFBFBD>QC~ȓ<EFBFBD>qm<EFBFBD>t?*/
+ private _weaponLoadSeq = 0;
_isBattleScene = false //ē<EFBFBD><EFBFBD><EFBFBD><EFBFBD>W“@i<EFBFBD><EFBFBD>Imȓ? _isCanShoot = true //ē<EFBFBD><EFBFBD>`Y<EFBFBD><EFBFBD><EFBFBD>NOp<EFBFBD>R<EFBFBD>V
@@ -124,6 +128,8 @@ export class tetriWeaponCarrier extends Component {
const role = this.roleNode;
this.weaponNode = null;
this.roleNode = null;
+ this._roleCreating = false;
+ this._weaponLoadSeq++;
// <EFBFBD>Y@<EFBFBD><EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>Pjn<EFBFBD><EFBFBD><EFBFBD>\W<EFBFBD>y<EFBFBD>?<EFBFBD>Y@<EFBFBD><EFBFBD>j<EFBFBD><EFBFBD><EFBFBD>]{<EFBFBD>}\<EFBFBD>Se<EFBFBD><EFBFBD>pye<EFBFBD>Y@<EFBFBD><EFBFBD>jP<EFBFBD><EFBFBD>]m<EFBFBD><EFBFBD><EFBFBD>`W<EFBFBD>y<EFBFBD><EFBFBD><EFBFBD>}<EFBFBD><EFBFBD><EFBFBD>W<EFBFBD>Sp0a<EFBFBD>k<EFBFBD>5g<EFBFBD>z<EFBFBD>t<EFBFBD>uX~W<EFBFBD>GZ"e<EFBFBD>YyO<EFBFBD> ? if (this.timeoutIndex) clearTimeout(this.timeoutIndex as unknown as number);
GEvent.Ins.off(GEvent.ChangeCubeWeaponConfig, this.ChangeCubeWeapon, this)
@@ -189,8 +195,8 @@ export class tetriWeaponCarrier extends Component {
this.roleNode.setScale(conf.scalex, conf.scaley);
const anim = this.roleNode.getChildByName('anim')?.getComponent(sp.Skeleton);
if (anim) {
- anim.setAnimation(0, '<EFBFBD>[nT<EFBFBD>n', true);
anim.setSkin(conf.animSkin);
+ anim.setAnimation(0, '<EFBFBD>[nT<EFBFBD>n', true);
} else {
console.warn('[tetriWeaponCarrier] createRoleNode: Yt<EFBFBD>c<EFBFBD>X prefab <EFBFBD>T<EFBFBD>v anim p/a<EFBFBD>Y<EFBFBD>?, this._config.cubename);
}
@@ -207,7 +213,7 @@ export class tetriWeaponCarrier extends Component {
this.roleBaseAbsScaleX = abs > 1e-6 ? abs : 1;
}
createRoleNode() {
- if (this.roleNode?.isValid) return
+ if (this.roleNode?.isValid || this._roleCreating) return
// O<EFBFBD>X<EFBFBD>[Yt<EFBFBD>c<EFBFBD>Xz<EFBFBD><EFBFBD>PcP<EFBFBD>}\@U setView -> addWeapon<EFBFBD>X<EFBFBD>}<EFBFBD>t'h<EFBFBD>t<EFBFBD>t<EFBFBD><EFBFBD>} Yt<EFBFBD>c<EFBFBD>X/anim<EFBFBD><EFBFBD>}OW<EFBFBD>y<EFBFBD>?<EFBFBD>Y@<EFBFBD><EFBFBD>j<EFBFBD>? if (!this._config) {
console.error('[tetriWeaponCarrier] createRoleNode: _config <EFBFBD>my<EFBFBD>%<EFBFBD><EFBFBD>\<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>o v setConfig f<EFBFBD>?start <EFBFBD>m*[<EFBFBD>X<EFBFBD>[6<EFBFBD><EFBFBD>v"<EFBFBD>?);
@@ -229,8 +235,14 @@ export class tetriWeaponCarrier extends Component {
let roleNode: Node | null = existingRole?.isValid ? existingRole : null;
if (!roleNode) {
+ this._roleCreating = true;
void gg.res.getNodeAsync('Yt<EFBFBD>c<EFBFBD>X/', 'Yt<EFBFBD>c<EFBFBD>X', GBundle.tetriCards).then((loaded) => {
+ this._roleCreating = false;
if (!loaded?.isValid || !this.node?.isValid) return;
+ if (this.roleNode?.isValid) {
+ this.safePutPoolNode(loaded);
+ return;
+ }
this._setupRoleNode(loaded);
});
return;
@@ -238,23 +250,30 @@ export class tetriWeaponCarrier extends Component {
this._setupRoleNode(roleNode);
}
+ private _dedupeRoleChildren(keep: Node): void {
+ for (let i = this.node.children.length - 1; i >= 0; i--) {
+ const c = this.node.children[i];
+ if (c.name === 'Yt<EFBFBD>c<EFBFBD>X' && c !== keep && c?.isValid) c.destroy();
+ }
+ }
+
private _setupRoleNode(roleNode: Node) {
roleNode.setParent(this.node);
this.roleNode = roleNode;
roleNode.active = true;
+ this._dedupeRoleChildren(roleNode);
const roleComp = roleNode.getComponent(role);
roleComp?.setFollowTarget(this.findCarrierTetriNode()?.node ?? this.node);
const conf = this.roleConfig.find(item => item.name == this._config.cubename);
- // console.log('conf',conf);
if (conf) {
roleNode.setPosition(conf.mainPosi.x, conf.mainPosi.y);
roleNode.setScale(conf.scalex, conf.scaley);
const anim = roleNode.getChildByName('anim')?.getComponent(sp.Skeleton);
if (anim) {
- anim.setAnimation(0, '<EFBFBD>[nT<EFBFBD>n', true);
anim.setSkin(conf.animSkin);
+ anim.setAnimation(0, '<EFBFBD>[nT<EFBFBD>n', true);
} else {
console.warn('[tetriWeaponCarrier] createRoleNode: Yt<EFBFBD>c<EFBFBD>X prefab <EFBFBD>T<EFBFBD>v anim p/a<EFBFBD>Y<EFBFBD>?, this._config.cubename);
}
@@ -419,8 +438,14 @@ export class tetriWeaponCarrier extends Component {
console.error('[tetriWeaponCarrier] addWeapon: ȓE<EFBFBD><EFBFBD>XR<EFBFBD>?Yt<EFBFBD>c<EFBFBD>X/anim <EFBFBD><EFBFBD>?Yt<EFBFBD>c<EFBFBD>X/<EFBFBD>Y@<EFBFBD><EFBFBD>j', this._config?.cubename);
return;
}
+ const loadSeq = ++this._weaponLoadSeq;
void gg.res.getNodeAsync('prefab/', weaponani, GBundle.tetriWeapon).then((weaponNode) => {
+ if (loadSeq !== this._weaponLoadSeq) {
+ this.safePutPoolNode(weaponNode);
+ return;
+ }
if (!weaponNode?.isValid || !wuqiNode?.isValid) return;
+ this.safePutPoolNode(this.weaponNode);
this.setLayerMask(weaponNode, wuqiNode.layer);
this.weaponNode = weaponNode;
weaponNode.setParent(wuqiNode);