340 lines
11 KiB
Python
340 lines
11 KiB
Python
"""
|
|
水体和流体模拟插件
|
|
为EG引擎提供完整的水体和流体模拟功能
|
|
"""
|
|
|
|
from .core.fluid_manager import FluidManager
|
|
from .core.water_manager import WaterManager
|
|
from .fluids.fluid_dynamics import FluidDynamics
|
|
from .fluids.fluid_solver import FluidSolver
|
|
from .water.water_surface import WaterSurface
|
|
from .water.wave_system import WaveSystem
|
|
from .rendering.fluid_renderer import FluidRenderer
|
|
from .rendering.water_renderer import WaterRenderer
|
|
from .effects.fluid_effects import FluidEffects
|
|
from .effects.water_effects import WaterEffects
|
|
from .interaction.fluid_interaction import FluidInteraction
|
|
from .interaction.object_interaction import ObjectInteraction
|
|
from .audio.fluid_audio import FluidAudio
|
|
from .particles.fluid_particles import FluidParticles
|
|
from .editor.fluid_editor import FluidEditor
|
|
from .editor.preset_manager import PresetManager
|
|
from .utils.fluid_utils import FluidUtils
|
|
from .physics.fluid_physics import FluidPhysics
|
|
|
|
class FluidSimulationPlugin:
|
|
"""
|
|
水体和流体模拟插件主类
|
|
整合所有水体和流体模拟功能模块
|
|
"""
|
|
|
|
def __init__(self, engine):
|
|
"""
|
|
初始化水体和流体模拟插件
|
|
|
|
Args:
|
|
engine: EG引擎实例
|
|
"""
|
|
self.engine = engine
|
|
self.name = "FluidSimulation"
|
|
self.version = "1.0.0"
|
|
self.author = "EG Plugin System"
|
|
|
|
# 功能模块
|
|
self.fluid_manager = None
|
|
self.water_manager = None
|
|
self.fluid_dynamics = None
|
|
self.fluid_solver = None
|
|
self.water_surface = None
|
|
self.wave_system = None
|
|
self.fluid_renderer = None
|
|
self.water_renderer = None
|
|
self.fluid_effects = None
|
|
self.water_effects = None
|
|
self.fluid_interaction = None
|
|
self.object_interaction = None
|
|
self.fluid_audio = None
|
|
self.fluid_particles = None
|
|
self.fluid_editor = None
|
|
self.preset_manager = None
|
|
self.fluid_utils = None
|
|
self.fluid_physics = None
|
|
|
|
# 插件状态
|
|
self.enabled = False
|
|
self.initialized = False
|
|
|
|
# 性能统计
|
|
self.stats = {
|
|
'fluid_cells': 0,
|
|
'water_vertices': 0,
|
|
'simulation_updates': 0,
|
|
'render_calls': 0,
|
|
'particles_spawned': 0
|
|
}
|
|
|
|
print(f"✓ 水体和流体模拟插件 v{self.version} 已创建")
|
|
|
|
def initialize(self) -> bool:
|
|
"""
|
|
初始化插件
|
|
|
|
Returns:
|
|
是否初始化成功
|
|
"""
|
|
try:
|
|
print("正在初始化水体和流体模拟插件...")
|
|
|
|
# 初始化核心组件
|
|
self.fluid_manager = FluidManager(self)
|
|
self.water_manager = WaterManager(self)
|
|
self.fluid_dynamics = FluidDynamics(self)
|
|
self.fluid_solver = FluidSolver(self)
|
|
self.water_surface = WaterSurface(self)
|
|
self.wave_system = WaveSystem(self)
|
|
self.fluid_renderer = FluidRenderer(self)
|
|
self.water_renderer = WaterRenderer(self)
|
|
self.fluid_effects = FluidEffects(self)
|
|
self.water_effects = WaterEffects(self)
|
|
self.fluid_interaction = FluidInteraction(self)
|
|
self.object_interaction = ObjectInteraction(self)
|
|
self.fluid_audio = FluidAudio(self)
|
|
self.fluid_particles = FluidParticles(self)
|
|
self.fluid_editor = FluidEditor(self)
|
|
self.preset_manager = PresetManager(self)
|
|
self.fluid_utils = FluidUtils(self)
|
|
self.fluid_physics = FluidPhysics(self)
|
|
|
|
# 初始化各个模块
|
|
modules = [
|
|
self.fluid_manager,
|
|
self.water_manager,
|
|
self.fluid_dynamics,
|
|
self.fluid_solver,
|
|
self.water_surface,
|
|
self.wave_system,
|
|
self.fluid_renderer,
|
|
self.water_renderer,
|
|
self.fluid_effects,
|
|
self.water_effects,
|
|
self.fluid_interaction,
|
|
self.object_interaction,
|
|
self.fluid_audio,
|
|
self.fluid_particles,
|
|
self.fluid_editor,
|
|
self.preset_manager,
|
|
self.fluid_utils,
|
|
self.fluid_physics
|
|
]
|
|
|
|
for module in modules:
|
|
if module and not module.initialize():
|
|
print(f"✗ 模块初始化失败: {module.__class__.__name__}")
|
|
return False
|
|
|
|
self.initialized = True
|
|
print("✓ 水体和流体模拟插件初始化完成")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ 水体和流体模拟插件初始化失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def enable(self) -> bool:
|
|
"""
|
|
启用插件
|
|
|
|
Returns:
|
|
是否启用成功
|
|
"""
|
|
try:
|
|
if not self.initialized:
|
|
print("✗ 插件未初始化")
|
|
return False
|
|
|
|
print("正在启用水体和流体模拟插件...")
|
|
|
|
# 启用各个模块
|
|
modules = [
|
|
self.fluid_manager,
|
|
self.water_manager,
|
|
self.fluid_dynamics,
|
|
self.fluid_solver,
|
|
self.water_surface,
|
|
self.wave_system,
|
|
self.fluid_renderer,
|
|
self.water_renderer,
|
|
self.fluid_effects,
|
|
self.water_effects,
|
|
self.fluid_interaction,
|
|
self.object_interaction,
|
|
self.fluid_audio,
|
|
self.fluid_particles,
|
|
self.fluid_editor,
|
|
self.preset_manager,
|
|
self.fluid_utils,
|
|
self.fluid_physics
|
|
]
|
|
|
|
for module in modules:
|
|
if module and not module.enable():
|
|
print(f"✗ 模块启用失败: {module.__class__.__name__}")
|
|
return False
|
|
|
|
self.enabled = True
|
|
print("✓ 水体和流体模拟插件已启用")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"✗ 水体和流体模拟插件启用失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
return False
|
|
|
|
def disable(self):
|
|
"""禁用插件"""
|
|
try:
|
|
if not self.enabled:
|
|
return
|
|
|
|
print("正在禁用水体和流体模拟插件...")
|
|
|
|
# 禁用各个模块
|
|
modules = [
|
|
self.fluid_manager,
|
|
self.water_manager,
|
|
self.fluid_dynamics,
|
|
self.fluid_solver,
|
|
self.water_surface,
|
|
self.wave_system,
|
|
self.fluid_renderer,
|
|
self.water_renderer,
|
|
self.fluid_effects,
|
|
self.water_effects,
|
|
self.fluid_interaction,
|
|
self.object_interaction,
|
|
self.fluid_audio,
|
|
self.fluid_particles,
|
|
self.fluid_editor,
|
|
self.preset_manager,
|
|
self.fluid_utils,
|
|
self.fluid_physics
|
|
]
|
|
|
|
for module in modules:
|
|
if module:
|
|
module.disable()
|
|
|
|
self.enabled = False
|
|
print("✓ 水体和流体模拟插件已禁用")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 水体和流体模拟插件禁用失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def finalize(self):
|
|
"""清理插件资源"""
|
|
try:
|
|
print("正在清理水体和流体模拟插件资源...")
|
|
|
|
# 清理各个模块
|
|
modules = [
|
|
self.fluid_manager,
|
|
self.water_manager,
|
|
self.fluid_dynamics,
|
|
self.fluid_solver,
|
|
self.water_surface,
|
|
self.wave_system,
|
|
self.fluid_renderer,
|
|
self.water_renderer,
|
|
self.fluid_effects,
|
|
self.water_effects,
|
|
self.fluid_interaction,
|
|
self.object_interaction,
|
|
self.fluid_audio,
|
|
self.fluid_particles,
|
|
self.fluid_editor,
|
|
self.preset_manager,
|
|
self.fluid_utils,
|
|
self.fluid_physics
|
|
]
|
|
|
|
for module in modules:
|
|
if module:
|
|
module.finalize()
|
|
|
|
self.initialized = False
|
|
print("✓ 水体和流体模拟插件资源已清理")
|
|
|
|
except Exception as e:
|
|
print(f"✗ 水体和流体模拟插件资源清理失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def update(self, dt: float):
|
|
"""
|
|
更新插件状态
|
|
|
|
Args:
|
|
dt: 时间增量(秒)
|
|
"""
|
|
try:
|
|
if not self.enabled:
|
|
return
|
|
|
|
# 更新各个模块
|
|
modules = [
|
|
self.fluid_manager,
|
|
self.water_manager,
|
|
self.fluid_dynamics,
|
|
self.fluid_solver,
|
|
self.water_surface,
|
|
self.wave_system,
|
|
self.fluid_renderer,
|
|
self.water_renderer,
|
|
self.fluid_effects,
|
|
self.water_effects,
|
|
self.fluid_interaction,
|
|
self.object_interaction,
|
|
self.fluid_audio,
|
|
self.fluid_particles,
|
|
self.fluid_editor,
|
|
self.preset_manager,
|
|
self.fluid_utils,
|
|
self.fluid_physics
|
|
]
|
|
|
|
for module in modules:
|
|
if module:
|
|
module.update(dt)
|
|
|
|
# 更新统计信息
|
|
self.stats['simulation_updates'] += 1
|
|
|
|
except Exception as e:
|
|
print(f"✗ 水体和流体模拟插件更新失败: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
|
|
def get_stats(self) -> dict:
|
|
"""
|
|
获取插件统计信息
|
|
|
|
Returns:
|
|
统计信息字典
|
|
"""
|
|
return self.stats.copy()
|
|
|
|
def reset_stats(self):
|
|
"""重置统计信息"""
|
|
self.stats = {
|
|
'fluid_cells': 0,
|
|
'water_vertices': 0,
|
|
'simulation_updates': 0,
|
|
'render_calls': 0,
|
|
'particles_spawned': 0
|
|
}
|
|
print("✓ 水体和流体模拟统计信息已重置") |