
    Ii-                        % S r SSKJrJr  SSKJr  SSKJr  SSKJ	r	J
r
   " S S\\5      r " S	 S
\\5      r " S S\\5      r " S S\\5      r " S S\\5      r " S S\\5      r\R$                  \
R&                  \
R(                  \
R(                  /\R*                  \
R&                  \
R,                  \
R.                  /\R0                  \
R&                  \
R2                  /\R4                  \
R.                  \
R.                  /\R6                  \
R,                  \
R,                  \
R.                  /0r\\\\   4   \S'   \R$                  S\R*                  S\R0                  S\R4                  S\R6                  S0r \\\4   \S'   \RB                  \	RD                  \RF                  \	RH                  \RJ                  \	RL                  \RN                  \	RP                  \RR                  \	RT                  \RV                  \	RX                  0r-\\\4   \S'   \RB                  S\RF                  S\RJ                  S\RN                  S\RR                  S\RV                  S 0r.\\\4   \S!'   \R^                  S"\R`                  S#\Rb                  S$\Rd                  S%0r3\\\4   \S&'   \Rh                  S'\Rj                  S(\Rl                  S)0r7\\\4   \S*'   S+r8S+r9S,r:S-r;S-r<\ " S. S/\5      5       r=\ " S0 S1\5      5       r>\ " S2 S3\5      5       r?S4\S5\S6\4S7 jr@S8\S5\S6\4S9 jrAS:\S5\S6\4S; jrBS<\S5\S6\4S= jrCg>)?z)Game state definitions for Age of Heroes.    )	dataclassfield)Enum)DataClassJSONMixin   )SpecialResourceTypeResourceTypec                   0    \ rS rSrSrSrSrSrSrSr	Sr
S	rg
)Tribe   zAvailable tribes in the game.	egyptiansromansgreeksbabyloniansceltschinese N)__name__
__module____qualname____firstlineno____doc__	EGYPTIANSROMANSGREEKSBABYLONIANSCELTSCHINESE__static_attributes__r       =c:\Users\dbart\PlayPalace11\server\games\ageofheroes\state.pyr   r      s#    'IFFKEGr    r   c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
	GamePhase   zGame phases.setuppreparefairplay	game_overr   N)r   r   r   r   r   SETUPPREPAREFAIRPLAY	GAME_OVERr   r   r    r!   r#   r#      s    EGDDIr    r#   c                   L    \ rS rSrSrSrSrSrSrSr	Sr
S	rS
rSrSrSrSrSrSrg)PlaySubPhase    z!Sub-phases within the PLAY phase.	draw_cardselect_actiontax_collectionconstructionroad_targetroad_permissionwar_declarewar_prepare_attackerwar_prepare_defenderwar_prepare
war_battlediscard_excessdisaster_targetr   N)r   r   r   r   r   	DRAW_CARDSELECT_ACTIONTAX_COLLECTIONCONSTRUCTIONROAD_TARGETROAD_PERMISSIONWAR_DECLAREWAR_PREPARE_ATTACKERWAR_PREPARE_DEFENDERWAR_PREPARE
WAR_BATTLEDISCARD_EXCESSDISASTER_TARGETr   r   r    r!   r0   r0       sH    +I#M%N!LK'OK11KJ%N'Or    r0   c                   (    \ rS rSrSrSrSrSrSrSr	g)	
ActionType2   z$Main turn actions in the play phase.r4   r5   war
do_nothingr   N)
r   r   r   r   r   rA   rB   WAR
DO_NOTHINGr   r   r    r!   rM   rM   2   s    .%N!L
CJr    rM   c                   $    \ rS rSrSrSrSrSrSrg)WarGoal;   zWar objectives.conquestplunderdestructionr   N)	r   r   r   r   r   CONQUESTPLUNDERDESTRUCTIONr   r   r    r!   rT   rT   ;   s    HGKr    rT   c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
BuildingTypeC   z1Types of buildings/units that can be constructed.armyfortressgeneralroadcityr   N)r   r   r   r   r   ARMYFORTRESSGENERALROADCITYr   r   r    r!   r]   r]   C   s    ;DHGDDr    r]   BUILDING_COSTSzageofheroes-building-armyzageofheroes-building-fortresszageofheroes-building-generalzageofheroes-building-roadzageofheroes-building-cityBUILDING_NAME_KEYSTRIBE_SPECIAL_RESOURCEzageofheroes-tribe-egyptianszageofheroes-tribe-romanszageofheroes-tribe-greekszageofheroes-tribe-babylonianszageofheroes-tribe-celtszageofheroes-tribe-chineseTRIBE_NAME_KEYSz!ageofheroes-action-tax-collectionzageofheroes-action-constructionzageofheroes-action-warzageofheroes-action-do-nothingACTION_NAME_KEYSzageofheroes-war-conquestzageofheroes-war-plunderzageofheroes-war-destructionWAR_GOAL_KEYS   	      c                   "   \ rS rSr% Sr\\S'   Sr\\S'   Sr	\\S'   Sr
\\S'   Sr\\S	'   Sr\\S
'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   S\4S jrS\4S jrS\S\4S jrS\4S jrS\4S jrS\4S jrS\\\\4   4S jrSrg)
TribeState   zpPer-player tribe state tracking.

Similar to RaceState in Mile by Mile - tracks all state for a player's tribe.
triber   citiesarmiesr   generals
fortressesmonument_progressF	road_left
road_rightearthquaked_armiesreturning_armiesreturning_generalsreturnc                 b    [        SU R                  U R                  -
  U R                  -
  5      $ )z.Get the number of armies available for combat.r   )maxrw   r}   r~   selfs    r!   get_available_armiesTribeState.get_available_armies   s)    1dkkD$;$;;d>S>SSTTr    c                 H    [        SU R                  U R                  -
  5      $ )z0Get the number of generals available for combat.r   )r   rx   r   r   s    r!   get_available_generals!TribeState.get_available_generals   s    1dmmd&=&==>>r    	directionc                 L    US:X  a  U R                   $ US:X  a  U R                  $ g)z&Check if there's a road to a neighbor.leftrightFr{   r|   )r   r   s     r!   has_road_to_neighborTribeState.has_road_to_neighbor   s)    >>!'!??"r    c                 b    SnU R                   (       a  US-  nU R                  (       a  US-  nU$ )z Get total number of roads built.r   r   r   )r   counts     r!   get_road_countTribeState.get_road_count   s,    >>QJE??QJEr    c                      U R                   S:H  $ )z>Check if this tribe has been eliminated (no cities, no cards).r   )rv   r   s    r!   is_eliminatedTribeState.is_eliminated   s    {{ar    c                 ^    [         R                  U R                  [        R                  5      $ )z8Get the special resource type for this tribe's monument.)rk   getru   r   	LIMESTONEr   s    r!   get_special_resourceTribeState.get_special_resource   s     %))$**6I6S6STTr    c                 |    U R                   nU R                  nU R                  nSU l         SU l        SU l        XU4$ )zaProcess end of turn effects. Returns (armies_returned, generals_returned, earthquaked_recovered).r   )r~   r   r}   )r   armies_backgenerals_backearthquaked_recovereds       r!   process_end_of_turnTribeState.process_end_of_turn   sL    ++// $ 7 7 !""# #$+@@@r    )r}   r~   r   N)r   r   r   r   r   str__annotations__rv   intrw   rx   ry   rz   r{   boolr|   r}   r~   r   r   r   r   r   r   r   tupler   r   r   r    r!   rs   rs      s    
 J FCOFCOHcJ s ItJ  cUc U? ?c d   t  Uc UAU3S=%9 Ar    rs   c                      \ rS rSr% SrSr\\S'   Sr\\S'   Sr	\
\S'   Sr\\S	'   Sr\\S
'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   \" \S9r\\   \S'   \" \S9r\\   \S'   Sr\\S'   S\4S jrS\4S jrS\4S jr S\4S jr!S\4S  jr"S\4S! jr#S&S# jr$S&S$ jr%S%r&g")'WarState   z"State tracking for an ongoing war.attacker_indexdefender_index goalr   attacker_armiesattacker_generalsattacker_heroesattacker_hero_generalsdefender_armiesdefender_generalsdefender_heroesdefender_hero_generalsFattacker_prepareddefender_preparedbattle_in_progressattacker_rolldefender_roll)default_factoryattacker_dicedefender_dicecancelled_by_olympicsr   c                 4    U R                   U R                  -   $ )z%Get total army strength for attacker.)r   r   r   s    r!   get_attacker_total_armies"WarState.get_attacker_total_armies       ##d&:&:::r    c                 4    U R                   U R                  -   $ )z%Get total army strength for defender.)r   r   r   s    r!   get_defender_total_armies"WarState.get_defender_total_armies  r   r    c                 4    U R                   U R                  -   $ )z%Get total general count for attacker.)r   r   r   s    r!   get_attacker_total_generals$WarState.get_attacker_total_generals      %%(C(CCCr    c                 4    U R                   U R                  -   $ )z@Get total general count for defender (including fortress bonus).)r   r   r   s    r!   get_defender_total_generals$WarState.get_defender_total_generals	  r   r    c                 @    U R                   =(       a    U R                  $ )z/Check if both sides have prepared their forces.)r   r   r   s    r!   is_both_preparedWarState.is_both_prepared  s    %%@$*@*@@r    c                 L    U R                   S:  =(       a    U R                  S:  $ )z6Check if both sides have rolled for the current round.r   r   r   r   s    r!   is_both_rolledWarState.is_both_rolled  s#    !!A%@$*<*<q*@@r    Nc                      SU l         SU l        g)zReset rolls for a new round.r   Nr   r   s    r!   reset_round_rollsWarState.reset_round_rolls  s    r    c                    SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        SU l
        SU l        SU l        SU l        SU l        SU l        / U l        / U l        SU l        g)zReset war state for a new war.r   r   r   FN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s    r!   resetWarState.reset  s      	 !" &'# !" &'#!&!&"'%*"r    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   N)'r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   listr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   r      s@   ,NCNCD#N OSsOS"#C#OSsOS"#C# $t##t#$$ M3M3  %T:M49:$T:M49: #(4';3 ;;3 ;DS DDS DA$ AA A
+r    r   c                   V    \ rS rSr% Sr\\S'   \\S'   Sr\S-  \S'   Sr	\S-  \S'   Sr
g)	
TradeOfferi1  z#A trade offer in the auction phase.player_index
card_indexNwanted_typewanted_subtyper   )r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r   r   1  s,    -O"Kt"!%NC$J%r    r   ru   localer   c                 n    SSK Jn  [        R                  U S5      nU(       a  UR                  X5      $ U $ )z#Get the localized name for a tribe.   Localizationr   )messages.localizationr   rl   r   )ru   r   r   keys       r!   get_tribe_namer   ;  s/    5


eR
(C,/<F(:U:r    buildingc                 n    SSK Jn  [        R                  U S5      nU(       a  UR                  X5      $ U $ )z+Get the localized name for a building type.r   r   r   )r   r   rj   r   )r   r   r   r   s       r!   get_building_namer   C  s/    5

 
 2
.C,/<F(=X=r    actionc                 n    SSK Jn  [        R                  U S5      nU(       a  UR                  X5      $ U $ )z*Get the localized name for an action type.r   r   r   )r   r   rm   r   )r   r   r   r   s       r!   get_action_namer   K  s/    5


vr
*C,/<F(;V;r    r   c                 n    SSK Jn  [        R                  U S5      nU(       a  UR                  X5      $ U $ )z&Get the localized name for a war goal.r   r   r   )r   r   rn   r   )r   r   r   r   s       r!   get_war_goal_namer   S  s/    5


D"
%C,/<F(9T9r    N)Dr   dataclassesr   r   enumr   mashumaro.mixins.jsonr   cardsr   r	   r   r   r#   r0   rM   rT   r]   rd   IRONGRAINre   WOODSTONErf   GOLDrg   rh   ri   dictr   r   rj   r   r   r   CONCRETEr   MARBLEr   BRICKSr   	SANDSTONEr   GRANITErk   rl   rA   rB   rQ   rR   rm   rY   rZ   r[   rn   DEFAULT_ARMY_SUPPLYDEFAULT_CITY_SUPPLYDEFAULT_FORTRESS_SUPPLYDEFAULT_GENERAL_SUPPLYDEFAULT_ROAD_SUPPLYrs   r   r   r   r   r   r   r   r    r!   <module>r     s   / (  4 4C T (3 ($d  c4  3  ))<+=+=|?Q?QR
 <,,l.?.?@**L,>,>?))<+<+<l>P>PQ
(S$s)^$ 
 2:822& DcN  
OO(22	LL%..	LL%,,	*11	KK$..	MM&..* S#X  
OO2	LL,	LL,	6	KK*	MM.#c3h  B>NN,:	$ $sCx.  0OO.6!tCH~        HA# HA HAV S+! S+ S+l &# & &;# ;s ;s ;> >S >S ><C < < <:C : : :r    