73 lines
1.7 KiB
TypeScript
73 lines
1.7 KiB
TypeScript
import { Component } from '../core/Component.ts';
|
|
import { ComponentType } from '../core/Constants.ts';
|
|
|
|
/**
|
|
* Component for AI behavior and state.
|
|
*/
|
|
export class AI extends Component {
|
|
behaviorType: string;
|
|
state: string;
|
|
target: number | null;
|
|
awareness: number;
|
|
alertRadius: number;
|
|
chaseRadius: number;
|
|
fleeRadius: number;
|
|
wanderSpeed: number;
|
|
wanderDirection: number;
|
|
wanderChangeTime: number;
|
|
wanderChangeInterval: number;
|
|
|
|
/**
|
|
* @param behaviorType - The initial behavior type
|
|
*/
|
|
constructor(behaviorType = 'wander') {
|
|
super(ComponentType.AI);
|
|
this.behaviorType = behaviorType;
|
|
this.state = 'idle';
|
|
this.target = null;
|
|
this.awareness = 0;
|
|
this.alertRadius = 60;
|
|
this.chaseRadius = 120;
|
|
this.fleeRadius = 40;
|
|
|
|
this.wanderSpeed = 20;
|
|
this.wanderDirection = Math.random() * Math.PI * 2;
|
|
this.wanderChangeTime = 0;
|
|
this.wanderChangeInterval = 2.0;
|
|
}
|
|
|
|
/**
|
|
* Set the behavior type for this AI.
|
|
* @param type - The new behavior type (e.g., 'wander', 'patrol', 'chase')
|
|
*/
|
|
setBehavior(type: string): void {
|
|
this.behaviorType = type;
|
|
}
|
|
|
|
/**
|
|
* Set a target entity for the AI to interact with.
|
|
* @param entityId - The ID of the target entity
|
|
*/
|
|
setTarget(entityId: number): void {
|
|
this.target = entityId;
|
|
}
|
|
|
|
/**
|
|
* Clear the current target.
|
|
*/
|
|
clearTarget(): void {
|
|
this.target = null;
|
|
}
|
|
|
|
/**
|
|
* Update the AI's awareness level.
|
|
* @param delta - The amount to change awareness by
|
|
* @param maxAwareness - The maximum awareness level
|
|
*/
|
|
updateAwareness(delta: number, maxAwareness = 1.0): void {
|
|
this.awareness = Math.min(maxAwareness, this.awareness + delta);
|
|
if (this.awareness <= 0) {
|
|
this.awareness = 0;
|
|
}
|
|
}
|
|
}
|