
    ei	                     T    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y)    N)DictOptional)ZombieFactory)ZOMBIE_CONFIGSINITIAL_BRAINSBRAIN_BASE_RATEBRAIN_GROWTH_FACTORc                   R    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y)ZombieManageru6   僵尸管理器 - 使用工厂模式动态加载僵尸c                 (    || _         t        | _        y )N)emr   zombie_info)selfentity_managers     X/mnt/c/Users/DipsyHou/Desktop/workspace/PVZOnline/backend/game/managers/ZombieManager.py__init__zZombieManager.__init__	   s     )    datareturnNc                 $   |d   }|j                  dd      }| j                  j                  |      }|sy|d   }|d   }t        j                         }|| j                  j                  j                  |d      k  ry| j                  j
                  |k\  rzt        j                  ||      }|ra| j                  j                  j                  |       | j                  xj
                  |z  c_        ||z   | j                  j                  |<   yyy)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##F+F|
#iik))--fa8877>>T!&44VQ?J&&z2$&36>((0  "r   r   r$   c                     t        j                  ||      }|r&| j                  j                  j	                  |       yy)u   
        直接生成僵尸（用于波次系统）
        
        Args:
            row: 行位置
            z_type: 僵尸类型
        N)r   r    r   r!   r"   )r   r   r$   r'   s       r   spawn_zombiezZombieManager.spawn_zombie*   s4     #00=
GGOO"":. r   r&   dt
start_timec                    ||z
  dz  }|dkD  r8t         |z  d|t        z  z   z  }| j                  xj                  ||z  z  c_        | j                  j                  D ]  }|j                  ||| j                         ! | j                  j                  D cg c]!  }|j                  dkD  s|j                  s |# c}| j                  _        yc c}w )u   
        更新所有僵尸
        
        Args:
            now: 当前时间戳
            dt: 时间增量
            start_time: 游戏开始时间
        <   r      N)r   r	   r   r   r!   updatehpactive)r   r&   r+   r,   elapsed_minutes
brain_ratezs          r   r0   zZombieManager.update6   s     +r1Q(?:a/TgBg>ghJGGNNj2o-NAHHS"dgg& ! '+ggooOoahh1oOOs   C+C8C)__name__
__module____qualname____doc__r   r   r(   intstrr*   floatr0    r   r   r   r      s`    @*B B B:
/ 
/S 
/T 
/P% PU P P$ Pr   r   )r   typingr   r   game.factoriesr   game.configr   r   r   r	   r   r=   r   r   <module>rA      s"     ! ( \ \CP CPr   