Difference between revisions of "AI Refactoring2009Crab"
m (→CURRENT) |
m (→CURRENT) |
||
Line 36: | Line 36: | ||
# Ability to supply additional parameters before execution. | # Ability to supply additional parameters before execution. | ||
− | # Ability to do a 'mock execution' and check, if the | + | # Ability to do a 'mock execution' and check, if the action is allowed. (e.g. if (recruit_soldiers.is_possible()) ... ) |
= DONE = | = DONE = |
Revision as of 18:19, 11 April 2009
CURRENT
extract gamestate-changing actions from AI code to separate classes.
Proposed syntax (A):
ai_move_command move_my_leader = execute_move_unit_command(from,keep); if (move_my_leader.ok()){ ai_recruit_command recruit_soldiers = execute_recruit_command(); if (!recruit_soldiers.ok()){ } }
Benefits:
1. well-defined interface between c++ ai and game state changes
2. separate return status from other values (such as 'move ok/move failed/move interrupted' vs 'where moved unit is now')
3. ability to detect unchecked ai commands at runtime (if .ok() wasn't called, we can complain in the destructor of called command).
Proposed syntax (B):
ai_move_command move_my_leader(from,keep); move_my_leader.execute(); if (move_my_leader.ok()){ ai_recruit_command recruit_soldiers; recruit_soldiers.set_preference_("archers"); recruit_soldiers.execute(); if (!recruit_soldiers.ok()){ ... } }
Benefits (comparing with A):
- Ability to supply additional parameters before execution.
- Ability to do a 'mock execution' and check, if the action is allowed. (e.g. if (recruit_soldiers.is_possible()) ... )
DONE
r34723 AI Refactoring: changed 'team' to 'side' when it means 'side number that starts from 1'.
r34720 AI Refactoring: Moved location of ai_interface::info to ai_manager. Now using a single copy of ai_interface::info for all AIs, and using get_info() accessor to get it from AIs. Also, fixed side to be unsigned int where it is possible.
r34719 AI Refactoring: removed unused turn_data_ from ai_interface::info
r34705 AI Refactoring. Extracted 'team number' and 'master' from ai_interface::info. This makes ai_interface::info ai-independent and allows to push it out of ai.