瀏覽代碼

bug #1759: Started refactoring visibility and fixed an issue with certain effects appearing in under hiders

tags/v0.9.0^2
Shaun 3 年之前
父節點
當前提交
1d8053f20a
共有 6 個文件被更改,包括 74 次插入74 次删除
  1. +3
    -1
      src/client/js/components/attackAnimation.js
  2. +3
    -0
      src/client/js/components/explosion.js
  3. +2
    -0
      src/client/js/components/particles.js
  4. +33
    -4
      src/client/js/objects/objBase.js
  5. +31
    -69
      src/client/js/objects/objects.js
  6. +2
    -0
      src/server/config/spells/spellProjectile.js

+ 3
- 1
src/client/js/components/attackAnimation.js 查看文件

@@ -52,6 +52,8 @@ define([

if (this.noSprite)
this.obj.sheetName = null;

this.sprite.visible = this.obj.isVisible;
},

renderManual: function () {
@@ -66,7 +68,7 @@ define([
if (this.destroyObject)
this.obj.destroyed = true;
else {
if (this.obj.sprite && this.hideSprite)
if (this.obj.isVisible && this.obj.sprite)
this.obj.sprite.visible = true;

this.destroyed = true;


+ 3
- 0
src/client/js/components/explosion.js 查看文件

@@ -65,6 +65,9 @@ define([
},

explode: function (blueprint) {
if (!this.obj.isVisible)
return;

let particles = this.obj.addComponent('particles', this.blueprint);

particles.emitter.update(0.2);


+ 2
- 0
src/client/js/components/particles.js 查看文件

@@ -17,6 +17,8 @@ define([
this.blueprint.obj = this.obj;

this.emitter = renderer.buildEmitter(this.blueprint);

this.setVisible(this.obj.isVisible);
},

setVisible: function (visible) {


+ 33
- 4
src/client/js/objects/objBase.js 查看文件

@@ -108,6 +108,28 @@ define([
stats.updateHpSprite();
},

updateVisibility: function () {
const { x, y, hidden, isVisible } = this;

const vis = (
!hidden &&
(
this.self ||
(
renderer.sprites[x] &&
renderer.sprites[x][y].length > 0 &&
!renderer.isHidden(x, y)
)
)
);

if (vis === isVisible)
return;

this.isVisible = vis;
this.setVisible(vis);
},

setVisible: function (visible) {
if (this.sprite)
this.sprite.visible = visible;
@@ -115,10 +137,17 @@ define([
if (this.nameSprite)
this.nameSprite.visible = (visible && config.showNames);

this.components.forEach(c => {
if (c.setVisible)
c.setVisible(visible);
});
if (!visible && this.stats && this.stats.hpSprite && this.stats.hpSprite.visible) {
this.stats.hpSprite.visible = false;
this.stats.hpSpriteInner.visible = false;
}

if (!visible && this) {
this.components.forEach(c => {
if (c.setVisible)
c.setVisible(visible);
});
}
},

destroy: function () {


+ 31
- 69
src/client/js/objects/objects.js 查看文件

@@ -136,6 +136,31 @@ define([
obj[p] = value;
}

if (obj.sheetName) {
obj.sprite = renderer.buildObject(obj);
if (template.hidden) {
obj.sprite.visible = false;
if (obj.nameSprite)
obj.nameSprite.visible = false;
if ((obj.stats) && (obj.stats.hpSprite)) {
obj.stats.hpSprite.visible = false;
obj.stats.hpSpriteInner.visible = false;
}
}
}

if ((obj.name) && (obj.sprite)) {
obj.nameSprite = renderer.buildText({
layerName: 'effects',
text: obj.name,
x: (obj.x * scale) + (scale / 2),
y: (obj.y * scale) + scale
});
}

//We need to set visibility before components kick in as they sometimes need access to isVisible
obj.updateVisibility();

components.forEach(function (c) {
//Map ids to objects
let keys = Object.keys(c).filter(function (k) {
@@ -154,19 +179,6 @@ define([
obj.addComponent(c.type, c);
}, this);

if (obj.sheetName) {
obj.sprite = renderer.buildObject(obj);
if (template.hidden) {
obj.sprite.visible = false;
if (obj.nameSprite)
obj.nameSprite.visible = false;
if ((obj.stats) && (obj.stats.hpSprite)) {
obj.stats.hpSprite.visible = false;
obj.stats.hpSpriteInner.visible = false;
}
}
}

if (obj.self) {
events.emit('onGetPlayer', obj);
window.player = obj;
@@ -179,28 +191,6 @@ define([
}, true);
}

if ((obj.name) && (obj.sprite)) {
obj.nameSprite = renderer.buildText({
layerName: 'effects',
text: obj.name,
x: (obj.x * scale) + (scale / 2),
y: (obj.y * scale) + scale
});
}

if (renderer.sprites) {
let isVisible = (
obj.self ||
(
renderer.sprites[obj.x] &&
renderer.sprites[obj.x][obj.y].length > 0 &&
!renderer.isHidden(obj.x, obj.y)
)
);

obj.setVisible(isVisible);
}

this.objects.push(obj);

return obj;
@@ -265,22 +255,6 @@ define([

if (((template.sheetName) || (template.cell)) && (sprite))
renderer.setSprite(obj);
if (sprite) {
if (template.hidden !== null) {
sprite.visible = !template.hidden;
if (obj.nameSprite)
obj.nameSprite.visible = config.showNames;
if ((obj.stats) && (obj.stats.hpSprite)) {
obj.stats.hpSprite.visible = !template.hidden;
obj.stats.hpSpriteInner.visible = !template.hidden;
}
}
}

if ((template.x !== 0) || (template.y !== 0)) {
if (obj.stats)
obj.stats.updateHpSprite();
}

if ((!obj.sprite) && (template.sheetName))
obj.sprite = renderer.buildObject(obj);
@@ -292,27 +266,15 @@ define([
x: (obj.x * scale) + (scale / 2),
y: (obj.y * scale) + scale
});
obj.nameSprite.visible = config.showNames;
}

if (obj.sprite) {
let ix = ~~obj.x;
let iy = ~~obj.y;

let isVisible = (
!!obj.player ||
(
!obj.hidden &&
renderer.sprites[ix] &&
renderer.sprites[ix][iy] &&
renderer.sprites[ix][iy].length > 0 &&
!renderer.isHidden(obj.x, obj.y)
)
);
obj.setVisible(isVisible);
}
if ((template.x !== 0) || (template.y !== 0)) {
obj.updateVisibility();
obj.setSpritePosition();

obj.setSpritePosition();
if (obj.stats)
obj.stats.updateHpSprite();
}
},

update: function () {


+ 2
- 0
src/server/config/spells/spellProjectile.js 查看文件

@@ -33,6 +33,8 @@ module.exports = {
let projectileConfig = {
caster: this.obj.id,
extraTargets: 0,
x: obj.x,
y: obj.y,
components: [{
idSource: this.obj.id,
idTarget: target.id,


Loading…
取消
儲存