box-o-sand/oldstuff/intro-to-crafty/src/components.js
2015-07-25 14:41:14 -04:00

82 lines
1.5 KiB
JavaScript

Crafty.c('Grid', {
init: function() {
this.attr({
w: Game.map_grid.tile.width,
h: Game.map_grid.tile.height
})
},
at: function(x, y) {
if (x === undefined && y === undefined) {
return {
x: this.x / Game.map_grid.tile.width,
y: this.y / Game.map_grid.tile.height
}
} else {
this.attr({
x: x * Game.map_grid.tile.width,
y: y * Game.map_grid.tile.height
});
return this;
}
}
});
Crafty.c('Actor', {
init: function() {
this.requires('2D, Canvas, Grid');
}
});
Crafty.c('Tree', {
init: function() {
this.requires('Actor, Color, Solid')
.color('rgb(20, 125, 40)');
}
});
Crafty.c('Bush', {
init: function() {
this.requires('Actor, Color, Solid')
.color('rgb(20, 185, 40)');
}
});
Crafty.c('PlayerCharacter', {
init: function() {
this.requires('Actor, Fourway, Color, Collision')
.fourway(4)
.color('rgb(20, 75, 40)')
.stopOnSolids()
.onHit('Village', this.visitVillage);
},
stopOnSolids: function() {
this.onHit('Solid', this.stopMovement);
return this;
},
stopMovement: function() {
this._speed = 0;
if (this._movement) {
this.x -= this._movement.x;
this.y -= this._movement.y;
}
},
visitVillage: function(data) {
data[0].obj.collect();
}
});
Crafty.c('Village', {
init: function() {
this.requires('Actor, Color')
.color('rgb(170, 125, 40)');
},
collect: function() {
this.destroy();
}
});