ported simulation
This commit is contained in:
71
src/app/components/game/sim/SimEnemy.ts
Normal file
71
src/app/components/game/sim/SimEnemy.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
import { EEnemySize } from '../data/EEnemySize';
|
||||
import { EProjectileEffectType } from '../data/EProjectileEffectType';
|
||||
import { GdProjectileEffect } from '../data/GdProjectileEffect';
|
||||
import { Hex } from '../util/Hex';
|
||||
import { Vector2 } from '../util/Vector2';
|
||||
import { SimLevel } from './SimLevel';
|
||||
|
||||
export class SimEnemy {
|
||||
index: number = -1;
|
||||
routeIdx: number = -1;
|
||||
startHex: Hex = new Hex(0, 0);
|
||||
endHex: Hex = new Hex(0, 0);
|
||||
path: number[] = [];
|
||||
prevPosition: Vector2 = new Vector2(0, 0);
|
||||
position: Vector2 = new Vector2(0, 0);
|
||||
direction: Vector2 = new Vector2(0, 0);
|
||||
currentPathIndex: number = -1;
|
||||
currentPathStep: number = -1;
|
||||
currentPathPosition: Vector2 = new Vector2(0, 0);
|
||||
dead: boolean = false;
|
||||
hitPonts: number = 0;
|
||||
size: EEnemySize = EEnemySize.Tiny;
|
||||
speed: number = 0;
|
||||
gain: number = 0;
|
||||
|
||||
constructor(index: number, routeIdx: number) {
|
||||
this.index = index;
|
||||
this.routeIdx = routeIdx;
|
||||
}
|
||||
|
||||
public suffer(level: SimLevel, effect: GdProjectileEffect) {
|
||||
switch (effect.type) {
|
||||
case EProjectileEffectType.Damage: {
|
||||
this.hitPonts -= effect.amount;
|
||||
if (this.hitPonts <= 0) {
|
||||
level.currency += this.gain;
|
||||
this.dead = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public onPathUpdated(level: SimLevel) {
|
||||
const myPos = this.position;
|
||||
this.currentPathPosition = myPos;
|
||||
|
||||
if (this.path == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
const current = this.path[this.currentPathIndex];
|
||||
const next = this.path[this.currentPathIndex + 1];
|
||||
if (!next) {
|
||||
return;
|
||||
}
|
||||
|
||||
const cells = level.cells;
|
||||
const pos1 = cells[current].hex.toWorld();
|
||||
const pos2 = cells[next].hex.toWorld();
|
||||
const myDir = pos2.subtract(myPos);
|
||||
const myLen = myDir.magnitude();
|
||||
const hexDir = pos2.subtract(pos1);
|
||||
const hexLen = hexDir.magnitude();
|
||||
if (myLen > hexLen) {
|
||||
this.path.unshift(this.path[0]);
|
||||
}
|
||||
|
||||
this.direction = myDir.multiplyScalar(1 / myLen);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user