witchday/Person.js

62 lines
1.4 KiB
JavaScript
Raw Normal View History

class Person extends GameObject {
constructor(config) {
super(config);
this.movementProgressRemaining = 0;
this.isPlayerControlled = config.isPlayerControlled || false;
this.directionUpdate = {
"up": ["y", -1],
"down": ["y", 1],
"left": ["x", -1],
"right": ["x", 1],
}
}
update(state) {
if (this.movementProgressRemaining > 0) {
this.updatePosition();
} else {
// more cases for starting to walk come here
// case: keyboard ready and arrow pressed
if (this.isPlayerControlled && state.arrow) {
this.startBehavior(state, {
type: "walk",
direction: state.arrow
})
}
this.updateSprite(state);
}
}
startBehavior(state, behavior) {
// set character direction to behavior
this.direction = behavior.direction;
if (behavior.type === "walk") {
// stop if space is not free
if (state.map.isSpaceTaken(this.x, this.y, this.direction)) {
return;
}
// ready to walk
state.map.moveWall(this.x, this.y, this.direction);
this.movementProgressRemaining = 16;
}
}
updatePosition() {
const [property, change] = this.directionUpdate[this.direction];
this[property] += change;
this.movementProgressRemaining -= 1;
}
updateSprite() {
if (this.movementProgressRemaining > 0) {
this.sprite.setAnimation("walk-" + this.direction);
return;
}
this.sprite.setAnimation("idle-" + this.direction);
}
}