"""
流体材质系统模块
负责流体材质的定义和管理
"""

from panda3d.core import Vec3, Vec4
import time

class FluidMaterial:
    """
    流体材质类
    定义流体的物理属性和视觉属性
    """
    
    # 预定义流体类型
    TYPE_WATER = 'water'
    TYPE_OIL = 'oil'
    TYPE_LAVA = 'lava'
    TYPE_SLIME = 'slime'
    TYPE_BLOOD = 'blood'
    
    def __init__(self, name, properties=None, fluid_type=TYPE_WATER):
        """
        初始化流体材质
        
        Args:
            name (str): 材质名称
            properties (dict): 材质属性字典
            fluid_type (str): 流体类型
        """
        self.name = name
        self.fluid_type = fluid_type
        self.creation_time = time.time()
        
        # 默认流体属性
        self.properties = {
            # 物理属性
            'density': 1000.0,           # 密度 (kg/m³)
            'viscosity': 0.001,          # 动力粘度 (Pa·s)
            'kinematic_viscosity': 1e-6, # 运动粘度 (m²/s)
            'surface_tension': 0.072,    # 表面张力 (N/m)
            'compressibility': 4.5e-10,  # 压缩系数 (Pa⁻¹)
            'bulk_modulus': 2.2e9,       # 体积模量 (Pa)
            'vapor_pressure': 2338.0,    # 蒸汽压 (Pa)
            'thermal_conductivity': 0.6, # 热导率 (W/(m·K))
            'specific_heat': 4182.0,     # 比热容 (J/(kg·K))
            
            # 视觉属性
            'color': Vec4(0.0, 0.5, 1.0, 0.8),  # 颜色 (RGBA)
            'emissive': Vec3(0, 0, 0),          # 自发光
            'roughness': 0.1,                   # 粗糙度
            'metallic': 0.0,                    # 金属度
            'specular': 0.9,                    # 镜面反射
            'transparency': 0.8,                # 透明度
            'refraction_index': 1.33,           # 折射率
            
            # 特殊属性
            'flammability': 0.0,                # 易燃性
            'toxicity': 0.0,                    # 毒性
            'temperature': 20.0,                # 温度 (°C)
            'phase': 'liquid',                  # 相态 (liquid, gas, solid)
        }
        
        # 应用自定义属性
        if properties:
            self.properties.update(properties)
            
        # 根据流体类型设置默认属性
        self._set_defaults_by_type()
        
        print(f"流体材质创建完成: {name} ({fluid_type})")
        
    def _set_defaults_by_type(self):
        """
        根据流体类型设置默认属性
        """
        if self.fluid_type == self.TYPE_WATER:
            self.properties.update({
                'density': 1000.0,
                'viscosity': 0.001,
                'color': Vec4(0.0, 0.5, 1.0, 0.8),
                'refraction_index': 1.33,
                'temperature': 20.0,
            })
        elif self.fluid_type == self.TYPE_OIL:
            self.properties.update({
                'density': 900.0,
                'viscosity': 0.1,
                'color': Vec4(0.8, 0.6, 0.2, 0.9),
                'refraction_index': 1.45,
                'temperature': 20.0,
            })
        elif self.fluid_type == self.TYPE_LAVA:
            self.properties.update({
                'density': 3000.0,
                'viscosity': 100.0,
                'color': Vec4(1.0, 0.3, 0.0, 0.9),
                'emissive': Vec3(1.0, 0.2, 0.0),
                'temperature': 1000.0,
                'flammability': 0.9,
            })
        elif self.fluid_type == self.TYPE_SLIME:
            self.properties.update({
                'density': 1200.0,
                'viscosity': 10.0,
                'color': Vec4(0.2, 0.8, 0.2, 0.9),
                'specular': 0.3,
                'temperature': 20.0,
            })
        elif self.fluid_type == self.TYPE_BLOOD:
            self.properties.update({
                'density': 1060.0,
                'viscosity': 0.004,
                'color': Vec4(0.8, 0.0, 0.0, 0.9),
                'specular': 0.2,
                'temperature': 37.0,
            })
            
    def set_property(self, name, value):
        """
        设置材质属性
        
        Args:
            name (str): 属性名称
            value: 属性值
        """
        self.properties[name] = value
        
    def get_property(self, name, default=None):
        """
        获取材质属性
        
        Args:
            name (str): 属性名称
            default: 默认值
            
        Returns:
            属性值
        """
        return self.properties.get(name, default)
        
    def get_density(self):
        """
        获取密度
        
        Returns:
            float: 密度值
        """
        return self.properties['density']
        
    def get_viscosity(self):
        """
        获取粘度
        
        Returns:
            float: 粘度值
        """
        return self.properties['viscosity']
        
    def get_color(self):
        """
        获取颜色
        
        Returns:
            Vec4: 颜色值
        """
        return self.properties['color']
        
    def is_flammable(self):
        """
        检查是否易燃
        
        Returns:
            bool: 是否易燃
        """
        return self.properties['flammability'] > 0.5
        
    def is_toxic(self):
        """
        检查是否有毒
        
        Returns:
            bool: 是否有毒
        """
        return self.properties['toxicity'] > 0.5