mirror of
https://github.com/MartinKral/Slash-The-Hordes
synced 2025-09-24 04:39:05 +00:00
Movement improvements
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import { Node, Vec3 } from "cc";
|
||||
import { Enemy } from "../Enemy";
|
||||
import { EnemyMover } from "./EnemyMover";
|
||||
|
||||
export class PeriodicFollowTargetEnemyMover extends EnemyMover {
|
||||
private enemyToFollowState: Map<Enemy, EnemyFollowState> = new Map<Enemy, EnemyFollowState>();
|
||||
private enemyToStateTimeLeft: Map<Enemy, number> = new Map<Enemy, number>();
|
||||
|
||||
public constructor(targetNode: Node, private followTime: number, private waitTime: number) {
|
||||
super(targetNode);
|
||||
}
|
||||
|
||||
public addEnemy(enemy: Enemy): void {
|
||||
this.setEnemyFollowState(enemy, EnemyFollowState.Follow, this.followTime);
|
||||
super.addEnemy(enemy);
|
||||
}
|
||||
|
||||
public removeEnemy(enemy: Enemy): void {
|
||||
super.removeEnemy(enemy);
|
||||
}
|
||||
|
||||
public gameTick(deltaTime: number): void {
|
||||
for (const enemy of this.enemies) {
|
||||
const stateTimeLeft: number = this.enemyToStateTimeLeft.get(enemy) - deltaTime;
|
||||
if (stateTimeLeft <= 0) {
|
||||
this.switchEnemyFollowState(enemy);
|
||||
} else {
|
||||
this.enemyToStateTimeLeft.set(enemy, stateTimeLeft);
|
||||
|
||||
if (this.enemyToFollowState.get(enemy) === EnemyFollowState.Follow) {
|
||||
let direction: Vec3 = new Vec3();
|
||||
direction = Vec3.subtract(direction, this.targetNode.worldPosition, enemy.node.worldPosition);
|
||||
enemy.moveBy(direction.normalize(), deltaTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private switchEnemyFollowState(enemy: Enemy): void {
|
||||
const followState: EnemyFollowState = this.enemyToFollowState.get(enemy);
|
||||
if (followState === EnemyFollowState.Follow) {
|
||||
this.setEnemyFollowState(enemy, EnemyFollowState.Wait, this.waitTime);
|
||||
} else if (followState === EnemyFollowState.Wait) {
|
||||
this.setEnemyFollowState(enemy, EnemyFollowState.Follow, this.followTime);
|
||||
}
|
||||
}
|
||||
|
||||
private setEnemyFollowState(enemy: Enemy, followState: EnemyFollowState, stateTimeLeft: number): void {
|
||||
this.enemyToFollowState.set(enemy, followState);
|
||||
this.enemyToStateTimeLeft.set(enemy, stateTimeLeft);
|
||||
}
|
||||
}
|
||||
|
||||
export enum EnemyFollowState {
|
||||
Follow,
|
||||
Wait
|
||||
}
|
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ver": "4.0.23",
|
||||
"importer": "typescript",
|
||||
"imported": true,
|
||||
"uuid": "02c4b3ec-3f77-485d-a539-32564ed5d63b",
|
||||
"files": [],
|
||||
"subMetas": {},
|
||||
"userData": {}
|
||||
}
|
Reference in New Issue
Block a user