
    wai	                     \    d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	m
Z
  G d d          ZdS )    N)DictOptional)ZombieFactory)ZOMBIE_CONFIGSINITIAL_BRAINSBRAIN_BASE_RATEBRAIN_GROWTH_FACTORc                   T    e Zd ZdZd ZdeddfdZdededdfd	Z	d
e
de
de
ddfdZdS )ZombieManageru6   僵尸管理器 - 使用工厂模式动态加载僵尸c                 ,    || _         t          | _        d S )N)emr   zombie_info)selfentity_managers     @/root/workspace/PVZOnline/backend/game/managers/ZombieManager.py__init__zZombieManager.__init__	   s     )    datareturnNc                    |d         }|                     dd          }| j                             |          }|sdS |d         }|d         }t          j                    }|| j        j                             |d          k     rdS | j        j        |k    r_t          j        ||          }|rJ| j        j        	                    |           | j        xj        |z  c_        ||z   | j        j        |<   dS dS dS )us   
        处理生成僵尸请求
        
        Args:
            data: 包含row, zombie_type的字典
        rowzombie_typenormalNcostcooldownr   )
getr   timer   zombie_cooldownsbrainsr   create_zombiezombiesappend)	r   r   rz_typeinfor   r   now
new_zombies	            r   handle_spawn_zombiez!ZombieManager.handle_spawn_zombie   s    K-22##F++ 	FF|
#ikk)--fa8888F7>T!!&4VQ??J B&&z222$&36>(000 "!B Br   r   r$   c                 v    t          j        ||          }|r!| j        j                            |           dS dS )u   
        直接生成僵尸（用于波次系统）
        
        Args:
            row: 行位置
            z_type: 僵尸类型
        N)r   r    r   r!   r"   )r   r   r$   r'   s       r   spawn_zombiezZombieManager.spawn_zombie*   sF     #0==
 	/GO"":.....	/ 	/r   r&   dt
start_timec                    ||z
  dz  }|dk    r0t           |z  d|t          z  z   z  }| j        xj        ||z  z  c_        | j        j        D ]}|                    ||| j                   d | j        j        D             | j        _        dS )u   
        更新所有僵尸
        
        Args:
            now: 当前时间戳
            dt: 时间增量
            start_time: 游戏开始时间
        <   r      c                 6    g | ]}|j         d k    |j        |S )r   )hpactive).0zs     r   
<listcomp>z(ZombieManager.update.<locals>.<listcomp>I   s%    OOOah1r   N)r   r	   r   r   r!   update)r   r&   r+   r,   elapsed_minutes
brain_rater4   s          r   r6   zZombieManager.update6   s     +r1Q(?:a/TgBg>ghJGNNj2o-NN 	' 	'AHHS"dg&&&& POdgoOOOr   )__name__
__module____qualname____doc__r   r   r(   intstrr*   floatr6    r   r   r   r      s        @@* * *B B B B B B:
/ 
/S 
/T 
/ 
/ 
/ 
/P% PU P P$ P P P P P Pr   r   )r   typingr   r   game.factoriesr   game.configr   r   r   r	   r   r@   r   r   <module>rD      s     ! ! ! ! ! ! ! ! ( ( ( ( ( ( \ \ \ \ \ \ \ \ \ \ \ \CP CP CP CP CP CP CP CP CP CPr   