""" 爆炸效果 """ from panda3d.core import Vec3, Point3 from ..core.particle_emitter import ParticleEmitter class ExplosionEffect: """ 爆炸效果 模拟爆炸效果 """ @staticmethod def create_effect(world, position: Point3 = None, config: Dict = None) -> str: """ 创建爆炸效果 Args: world: 3D世界对象 position: 发射器位置 config: 自定义配置 Returns: 发射器ID """ if position is None: position = Point3(0, 0, 0) if config is None: config = {} # 默认配置 default_config = { 'particle_type': 'explosion', 'emission_rate': 200, 'burst_count': 100, 'particle_lifetime': 1.5, 'start_color': Vec3(1.0, 0.8, 0.0), 'end_color': Vec3(1.0, 0.2, 0.0), 'start_size': 0.1, 'end_size': 0.5, 'velocity': Vec3(0, 0, 0), 'velocity_variation': 2.0, 'gravity_scale': 0.5, 'duration': 0.2, 'emitter_shape': 'sphere', 'emitter_radius': 0.1 } # 合并自定义配置 effect_config = {**default_config, **config} # 创建发射器 emitter = ParticleEmitter( "explosion_emitter", "explosion", position, world, effect_config ) return emitter.emitter_id @staticmethod def update_effect(emitter: ParticleEmitter, config: Dict): """ 更新爆炸效果 Args: emitter: 粒子发射器 config: 更新配置 """ # 更新发射器参数 for key, value in config.items(): if hasattr(emitter, key): setattr(emitter, key, value) @staticmethod def get_default_config() -> Dict: """ 获取默认配置 Returns: 默认配置字典 """ return { 'particle_type': 'explosion', 'emission_rate': 200, 'burst_count': 100, 'particle_lifetime': 1.5, 'start_color': Vec3(1.0, 0.8, 0.0), 'end_color': Vec3(1.0, 0.2, 0.0), 'start_size': 0.1, 'end_size': 0.5, 'velocity': Vec3(0, 0, 0), 'velocity_variation': 2.0, 'gravity_scale': 0.5, 'duration': 0.2, 'emitter_shape': 'sphere', 'emitter_radius': 0.1 }