Browse Source

Events can now remove components

tags/v0.1.5^2
Shaun 7 years ago
parent
commit
b3f51877cf
8 changed files with 89 additions and 3 deletions
  1. +12
    -0
      src/client/js/objects/objBase.js
  2. +7
    -0
      src/client/js/objects/objects.js
  3. +8
    -2
      src/server/components/aggro.js
  4. +11
    -0
      src/server/components/syncer.js
  5. +20
    -0
      src/server/config/eventPhases/phaseEventChain.js
  6. +4
    -0
      src/server/config/maps/tutorial/events.js
  7. +26
    -0
      src/server/objects/objBase.js
  8. +1
    -1
      src/server/world/instancer.js

+ 12
- 0
src/client/js/objects/objBase.js View File

@@ -48,6 +48,18 @@ define([
}
},

removeComponent: function(type) {
var cpn = this[type];
if (!cpn)
return;

this.components.spliceWhere(function(c) {
return (c == cpn);
});

delete this[type];
},

render: function() {
return;
if (this.sheetName)


+ 7
- 0
src/client/js/objects/objects.js View File

@@ -201,6 +201,13 @@ define([

delete template.components;

if (template.removeComponents) {
template.removeComponents.forEach(function(r) {
obj.removeComponent(r);
});
delete template.removeComponents;
}

var oldX = obj.x;

var sprite = obj.sprite;


+ 8
- 2
src/server/components/aggro.js View File

@@ -80,7 +80,10 @@ define([
} else {
var lLen = list.length;
for (var i = 0; i < lLen; i++) {
list[i].obj.aggro.unIgnore(obj);
var targetAggro = list[i].obj.aggro;
//Maybe the aggro component has been removed?
if (targetAggro)
targetAggro.unIgnore(obj);
}
}

@@ -201,7 +204,10 @@ define([
console.log('aggro obj empty???');
continue;
}
l.obj.aggro.unAggro(this.obj);
//Maybe the aggro component was removed?
var targetAggro = l.obj.aggro;
if (targetAggro)
targetAggro.unAggro(this.obj);
}

this.list = [];


+ 11
- 0
src/server/components/syncer.js View File

@@ -91,6 +91,17 @@ define([
cpn[property] = [];

cpn[property].push(value);
},

setSelfArray: function(self, property, value) {
var o = this.o;
if (self)
o = this.oSelf;

if (o[property] == null)
o[property] = [];

o[property].push(value);
}
};
});

+ 20
- 0
src/server/config/eventPhases/phaseEventChain.js View File

@@ -58,6 +58,26 @@ define([
mob.addComponent(c.type, components[j]);
}
}
},
removeComponents: function(config) {
var objects = this.instance.objects.objects;

var components = config.components;
if (!components.push)
components = [ components ];
var cLen = components.length;

var mobs = config.mobs;
if (!mobs.push)
mobs = [ mobs ];
var mLen = mobs.length;

for (var i = 0; i < mLen; i++) {
var mob = objects.find(o => (o.id == mobs[i]));
for (var j = 0; j < cLen; j++) {
mob.removeComponent(components[j]);
}
}
}
}
};

+ 4
- 0
src/server/config/maps/tutorial/events.js View File

@@ -108,6 +108,10 @@ module.exports = [{
}, {
type: 'eventChain',
config: [{
type: 'removeComponents',
mobs: 'imp-kingpin',
components: 'aggro'
}, {
type: 'mobTalk',
id: 'imp-kingpin',
text: `Aargh, no! I must get to my lair!`,


+ 26
- 0
src/server/objects/objBase.js View File

@@ -36,6 +36,14 @@ define([
return cpn;
},

removeComponent: function(type) {
var cpn = this[type];
if (!cpn)
return;

cpn.destroyed = true;
},

extendComponent: function(ext, type, blueprint) {
var template = require('./components/extensions/' + type);
var cpn = this[ext];
@@ -59,6 +67,14 @@ define([
if (c.update())
usedTurn = true;
}

if (c.destroyed) {
this.syncer.setSelfArray(false, 'removeComponents', c.type);
this.components.spliceWhere(f => (f == c));
delete this[c.type];
len--;
i--;
}
}

if (!usedTurn) {
@@ -113,6 +129,16 @@ define([
else
component = value.simplify(self);

if (value.destroyed) {
if (!component) {
component = {
type: value.type
};
}

component.destroyed = true;
}

if (component)
result.components.push(component);
}


+ 1
- 1
src/server/world/instancer.js View File

@@ -95,8 +95,8 @@ define([
objects.update();
spawners.update();
resourceSpawner.update();
syncer.update();
events.update();
syncer.update();

setTimeout(this.tick.bind(this), this.speed);
},


Loading…
Cancel
Save