import { Node, Vec3 } from 'cc'; // 统一的武器与子弹配置类型,便于跨项目复用 export interface WeaponStats { damage: number; fireRate: number; // 每秒发射次数或类似概念 range: number; // 最大射程(像素) bulletSpeed: number; // 逻辑速度(像素/秒) } export interface VisualBulletConfig { bulletImages?: string; // 贴图资源路径 hitEffect?: string | boolean; // 命中特效资源路径或开关 trailEffect?: boolean | string; // 拖尾效果开关或资源路径 explosionEffect?: string; // 爆炸特效资源路径 burnEffect?: string; // 地面燃烧特效资源路径 } export type BulletCountType = 'single' | 'spread' | 'burst'; export interface BulletCountConfig { type: BulletCountType; amount: number; // 单发数量或每次 burst 的数量 spreadAngle?: number; // 扇形扩散角度(度) burstCount?: number; // 连发次数 burstDelay?: number; // 连发间隔(秒) } export type BulletTrajectoryType = 'straight' | 'arc' | 'guided'; export interface BulletTrajectoryConfig { type: BulletTrajectoryType; speed: number; // 初始速度(像素/秒),若与 stats.bulletSpeed 混用,以调用方为准 arcHeight?: number; // 弧线高度(可选,具体实现可按需使用) homingStrength?: number; // 追踪强度(0~1 建议范围) homingDelay?: number; // 追踪延迟(秒) rotateSpeed?: number; // 渐近旋转速度(0~1,越大转向越快) } export type HitEffectType = 'normal_damage' | 'pierce_damage' | 'ricochet_damage' | 'explosion' | 'ground_burn'; export interface HitEffectConfig { type: HitEffectType; priority: number; // 效果叠加优先级(数值越小越先应用) damage?: number; // 基础伤害 pierceCount?: number; // 穿透次数 ricochetCount?: number; // 弹射次数 ricochetAngle?: number; // 弹射角度(度) radius?: number; // 爆炸半径 delay?: number; // 延迟(秒) duration?: number; // 地面燃烧持续时间(秒) tickInterval?: number; // 地面燃烧伤害间隔(秒) } export type LifecycleType = 'hit_destroy' | 'range_limit' | 'ricochet_counter' | 'ground_impact' | 'return_trip'; export interface BulletLifecycleConfig { type: LifecycleType; maxLifetime?: number; // 最大存活时间(秒) penetration?: number; // 最大穿透计数 ricochetCount?: number; // 最大弹射计数 returnToOrigin?: boolean; // 是否回到发射源 returnDelay?: number; // 返回延迟(秒) maxRange?: number; // 最大射程(像素) } export interface BulletConfig { count: BulletCountConfig; trajectory: BulletTrajectoryConfig; hitEffects: HitEffectConfig[]; lifecycle: BulletLifecycleConfig; visual?: VisualBulletConfig; shouldRotate?: boolean; // 是否启用持续自旋转或外观朝向 } export interface UpgradeConfig { maxLevel: number; levels: Record; } export interface InGameCostConfig { baseCost: number; shapeCosts: Record; } export interface WeaponConfig { id: string; name: string; type: string; weight?: number; unlockLevel?: number; rarityDamageMultipliers?: number[]; stats: WeaponStats; bulletConfig: BulletConfig; visualConfig?: Record; upgradeConfig?: UpgradeConfig; inGameCostConfig?: InGameCostConfig; } export interface BulletInitData { weaponId: string; firePosition: Vec3; direction?: Vec3; autoTarget?: boolean; weaponConfig?: WeaponConfig; sourceBlock?: Node | null; // 可选:用于回旋镖返回 } export interface SpawnInfo { position: Vec3; // 发射位置(局部或世界,由调用者约定) direction: Vec3; // 归一化方向 delayMs: number; // 延迟(毫秒) } export interface HitResult { didHit: boolean; damageApplied?: number; ricochet?: boolean; ricochetAngle?: number; pierced?: boolean; remainingPierce?: number; explosion?: boolean; explosionRadius?: number; spawnBurn?: boolean; burn?: { damagePerTick: number; duration: number; tickInterval: number } | null; }