Commit 7124d8a0 authored by salix5's avatar salix5

field::solve_continuous()

EFFECT_FLAG_DELAY: delayed to next solved chain/continuous effect
parent 76e3690e
...@@ -2209,7 +2209,7 @@ int32 field::process_instant_event() { ...@@ -2209,7 +2209,7 @@ int32 field::process_instant_event() {
peffect = pr.first->second; peffect = pr.first->second;
uint8 owner_player = peffect->get_handler_player(); uint8 owner_player = peffect->get_handler_player();
if(peffect->is_activateable(owner_player, *elit)) { if(peffect->is_activateable(owner_player, *elit)) {
if((peffect->is_flag(EFFECT_FLAG_DELAY)) && (core.chain_solving || core.conti_solving)) { if(peffect->is_flag(EFFECT_FLAG_DELAY) && (core.chain_solving || core.conti_solving)) {
if(owner_player == infos.turn_player) { if(owner_player == infos.turn_player) {
core.delayed_tp.push_back(peffect); core.delayed_tp.push_back(peffect);
core.delayed_tev.push_back(*elit); core.delayed_tev.push_back(*elit);
...@@ -2344,7 +2344,7 @@ int32 field::process_single_event() { ...@@ -2344,7 +2344,7 @@ int32 field::process_single_event() {
if(peffect->type & EFFECT_TYPE_CONTINUOUS) { if(peffect->type & EFFECT_TYPE_CONTINUOUS) {
uint8 owner_player = peffect->get_handler_player(); uint8 owner_player = peffect->get_handler_player();
if(peffect->is_activateable(owner_player, e)) { if(peffect->is_activateable(owner_player, e)) {
if((peffect->is_flag(EFFECT_FLAG_DELAY)) && (core.chain_solving || core.conti_solving)) { if(peffect->is_flag(EFFECT_FLAG_DELAY) && (core.chain_solving || core.conti_solving)) {
if(owner_player == infos.turn_player) { if(owner_player == infos.turn_player) {
core.delayed_tp.push_back(peffect); core.delayed_tp.push_back(peffect);
core.delayed_tev.push_back(e); core.delayed_tev.push_back(e);
...@@ -4441,8 +4441,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl ...@@ -4441,8 +4441,7 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
newchain.disable_reason = 0; newchain.disable_reason = 0;
newchain.flag = 0; newchain.flag = 0;
core.continuous_chain.push_back(newchain); core.continuous_chain.push_back(newchain);
if(peffect->is_flag(EFFECT_FLAG_DELAY)) core.conti_solving = TRUE;
core.conti_solving = TRUE;
if(!peffect->target) if(!peffect->target)
return FALSE; return FALSE;
core.sub_solving_event.push_back(core.solving_event.front()); core.sub_solving_event.push_back(core.solving_event.front());
...@@ -4469,36 +4468,36 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl ...@@ -4469,36 +4468,36 @@ int32 field::solve_continuous(uint16 step, effect * peffect, uint8 triggering_pl
} }
core.continuous_chain.pop_back(); core.continuous_chain.pop_back();
core.solving_event.pop_front(); core.solving_event.pop_front();
if(peffect->is_flag(EFFECT_FLAG_DELAY)) { core.conti_solving = FALSE;
core.conti_solving = FALSE; adjust_all();
adjust_all(); if(core.conti_player == PLAYER_NONE)
if(core.conti_player == infos.turn_player) { core.conti_player = infos.turn_player;
if(core.delayed_tp.size()) { if(core.conti_player == infos.turn_player) {
core.sub_solving_event.push_back(core.delayed_tev.front()); if(core.delayed_tp.size()) {
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_tp.front(), 0, infos.turn_player, 0); core.sub_solving_event.push_back(core.delayed_tev.front());
core.delayed_tp.pop_front(); add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_tp.front(), 0, infos.turn_player, 0);
core.delayed_tev.pop_front(); core.delayed_tp.pop_front();
} core.delayed_tev.pop_front();
else
core.conti_player = 1 - infos.turn_player;
} }
if(core.conti_player == 1 - infos.turn_player) { else
if(core.delayed_ntp.size()) { core.conti_player = 1 - infos.turn_player;
core.sub_solving_event.push_back(core.delayed_ntev.front()); }
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_ntp.front(), 0, 1 - infos.turn_player, 0); if(core.conti_player == 1 - infos.turn_player) {
core.delayed_ntp.pop_front(); if(core.delayed_ntp.size()) {
core.delayed_ntev.pop_front(); core.sub_solving_event.push_back(core.delayed_ntev.front());
} add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_ntp.front(), 0, 1 - infos.turn_player, 0);
else if(core.delayed_tp.size()) { core.delayed_ntp.pop_front();
core.conti_player = infos.turn_player; core.delayed_ntev.pop_front();
core.sub_solving_event.push_back(core.delayed_tev.front());
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_tp.front(), 0, infos.turn_player, 0);
core.delayed_tp.pop_front();
core.delayed_tev.pop_front();
}
else
core.conti_player = PLAYER_NONE;
} }
else if(core.delayed_tp.size()) {
core.conti_player = infos.turn_player;
core.sub_solving_event.push_back(core.delayed_tev.front());
add_process(PROCESSOR_SOLVE_CONTINUOUS, 0, core.delayed_tp.front(), 0, infos.turn_player, 0);
core.delayed_tp.pop_front();
core.delayed_tev.pop_front();
}
else
core.conti_player = PLAYER_NONE;
} }
return TRUE; return TRUE;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment