import type { Vec3, CollisionPlane } from '@quake2ts/shared'; import { RenderFx } from '@quake2ts/shared'; import { PlayerClient } from '../inventory/playerInventory.js'; import type { EntitySystem } from './system.js'; import { DamageMod } from '../combat/damageMods.js'; import type { RegularArmorState, PowerArmorState } from '../combat/armor.js'; import { EntityFlags, EntityEffects, MuzzleFlash } from './enums.js'; export { RenderFx }; export { EntityFlags, EntityEffects, MuzzleFlash }; export * from '../ai/constants.js'; export interface Reinforcement { classname: string; strength: number; mins: Vec3; maxs: Vec3; } export type ReinforcementList = Reinforcement[]; export declare enum MoveType { None = 0, Noclip = 1, Push = 2, Stop = 3, Walk = 4, Step = 5, Fly = 6, Toss = 7, FlyMissile = 8, Bounce = 9, WallBounce = 10 } export declare enum Solid { Not = 0, Trigger = 1, BoundingBox = 2, Bsp = 3 } export declare const SPAWNFLAG_NOT_EASY = 256; export declare const SPAWNFLAG_NOT_MEDIUM = 512; export declare const SPAWNFLAG_NOT_HARD = 1024; export declare const SPAWNFLAG_NOT_DEATHMATCH = 2048; export declare const SPAWNFLAG_NOT_COOP = 4096; export { DamageMod as ModId }; export type Mod = DamageMod; export declare enum DamageFlags { None = 0, NoArmor = 1, Energy = 2, NoKnockback = 4, Bullet = 8, Radius = 16 } export declare enum GibType { Organic = 0, Metallic = 1 } export declare const SpawnFlag: { MonsterAmbush: number; }; export interface EntityState { } export declare enum ServerFlags { None = 0, NoClient = 1, DeadMonster = 2, Monster = 4, Player = 8, Bot = 16, NoBots = 32, Respawning = 64, Projectile = 128, Instanced = 256, Door = 512, NoCull = 1024, Hull = 2048 } export declare enum DeadFlag { Alive = 0, Dying = 1, Dead = 2, Respawnable = 3 } export interface CollisionSurface { name: string; flags: number; value: number; } export type ThinkCallback = (self: Entity, context: EntitySystem) => void; export type TouchCallback = (self: Entity, other: Entity | null, plane?: CollisionPlane | null, surf?: CollisionSurface | null) => void; export type UseCallback = (self: Entity, other: Entity | null, activator?: Entity | null) => void; export type BlockedCallback = (self: Entity, other: Entity | null, context?: EntitySystem) => void; export type PainCallback = (self: Entity, other: Entity | null, kick: number, damage: number, mod: DamageMod) => void; export type DieCallback = (self: Entity, inflictor: Entity | null, attacker: Entity | null, damage: number, point: Vec3, mod: DamageMod) => void; export type PlayerPainCallback = (self: Entity, damage: number) => void; export type MonsterBlockedCallback = (self: Entity, dist: number, context: EntitySystem) => boolean | void; export type EntityFieldType = 'int' | 'float' | 'string' | 'vec3' | 'boolean' | 'entity' | 'inventory' | 'callback'; export interface EntityFieldDescriptor { readonly name: K; readonly type: EntityFieldType; readonly save: boolean; } export type MonsterAction = (self: Entity, context: EntitySystem) => void; export type MonsterSightCallback = (self: Entity, enemy: Entity) => void; export type AIAction = (self: Entity, dist: number, context: EntitySystem) => void; export interface MonsterFrame { ai: AIAction | null; dist: number; think?: MonsterAction | null; } export interface MonsterMove { firstframe: number; lastframe: number; frames: MonsterFrame[]; endfunc: MonsterAction | null; } export interface MoveInfo { start_origin?: Vec3; start_angles?: Vec3; end_origin?: Vec3; end_angles?: Vec3; sound_start?: number; sound_middle?: number; sound_end?: number; accel?: number; speed?: number; decel?: number; distance?: number; wait?: number; state?: number; dir?: Vec3; current_speed?: number; move_speed?: number; next_speed?: number; remaining_distance?: number; decel_distance?: number; } export interface NavPath { firstMovePoint: Vec3; } export interface MonsterInfo { current_move?: MonsterMove; aiflags: number; last_sighting: Vec3; trail_time: number; pausetime: number; run?: MonsterAction; stand?: MonsterAction; sight?: MonsterSightCallback; idle?: MonsterAction; search?: MonsterAction; attack?: MonsterAction; melee?: MonsterAction; walk?: MonsterAction; attack_machinegun?: MonsterMove; checkattack?: (self: Entity, context: EntitySystem) => boolean; attack_state?: number; lefty?: number; nextframe?: number; scale?: number; melee_debounce_time?: number; attack_finished?: number; power_armor_type?: number; power_armor_power?: number; blind_fire_target?: Vec3; blind_fire_delay?: number; fly_thrusters?: boolean; fly_acceleration?: number; fly_speed?: number; fly_min_distance?: number; fly_max_distance?: number; fly_buzzard?: boolean; blindfire?: boolean; dodge?: (self: Entity, attacker: Entity, eta: number) => void; unduck?: (self: Entity) => void; duck?: (self: Entity, eta: number) => boolean; sidestep?: (self: Entity) => boolean; blocked?: MonsterBlockedCallback; setskin?: (self: Entity) => void; freeze_time?: number; jump_time?: number; jump_height?: number; drop_height?: number; can_jump?: boolean; monster_slots?: number; monster_used?: number; reinforcements?: ReinforcementList; chosen_reinforcements?: number[]; badMedic1?: Entity; badMedic2?: Entity; healer?: Entity; medicTries?: number; commander?: Entity; fire_wait?: number; fly_above?: boolean; orig_yaw_speed?: number; base_height?: number; initial_power_armor_type?: number; max_power_armor_power?: number; base_health?: number; health_scaling?: number; react_to_damage_time?: number; weapon_sound?: number; engine_sound?: number; nav_path?: NavPath; } export declare class Entity { readonly index: number; linkcount: number; inUse: boolean; freePending: boolean; linkPrevious: Entity | null; linkNext: Entity | null; classname: string; spawnflags: number; target?: string; targetname?: string; killtarget?: string; team?: string; message?: string; pathtarget?: string; model?: string; item?: string; map?: string; inventory: Record; origin: Vec3; old_origin: Vec3; velocity: Vec3; avelocity: Vec3; angles: Vec3; pos1: Vec3; pos2: Vec3; gravityVector: Vec3; viewheight: number; mins: Vec3; maxs: Vec3; absmin: Vec3; absmax: Vec3; size: Vec3; mass: number; gravity: number; bounce: number; movetype: MoveType; movedir: Vec3; modelindex: number; frame: number; skin: number; effects: number; renderfx: number; health: number; max_health: number; spawn_count: number; takedamage: boolean; dmg: number; radius_dmg: number; dmg_radius: number; speed: number; accel: number; decel: number; height: number; deadflag: DeadFlag; count: number; wait: number; delay: number; random: number; timestamp: number; lip: number; state: number; style: number; sounds: number; noise_index: number; attenuation: number; volume: number; fly_sound_debounce_time: number; last_move_time: number; damage_debounce_time: number; enemy: Entity | null; movetarget: Entity | null; target_ent: Entity | null; goalentity: Entity | null; ideal_yaw: number; yaw_speed: number; search_time: number; attack_finished_time: number; pain_finished_time: number; pain_debounce_time: number; trail_time: number; groundentity: Entity | null; groundentity_linkcount: number; waterlevel: number; watertype: number; nextthink: number; think?: ThinkCallback; touch?: TouchCallback; use?: UseCallback; blocked?: BlockedCallback; pain?: PainCallback | PlayerPainCallback; die?: DieCallback; postthink?: ThinkCallback; activator: Entity | null; alpha: number; solid: Solid; clipmask: number; flags: number; svflags: number; monsterinfo: MonsterInfo; moveinfo?: MoveInfo; hackflags: number; plat2flags: number; fov: number; combattarget?: string; show_hostile: number; light_level: number; owner: Entity | null; beam: Entity | null; beam2: Entity | null; chain: Entity | null; client?: PlayerClient; _regularArmor?: RegularArmorState; _powerArmor?: PowerArmorState; get regularArmor(): RegularArmorState | undefined; set regularArmor(v: RegularArmorState | undefined); get powerArmor(): PowerArmorState | undefined; set powerArmor(v: PowerArmorState | undefined); get worldBounds(): { min: Vec3; max: Vec3; }; constructor(index: number); reset(): void; } export declare enum AiFlags { StandGround = 1, TempStandGround = 2, SoundTarget = 4, LostSight = 8, PursuitLastSeen = 16, PursueNext = 32, PursueTemp = 64, HoldFrame = 128, GoodGuy = 256, Brutal = 512, NoStep = 1024, ManualSteering = 2048, Ducked = 4096, CombatPoint = 8192, Medic = 16384, Resurrecting = 32768, SpawnedCarrier = 65536, IgnoreShots = 131072, AlternateFly = 262144, Dodging = 524288, SpawnedMedicC = 8388608, SightCover = 8, Chicken = 16, Flee = 32, Stand = 64, FixTarget = 128, BrtMove = 512, DoNotCount = 1024, ManualTarget = 2048 } export declare const ENTITY_FIELD_METADATA: readonly EntityFieldDescriptor[]; export interface Damageable { health: number; max_health: number; takedamage: boolean; deadflag: DeadFlag; die?: DieCallback; pain?: PainCallback | PlayerPainCallback; origin: Vec3; } export interface Monster extends Damageable { monsterinfo: MonsterInfo; enemy: Entity | null; } //# sourceMappingURL=entity.d.ts.map