Movement improvements

This commit is contained in:
Martin
2022-12-12 12:04:31 +01:00
parent f7b345ef93
commit 2077c2e1c8
9 changed files with 92 additions and 14 deletions

View File

@@ -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
}

View File

@@ -0,0 +1,9 @@
{
"ver": "4.0.23",
"importer": "typescript",
"imported": true,
"uuid": "02c4b3ec-3f77-485d-a539-32564ed5d63b",
"files": [],
"subMetas": {},
"userData": {}
}