executed because of a god's actions, and if so which god (with "actions" not including god-supplied invocations). Currently only used to prevent Xom from being amused/stimulated by his own actions.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2235 c06c8d41-db1a-0410-9941-cceddc491573
IQGGFC563RBS7GDOACKCLXK752EE5RC3T6G5L6H446SXTMSA7T2AC
V4DWL5WBO2JCODVS5QQNWXDH4DAYZN3D5V3UDCHM2KKOMADOTEDQC
XOHNTNE5EAPQ5QLVQADLZARXQUQ2FAFCX7PHKKS6WOGIZGSNZDNQC
JM7UAK777RAVDAVLQLEOBRTGNW2B47S5G55XITJXO243IUNZHVYQC
E42EFZ3RINKLTGOJJZAH2N5QF3P4S5NCO5T52HLXJRMBPP463HTAC
SVY2PTCLXR3KNPQAWXVXTTGCC5DR334HOAKHYO3VDDRWM2BWMALAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
EI5XQIKW3OBVTDVT2A4Q535I5FOVEKARLFISM457IHGAK7TVOMVAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
3NFVCXRVGHN2CHLLWFZES5RBS4R2BCDS4EEQNSDCFYIFQWQK7MUQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
WZNB427K3EUNV3FMVXLQTM4UIHER4FIKQXWLUUXRNQC3OQ33VQYAC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
SWOYPTHJAWFEDBMB3ROT33VQZIXGZD5UOXEV456DDUENW2HGA66QC
XMX2Y7QSEXGV2SPDOFDNM2BQJH3S3WTMYLJYUREYV72NWTURHMSQC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC
2UBWR54HKLIWZQXB3ZFOH4R4X6TZWWZZWEU26KRDOS3BHC5J7GPAC
JB6BHNNQQJQWB35BDBM4KBL7WJLAWGXXFXSAKAQ72LDGDKHXHNRAC
ANOEQTM6IGCBTESKKQ5PCBSDTZ7VGRCMDIOAFEH4R7DJHKWKDFAAC
DOZORMA366M4HB5JKSS27BMCR6ET7QNZNND2B7KV3NVEEPR5H7EAC
RYT42Z6CED4KV5CCJ45CHZ3DQGLFMDCVH6CSQZNXOILULDG4MXVQC
ILOED4VB4I6VPAUTR75ZWX6MXDYXB5DO2EDK2UH67O3HNKWV23RQC
bool is_god_acting() const;
bool is_god_retribution() const;
god_type which_god_acting() const;
void inc_god_acting(bool is_retribution = false);
void inc_god_acting(god_type which_god, bool is_retribution = false);
void dec_god_acting();
void dec_god_acting(god_type which_god);
void clear_god_acting();
std::vector<god_act_state> other_gods_acting() const;
}
///////////////////////////////////////////////////////////
// Keeping track of which god is currently doing something
///////////////////////////////////////////////////////////
god_act_state::god_act_state()
{
reset();
}
void god_act_state::reset()
{
which_god = GOD_NO_GOD;
retribution = false;
depth = 0;
}
bool game_state::is_god_acting() const
{
ASSERT(god_act.depth >= 0);
ASSERT(!(god_act.depth > 0 && god_act.which_god == GOD_NO_GOD));
ASSERT(!(god_act.depth == 0 && god_act.which_god != GOD_NO_GOD));
ASSERT(!(god_act.depth == 0 && god_act_stack.size() > 0));
return (god_act.depth > 0);
}
bool game_state::is_god_retribution() const
{
ASSERT(is_god_acting());
return (god_act.retribution);
}
god_type game_state::which_god_acting() const
{
return god_act.which_god;
}
void game_state::inc_god_acting(bool is_retribution)
{
inc_god_acting(you.religion, is_retribution);
}
void game_state::inc_god_acting(god_type which_god, bool is_retribution)
{
ASSERT(which_god != GOD_NO_GOD);
if (god_act.which_god != GOD_NO_GOD &&
god_act.which_god != which_god)
{
ASSERT(god_act.depth >= 1);
god_act_stack.push_back(god_act);
god_act.reset();
}
god_act.which_god = which_god;
god_act.retribution = is_retribution;
god_act.depth++;
}
void game_state::dec_god_acting()
{
dec_god_acting(you.religion);
void game_state::dec_god_acting(god_type which_god)
{
ASSERT(which_god != GOD_NO_GOD);
ASSERT(god_act.depth > 0);
ASSERT(god_act.which_god == which_god);
god_act.depth--;
if (god_act.depth == 0)
{
god_act.reset();
if (god_act_stack.size() > 0)
{
god_act = god_act_stack[god_act_stack.size() - 1];
god_act_stack.pop_back();
ASSERT(god_act.depth >= 1);
ASSERT(god_act.which_god != GOD_NO_GOD);
ASSERT(god_act.which_god != which_god);
}
}
}
void game_state::clear_god_acting()
{
ASSERT(!is_god_acting());
ASSERT(god_act_stack.size() == 0);
god_act.reset();
}
std::vector<god_act_state> game_state::other_gods_acting() const
{
ASSERT(is_god_acting());
return god_act_stack;
}