| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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<string, { cost?: number; damage?: number }>; }
- export interface InGameCostConfig { baseCost: number; shapeCosts: Record<string, number>; }
- export interface WeaponConfig {
- id: string;
- name: string;
- type: string;
- weight?: number;
- unlockLevel?: number;
- rarityDamageMultipliers?: number[];
- stats: WeaponStats;
- bulletConfig: BulletConfig;
- visualConfig?: Record<string, any>;
- 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;
- }
|