migrate from perforce
This commit is contained in:
58
dist/Vis/VisEnemy.js
vendored
Normal file
58
dist/Vis/VisEnemy.js
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
import { EEnemySize } from "../GameData/index.js";
|
||||
import { Vector2 } from "../Util/index.js";
|
||||
export class VisEnemy {
|
||||
_positions;
|
||||
_directions;
|
||||
_image;
|
||||
_context;
|
||||
_simEnemy;
|
||||
_angle = null;
|
||||
_gdRoot;
|
||||
constructor(gdRoot, simEnemy, width, height) {
|
||||
this._gdRoot = gdRoot;
|
||||
this._simEnemy = simEnemy;
|
||||
this._image = document.createElement("canvas");
|
||||
this._image.width = width;
|
||||
this._image.height = height;
|
||||
this._context = this._image.getContext("2d");
|
||||
this._positions = [simEnemy.position, simEnemy.position];
|
||||
this._directions = [simEnemy.direction, simEnemy.direction];
|
||||
}
|
||||
get positions() {
|
||||
return this._positions;
|
||||
}
|
||||
get image() {
|
||||
return this._image;
|
||||
}
|
||||
advanceStep() {
|
||||
const prevPos = this._positions[1];
|
||||
const prevDir = this._directions[1];
|
||||
this._positions = [prevPos, this._simEnemy.position];
|
||||
this._directions = [prevDir, this._simEnemy.direction];
|
||||
}
|
||||
update(t) {
|
||||
const directions = this._directions;
|
||||
const dir = Vector2.lerp(directions[0], directions[1], t);
|
||||
const angle = Math.atan2(dir.x, -dir.y) - Math.PI / 2;
|
||||
if (this._angle == angle) {
|
||||
return;
|
||||
}
|
||||
this._angle = angle;
|
||||
const ctx = this._context;
|
||||
ctx.clearRect(0, 0, this._image.width, this._image.height);
|
||||
ctx.save();
|
||||
ctx.translate(this._image.width / 2, this._image.height / 2);
|
||||
ctx.rotate(angle);
|
||||
switch (this._simEnemy.size) {
|
||||
case EEnemySize.Tiny:
|
||||
ctx.scale(0.75, 0.75);
|
||||
break;
|
||||
case EEnemySize.Huge:
|
||||
ctx.scale(2, 2);
|
||||
break;
|
||||
}
|
||||
ctx.drawImage(this._gdRoot.image("enemy-" + (this._simEnemy.index | 0) + ".svg"), -this._image.width / 2, -this._image.height / 2, this._image.width, this._image.height);
|
||||
ctx.restore();
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=VisEnemy.js.map
|
||||
Reference in New Issue
Block a user