EG/plugins/user/vegetation_ecosystem/plugin.py
2025-12-12 16:16:15 +08:00

303 lines
10 KiB
Python

"""
植被分布和生态模拟插件
为EG引擎提供完整的植被分布和生态系统模拟功能
"""
from .core.vegetation_manager import VegetationManager
from .core.ecosystem_manager import EcosystemManager
from .ecosystem.animal_simulator import AnimalSimulator
from .ecosystem.ecosystem_dynamics import EcosystemDynamics
from .ecosystem.eco_interactions import EcoInteractions
from .vegetation.vegetation_spawner import VegetationSpawner
from .vegetation.growth_simulator import GrowthSimulator
from .terrain.terrain_influence import TerrainInfluence
from .seasons.seasonal_effects import SeasonalEffects
from .visualization.eco_visualizer import EcoVisualizer
from .visualization.advanced_visuals import AdvancedVisuals
from .editor.eco_editor import EcoEditor
from .editor.preset_manager import PresetManager
from .utils.eco_utils import EcoUtils
class VegetationEcosystemPlugin:
"""
植被分布和生态模拟插件主类
整合所有植被和生态系统功能模块
"""
def __init__(self, engine):
"""
初始化植被分布和生态模拟插件
Args:
engine: EG引擎实例
"""
self.engine = engine
self.name = "VegetationEcosystem"
self.version = "1.0.0"
self.author = "EG Plugin System"
# 功能模块
self.vegetation_manager = None
self.ecosystem_manager = None
self.animal_simulator = None
self.ecosystem_dynamics = None
self.ecosystem_interactions = None
self.vegetation_spawner = None
self.growth_simulator = None
self.terrain_influence = None
self.seasonal_effects = None
self.eco_visualizer = None
self.advanced_visuals = None
self.eco_editor = None
self.preset_manager = None
self.eco_utils = None
# 插件状态
self.enabled = False
self.initialized = False
# 性能统计
self.stats = {
'vegetation_spawned': 0,
'ecosystem_updates': 0,
'animals_simulated': 0,
'growth_cycles': 0
}
print(f"✓ 植被分布和生态模拟插件 v{self.version} 已创建")
def initialize(self) -> bool:
"""
初始化插件
Returns:
是否初始化成功
"""
try:
print("正在初始化植被分布和生态模拟插件...")
# 初始化核心组件
self.vegetation_manager = VegetationManager(self)
self.ecosystem_manager = EcosystemManager(self)
self.animal_simulator = AnimalSimulator(self)
self.ecosystem_dynamics = EcosystemDynamics(self)
self.ecosystem_interactions = EcoInteractions(self)
self.vegetation_spawner = VegetationSpawner(self)
self.growth_simulator = GrowthSimulator(self)
self.terrain_influence = TerrainInfluence(self)
self.seasonal_effects = SeasonalEffects(self)
self.eco_visualizer = EcoVisualizer(self)
self.advanced_visuals = AdvancedVisuals(self)
self.eco_editor = EcoEditor(self)
self.preset_manager = PresetManager(self)
self.eco_utils = EcoUtils(self)
# 初始化各个模块
modules = [
self.vegetation_manager,
self.ecosystem_manager,
self.animal_simulator,
self.ecosystem_dynamics,
self.ecosystem_interactions,
self.vegetation_spawner,
self.growth_simulator,
self.terrain_influence,
self.seasonal_effects,
self.eco_visualizer,
self.advanced_visuals,
self.eco_editor,
self.preset_manager,
self.eco_utils
]
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.vegetation_manager,
self.ecosystem_manager,
self.animal_simulator,
self.ecosystem_dynamics,
self.ecosystem_interactions,
self.vegetation_spawner,
self.growth_simulator,
self.terrain_influence,
self.seasonal_effects,
self.eco_visualizer,
self.advanced_visuals,
self.eco_editor,
self.preset_manager,
self.eco_utils
]
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.vegetation_manager,
self.ecosystem_manager,
self.animal_simulator,
self.ecosystem_dynamics,
self.ecosystem_interactions,
self.vegetation_spawner,
self.growth_simulator,
self.terrain_influence,
self.seasonal_effects,
self.eco_visualizer,
self.advanced_visuals,
self.eco_editor,
self.preset_manager,
self.eco_utils
]
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.vegetation_manager,
self.ecosystem_manager,
self.animal_simulator,
self.ecosystem_dynamics,
self.ecosystem_interactions,
self.vegetation_spawner,
self.growth_simulator,
self.terrain_influence,
self.seasonal_effects,
self.eco_visualizer,
self.advanced_visuals,
self.eco_editor,
self.preset_manager,
self.eco_utils
]
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.vegetation_manager,
self.ecosystem_manager,
self.animal_simulator,
self.ecosystem_dynamics,
self.ecosystem_interactions,
self.vegetation_spawner,
self.growth_simulator,
self.terrain_influence,
self.seasonal_effects,
self.eco_visualizer,
self.advanced_visuals,
self.eco_editor,
self.preset_manager,
self.eco_utils
]
for module in modules:
if module:
module.update(dt)
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 = {
'vegetation_spawned': 0,
'ecosystem_updates': 0,
'animals_simulated': 0,
'growth_cycles': 0
}
print("✓ 植被分布和生态模拟统计信息已重置")