
    vai                     H    d dl mZmZmZmZ d dlmZmZ  G d d          ZdS )    )DictListAnyOptional)INITIAL_SUNINITIAL_BRAINSc            	           e Zd ZdZd Zddeeef         deeef         dee         ddfdZ	d	eeef         ddfd
Z
dedeeeeef         f         fdZdS )EntityManageru3   实体管理器 - 管理所有游戏实体和资源c                     g | _         g | _        g | _        t          | _        t
          | _        i | _        i | _        g | _	        d | _
        i | _        i | _        i | _        d S N)plantszombiesbulletsr   sunr   brainsplant_cooldownszombie_cooldownseventslast_planted_typerolessettingsplayer_states)selfs    @/root/workspace/PVZOnline/backend/game/managers/EntityManager.py__init__zEntityManager.__init__   s`    !#"$"$#)1324,.04%'
(*8:    Nr   r   player_decksreturnc                 v   || _         || _        g | _        g | _        g | _        t
          | _        t          | _        i | _	        i | _
        g | _        d| _        i | _        |                                D ]E\  }}|dk    r:i }|r"||v r||                             di           pi }t
          i |dd| j        |<   FdS )u   
        重置游戏状态
        
        Args:
            settings: 游戏设置
            roles: 玩家角色分配
            player_decks: 玩家卡组配置
        Nplantplant_levels)r   	cooldownsr!   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   itemsget)r   r   r   r   userrolelvl_maps          r   resetzEntityManager.reset   s     !
$! "!%  ++-- 
	 
	JD$w ODL$8$8*4044^RHHNBG&!#$+)-	, ,"4(
	 
	r   eventc                 :    | j                             |           dS )ua   
        添加游戏事件
        
        Args:
            event: 事件数据字典
        N)r   append)r   r)   s     r   	add_eventzEntityManager.add_event8   s      	5!!!!!r   nowc                 
   i }t          | d          rp| j        ri| j                                        D ]O\  }}|d         i d||<   |d                                         D ]!\  }}||z
  }|dk    r|||         d         |<   "P|S )u   
        获取处理后的玩家状态（包含剩余冷却时间）
        
        Args:
            now: 当前时间戳
            
        Returns:
            处理后的玩家状态字典
        r   r   )r   r"   r"   r   )hasattrr   r#   )r   r-   	processedr%   statep_type
avail_timerems           r   get_processed_player_statesz)EntityManager.get_processed_player_statesA   s     	4)) 		Cd.@ 		C#17799 C Ce <!## #	$ +0*<*B*B*D*D C C&FJ$s*CQww?B	$4V<C r   r   )__name__
__module____qualname____doc__r   r   strr   r   r(   r,   floatr5    r   r   r
   r
      s        ==; ; ;! !d38n !T#s(^ !S[\`Sa !mq ! ! ! !F"tCH~ "$ " " " "u c4S>>Q9R      r   r
   N)	typingr   r   r   r   game.configr   r   r
   r<   r   r   <module>r?      s}    , , , , , , , , , , , , 3 3 3 3 3 3 3 3R R R R R R R R R Rr   