1 decade ago by sdwrage
I remember messing around with the unreal engine a while back and remembering that you could set damage zones for areas that you had set for lava or spikes or... whatever needed to cause damage. So I thought it would be cool if you could do it within impact. I created a damage zone entity (look below) with a 16x16 size that can be used in the WM (Weltmeister) editor.
The entity knocks the player back unless you set the entities ignoreknockback value to false. Also, it defaults to a damage value of 9999 unless you set its damage value for the entity. Common usage could be placing it in front of a lava entity that has animation or even next to a spike pit.
If anyone has any improvements, let me know :)
The entity knocks the player back unless you set the entities ignoreknockback value to false. Also, it defaults to a damage value of 9999 unless you set its damage value for the entity. Common usage could be placing it in front of a lava entity that has animation or even next to a spike pit.
If anyone has any improvements, let me know :)
ig.module(
'game.entities.damagezone'
).requires(
'impact.entity'
)
.defines(function() {
EntityDamagezone = ig.Entity.extend({
_wmDrawBox: true,
_wmBoxColor: 'rgba(0, 0, 255, 0.7)',
size: {x: 16, y: 16},
damage: 9999,
ignoreknockback: "true",
checkAgainst: ig.Entity.TYPE.BOTH,
collides: ig.Entity.COLLIDES.ACTIVE,
init: function(x, y, settings){
this.parent(x, y, settings);
if (settings.damage) {
this.damage = settings.damage;
this.ignoreknockback = this.stringToBoolean(settings.ignoreknockback);
}
},
update: function() {},
check: function(other) {
if( other instanceof EntityPlayer ) {
other.receiveDamage(this.damage);
if (!this.ignoreknockback) {
this.knockBack(other);
}
}
},
knockBack: function(other) {
if (other.pos.x < this.pos.x) {
other.vel.x = -other.maxVel.x;
} else if(other.pos.x > this.pos.x) {
other.vel.x = other.maxVel.x;
}
if (other.pos.y < this.pos.y) {
other.vel.y = -other.maxVel.y;
} else if(other.pos.y > this.pos.y) {
other.vel.y = other.maxVel.y;
}
},
stringToBoolean: function(string){
if(string != null) {
switch(string.toLowerCase()){
case "true": case "yes": case "1": return true;
case "false": case "no": case "0": return false;
default: return Boolean(string);
}
}
}
});
});
