
    i                     @    d dl mZmZmZmZ d dlmZmZ  G d d      Zy)    )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y)EntityManageru3   实体管理器 - 管理所有游戏实体和资源c                     g | _         g | _        g | _        t        | _        t
        | _        i | _        i | _        g | _	        d | _
        i | _        i | _        i | _        y N)plantszombiesbulletsr   sunr   brainsplant_cooldownszombie_cooldownseventslast_planted_typerolessettingsplayer_states)selfs    X/mnt/c/Users/DipsyHou/Desktop/workspace/PVZOnline/backend/game/managers/EntityManager.py__init__zEntityManager.__init__   sZ    !#"$"$#)1324,.04%'
(*8:    Nr   r   player_decksreturnc                 j   || _         || _        g | _        g | _        g | _        t
        | _        t        | _        i | _	        i | _
        g | _        d| _        i | _        |j                         D ]D  \  }}|dk(  si }|r||v r||   j                  di       xs i }t
        i |dd| j                  |<   F y)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DL$8*4044^RHNBG&!#$+)-	,""4( (r   eventc                 :    | j                   j                  |       y)ua   
        添加游戏事件
        
        Args:
            event: 事件数据字典
        N)r   append)r   r)   s     r   	add_eventzEntityManager.add_event8   s     	5!r   nowc                     i }t        | d      rj| j                  r^| j                  j                         D ]A  \  }}|d   i d||<   |d   j                         D ]  \  }}||z
  }|dkD  s|||   d   |<    C |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)d.@.@#11779e <!##	$ +0*<*B*B*D&FJ$s*CQw?B	$4V< +E  : 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R Rr   