
    &`i0                         d dl Z d dlZd dlZd dlmZmZmZ d dlZd dl	m
Z
mZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ  e j        e          Ze G d d	e                      ZdS )
    N)CallableOptionalTuple)BoxMultiDiscreter   )MultiAgentEnv)
PolicySpec)OldAPIStack)AgentIDMultiAgentDictPolicyIDc                        e Zd ZdZdZdZ	 	 	 	 	 	 dded	ee         d
ede	dedef fdZ
dedeeeeeef         fdZddddeeef         fdZd Zededeeeegef         f         fd            Z xZS )
Unity3DEnvi  i  r   NF,    	file_nameportseedno_graphicstimeout_waitepisode_horizonc                 z   t                                                       |t          d           dd l}ddlm} d }		 |	't          j        t          j	        dd                     |p|r| j
        n| j        }	|rt          j        nd}
t          xj        dz  c_        	  |||
|	|||          | _        t          d                    |	|
z                        n# |j        j        $ r Y nw xY w| j        j                            d	          | _        d
 | j        D             | _        || _        d| _        d S )NzNo game binary provided, will use a running Unity editor instead.
Make sure you are pressing the Play (|>) button in your editor to start.r   )UnityEnvironmentT   
   )r   	worker_id	base_portr   r   r   z$Created UnityEnvironment for port {}.c                 ,    g | ]}t          |          S  )int).0ss     v/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/env/wrappers/unity3d_env.py
<listcomp>z'Unity3DEnv.__init__.<locals>.<listcomp>O   s    ===qCFF===    )super__init__printmlagents_envsmlagents_envs.environmentr   timesleeprandomrandint_BASE_PORT_ENVIRONMENT_BASE_PORT_EDITORr   
_WORKER_ID	unity_envformat	exceptionUnityWorkerInUseExceptionAPI_VERSIONsplitapi_versionr   episode_timesteps)selfr   r   r   r   r   r   r*   r   port_
worker_id_	__class__s              r$   r(   zUnity3DEnv.__init__   s    	(   	>>>>>> 	  
6>!R00111 /8T++d>T 
 3<B..J!!Q&!!!1!1'(# +!-" " " <CCEJDVWWXXX  !*D   /	:  >5;;C@@==D,<===  /!"s   !;C C/.C/action_dictreturnc           	      n   ddl m} g }| j        j        D ]}| j        d         dk    s"| j        d         dk    r| j        d         dk    rg }| j                            |          d         j        D ]J}|d                    |          z   }|                    |           |                    ||                    K|rs|d         j	        t          j        k    r |t          j        |                    }n |t          j        |                    }| j                            ||           | j                            |          d         j                                        D ]Q}|d                    |          z   }|                    |           | j                            ||||                    R| j                                         |                                 \  }	}
}}}| xj        dz  c_        | j        | j        k    r|	|
|t+          dd	ifi d
 |D             |fS |	|
|||fS )Nr   )ActionTupler      _{})
continuous)discrete__all__Tc                     i | ]}|d S )Tr    )r"   agent_ids     r$   
<dictcomp>z#Unity3DEnv.step.<locals>.<dictcomp>   s    *U*U*Uh8T*U*U*Ur&   )mlagents_envs.base_envrB   r3   behavior_specsr9   	get_stepsrI   r4   appenddtypenpfloat32arrayset_actionsagent_id_to_indexkeysset_action_for_agentstep_get_step_resultsr:   r   dict)r;   r?   rB   
all_agentsbehavior_nameactionsrI   keyaction_tupleobsrewardsterminateds
truncatedsinfoss                 r$   rW   zUnity3DEnv.stepV   s   
 	766666 
!^: 	 	M "Q&& #q((T-=a-@A-E-E $ 8 8 G G J S 5 5H'%,,x*@*@@C%%c***NN;s#34444 Lqz'2:55'2{bhw>O>O'P'P'P'2{BHW<M<M'N'N'NN..}lKKK !% 8 8 G G!#DDFF H (%,,x*@*@@C%%c***N77%xS1A    	7;7M7M7O7O4Wk:u 	!#!D$888i&VV*U*U**U*U*UVV  G[*e;;r&   )r   optionsc                ~    d| _         | j                                         |                                 \  }}}}}||fS )z?Resets the entire Unity3D scene (a single multi-agent episode).r   )r:   r3   resetrX   )r;   r   rd   r_   _rc   s         r$   rf   zUnity3DEnv.reset   sF     "#"4466Q1eEzr&   c                   
 i }i }i }| j         j        D ]R}| j                             |          \  }}|j                                        D ]}\  }
|d                    |          z   }t          
fd|j        D                       }	t          |	          dk    r|	d         n|	}	|	||<   |j	        
         |j
        
         z   ||<   ~|j                                        D ]\  }
|d                    |          z   }||vrBt          
fd|j        D                       }	t          |	          dk    r|	d         n|	x||<   }	|j	        
         |j
        
         z   ||<   T||ddiddi|fS )NrD   c              3   (   K   | ]}|         V  d S Nr    r"   oidxs     r$   	<genexpr>z/Unity3DEnv._get_step_results.<locals>.<genexpr>   s'      >>a1S6>>>>>>r&   r   r   c              3   (   K   | ]}|         V  d S rj   r    rk   s     r$   rn   z/Unity3DEnv._get_step_results.<locals>.<genexpr>   s'      BB!qvBBBBBBr&   rG   F)r3   rL   rM   rT   itemsr4   tupler_   lenrewardgroup_reward)r;   r_   r`   rc   r[   decision_stepsterminal_stepsrI   r]   osrm   s             @r$   rX   zUnity3DEnv._get_step_results   s   !^: 	 	M-1^-E-Em-T-T*NN
 "0!A!G!G!I!I  ##ell8&<&<<>>>>>+=>>>>>!"ggllRUUC")#.1LS1QQ  "0!A!G!G!I!I 
 
##ell8&<&<< c>>BBBB~/ABBBBBB-0WW\\BqEErACHr")#.1LS1QQ 
 Gi/)U1CUJJr&   	game_namec                 	    t          t          d          t          d          d          t          t          d          t          d          d          t          t          d          t          d          d          t          t          t          d          t          d          d          t          t          d          t          d          d          t          t          d          t          d          d          t          t          d          t          d          d          g          t          t          dd	d
          t          dd	d          g          t          t          d          t          d          d          t          t          t          d          t          d          d          t          t          d          t          d          d          g          t          t          t          d          t          d          d          t          t          d          t          d          d          t          t          d          t          d          d          g          t          t          d          t          d          d          t          t          d          t          d          d          t          t          d          t          d          d          t          t          t          d          t          d          d          t          t          d          t          d          d          g          d}t          dd	dt          j                  t          dd	dt          j                  t          g d          t          dg          t          g d          t          g d          t          g d          t          g d          t          dd	d          t          dg          t          dd	d          t          g d          d} dk    r?t          |d         |d                    t          |d!         |d!                    d"}d# }ni d$k    r?t          |d%         |d%                    t          |d%         |d%                    d&}d' }n$ t          |          |                     i} fd(}||fS ))Nz-infinf)   )-   )(   r}      )8   )rC   g      g      ?)i  )H   )i  )   )?   )      )r   )   )T   r      )   )1   )3DBall
3DBallHardGridFoodCollectorPyramidsSoccerPlayerGoalieStrikerSorterTennisVisualHallwayWalkerFoodCollector)   )rO   )r   r   r   r      )r   r   r   )r   )'   )r   r   r   r   r   r   r   r   r   r   r   r   SoccerStrikersVsGoalier   )observation_spaceaction_spacer   )r   r   c                     d| v rdndS )Nr   r   r    rI   episodeworkerkwargss       r$   policy_mapping_fnzAUnity3DEnv.get_policy_configs_for_game.<locals>.policy_mapping_fn"  s    $-$9$9yyxGr&   
SoccerTwosr   )PurplePlayer
BluePlayerc                     d| v rdndS )N1_r   r   r    r   s       r$   r   zAUnity3DEnv.get_policy_configs_for_game.<locals>.policy_mapping_fn1  s    '+x'7'7||^Kr&   c                     S rj   r    )rI   r   r   r   rx   s       r$   r   zAUnity3DEnv.get_policy_configs_for_game.<locals>.policy_mapping_fn<  s	      r&   )r   float
TupleSpacerP   rQ   r   r	   )rx   
obs_spacesaction_spacespoliciesr   s   `    r$   get_policy_configs_for_gamez&Unity3DEnv.get_policy_configs_for_game   s    %--ut<<eFmmU5\\5AA!$U6]]E%LL+!N!N"fuU||U;;fuU||U;;fuU||U;;fuU||T::	  'c6**c5))  %--uv>>!fuU||V<<fuU||U;;  !fe  fuU||U;;fuU||T::  %--uu== vekJJ%--uv>>'fuU||U;;fuU||T:: k;
 ;

| $T<<<dCRZ@@@!.|||!<!<%qc**#III..$YYY//))))44#III..$T***A3//$U++*<<<88/
 
6 000$&0&:!.x!8   &&0&;!.y!9  	 	HH H H H ,&& *&0&@!.~!>! ! ! )&0&@!.~!>  	 	HL L L L
 :&0&;!.y!9  H! ! ! ! ! ***r&   )NNr   Fr   r   )__name__
__module____qualname__r1   r0   r2   strr   r!   boolr(   r   r   rW   rf   rX   staticmethodrY   r   r   r   r   __classcell__)r>   s   @r$   r   r      sz        !J "!#:# :#:# sm:# 	:#
 :# :# :# :# :# :# :# :#x6<)6<	V
6< 6< 6< 6<r D  	~~-	.   K K KB F+F+	tXwi122	3F+ F+ F+ \F+ F+ F+ F+ F+r&   r   )loggingr.   r,   typingr   r   r   numpyrP   gymnasium.spacesr   r   r   ray.rllib.env.multi_agent_envr   ray.rllib.policy.policyr	   ray.rllib.utils.annotationsr
   ray.rllib.utils.typingr   r   r   	getLoggerr   loggerr   r    r&   r$   <module>r      s      , , , , , , , , , ,     D D D D D D D D D D 7 7 7 7 7 7 . . . . . . 3 3 3 3 3 3 D D D D D D D D D D		8	$	$ m+ m+ m+ m+ m+ m+ m+ m+ m+ m+r&   