refactor: movement API

This commit is contained in:
cha0s 2019-05-31 16:57:59 -05:00
parent f84e2331c8
commit c69909b80a

View File

@ -23,7 +23,7 @@ export class Mobile extends decorate(Trait) {
constructor(entity, params, state) {
super(entity, params, state);
this.requestedMovement = [0, 0];
this.appliedMovement = [0, 0];
}
methods() {
@ -43,7 +43,11 @@ export class Mobile extends decorate(Trait) {
return promise;
},
applyMovement: (movement) => {
applyMovement: (vector) => {
this.appliedMovement = Vector.add(this.appliedMovement, vector);
},
forceMovement: (movement) => {
this.entity.x += movement[0];
this.entity.y += movement[1];
},
@ -52,31 +56,31 @@ export class Mobile extends decorate(Trait) {
if (!this.isMobile) {
return;
}
this.requestedMovement = Vector.scale(
this.entity.applyMovement(Vector.scale(
Vector.normalize(vector),
this.speed
);
this.entity.emit('movementRequest', this.requestedMovement);
));
this.entity.emit('movementRequest', this.appliedMovement);
},
}
}
tick(elapsed) {
if (Vector.isZero(this.requestedMovement)) {
if (Vector.isZero(this.appliedMovement)) {
return;
}
if (this.entity.is('physical')) {
this.entity.applyImpulse(this.requestedMovement);
this.entity.applyImpulse(this.appliedMovement);
}
else {
const requestedMovement = Vector.scale(
this.requestedMovement,
const appliedMovement = Vector.scale(
this.appliedMovement,
elapsed
);
this.entity.applyMovement(requestedMovement);
this.entity.forceMovement(appliedMovement);
}
this.requestedMovement = [0, 0];
this.appliedMovement = [0, 0];
}
}