Skip to content

Commit

Permalink
Make field::raise_event take card_set by value
Browse files Browse the repository at this point in the history
  • Loading branch information
edo9300 committed Mar 8, 2024
1 parent 4c3e75d commit ffe3ba6
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 66 deletions.
2 changes: 1 addition & 1 deletion field.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1064,7 +1064,7 @@ void field::swap_deck_and_grave(uint8_t playerid) {
if(cur_player.list_main.size() || ex.size()) {
card_set cset(ex.begin(), ex.end());
cset.insert(cur_player.list_main.begin(), cur_player.list_main.end());
raise_event(&cset, EVENT_LEAVE_GRAVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, 0, 0);
raise_event(std::move(cset), EVENT_LEAVE_GRAVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, 0, 0);
process_single_event();
process_instant_event();
}
Expand Down
2 changes: 1 addition & 1 deletion field.h
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ class field {
}

void raise_event(card* event_card, uint32_t event_code, effect* reason_effect, uint32_t reason, uint8_t reason_player, uint8_t event_player, uint32_t event_value);
void raise_event(card_set* event_cards, uint32_t event_code, effect* reason_effect, uint32_t reason, uint8_t reason_player, uint8_t event_player, uint32_t event_value);
void raise_event(card_set event_cards, uint32_t event_code, effect* reason_effect, uint32_t reason, uint8_t reason_player, uint8_t event_player, uint32_t event_value);
void raise_single_event(card* trigger_card, card_set* event_cards, uint32_t event_code, effect* reason_effect, uint32_t reason, uint8_t reason_player, uint8_t event_player, uint32_t event_value);
int32_t check_event(uint32_t code, tevent* pe = nullptr);
int32_t check_event_c(effect* peffect, uint8_t playerid, int32_t neglect_con, int32_t neglect_cost, int32_t copy_info, tevent* pe = nullptr);
Expand Down
15 changes: 7 additions & 8 deletions libduel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -769,10 +769,9 @@ LUA_STATIC_FUNCTION(SwapSequence) {
&& pcard1->is_affect_by_effect(pduel->game_field->core.reason_effect)
&& pcard2->is_affect_by_effect(pduel->game_field->core.reason_effect)) {
pduel->game_field->swap_card(pcard1, pcard2);
card_set swapped{ pcard1, pcard2 };
pduel->game_field->raise_single_event(pcard1, nullptr, EVENT_MOVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, player, 0);
pduel->game_field->raise_single_event(pcard2, nullptr, EVENT_MOVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, player, 0);
pduel->game_field->raise_event(&swapped, EVENT_MOVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, player, 0);
pduel->game_field->raise_event({ pcard1, pcard2 }, EVENT_MOVE, pduel->game_field->core.reason_effect, 0, pduel->game_field->core.reason_player, player, 0);
pduel->game_field->process_single_event();
pduel->game_field->process_instant_event();
}
Expand Down Expand Up @@ -908,10 +907,10 @@ LUA_STATIC_FUNCTION(ConfirmCards) {
message->write<uint32_t>(_pcard->current.sequence);
raise_confirm_event(_pcard);
}
field.raise_event(&pgroup->container, EVENT_CONFIRM, trigeff, reason, field.core.reason_player, revealingplayer, 0);
field.raise_event(pgroup->container, EVENT_CONFIRM, trigeff, reason, field.core.reason_player, revealingplayer, 0);
}
if(handgroup.size())
field.raise_event(&handgroup, EVENT_TOHAND_CONFIRM, trigeff, reason, field.core.reason_player, revealingplayer, 0);
field.raise_event(std::move(handgroup), EVENT_TOHAND_CONFIRM, trigeff, reason, field.core.reason_player, revealingplayer, 0);
field.process_single_event();
field.process_instant_event();
return yield();
Expand Down Expand Up @@ -983,7 +982,7 @@ LUA_STATIC_FUNCTION(RaiseEvent) {
if(auto [pcard, pgroup] = lua_get_card_or_group(L, 1); pcard)
pduel->game_field->raise_event(pcard, code, peffect, r, rp, ep, ev);
else
pduel->game_field->raise_event(&pgroup->container, code, peffect, r, rp, ep, ev);
pduel->game_field->raise_event(pgroup->container, code, peffect, r, rp, ep, ev);
pduel->game_field->process_instant_event();
return yield();
}
Expand Down Expand Up @@ -1219,7 +1218,7 @@ LUA_STATIC_FUNCTION(EquipComplete) {
field->raise_single_event(equip_target, &core.equiping_cards, EVENT_EQUIP,
core.reason_effect, 0, core.reason_player, PLAYER_NONE, 0);
}
field->raise_event(&core.equiping_cards, EVENT_EQUIP,
field->raise_event(core.equiping_cards, EVENT_EQUIP,
core.reason_effect, 0, core.reason_player, PLAYER_NONE, 0);
core.hint_timing[0] |= TIMING_EQUIP;
core.hint_timing[1] |= TIMING_EQUIP;
Expand Down Expand Up @@ -1411,7 +1410,7 @@ LUA_STATIC_FUNCTION(ShuffleSetCard) {
pcard->current.sequence = seq[i];
field->raise_single_event(pcard, nullptr, EVENT_MOVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, tp, 0);
}
field->raise_event(&pgroup->container, EVENT_MOVE, field->core.reason_effect, 0, field->core.reason_player, tp, 0);
field->raise_event(pgroup->container, EVENT_MOVE, field->core.reason_effect, 0, field->core.reason_player, tp, 0);
field->process_single_event();
field->process_instant_event();
for(uint32_t i = 0; i < ct; ++i) {
Expand Down Expand Up @@ -1633,7 +1632,7 @@ LUA_STATIC_FUNCTION(NegateSummon) {
if(pcard)
pduel->game_field->raise_event(pcard, event_code, reason_effect, REASON_EFFECT, reason_player, sumplayer, 0);
else
pduel->game_field->raise_event(&pgroup->container, event_code, reason_effect, REASON_EFFECT, reason_player, sumplayer, 0);
pduel->game_field->raise_event(pgroup->container, event_code, reason_effect, REASON_EFFECT, reason_player, sumplayer, 0);
pduel->game_field->process_instant_event();
return 0;
}
Expand Down
89 changes: 44 additions & 45 deletions operations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -510,9 +510,9 @@ bool field::process(Processors::Draw& arg) {
raise_single_event(pcard, nullptr, EVENT_MOVE, reason_effect, reason, reason_player, playerid, 0);
}
process_single_event();
raise_event(&drawn_set, EVENT_DRAW, reason_effect, reason, reason_player, playerid, drawn);
raise_event(&drawn_set, EVENT_TO_HAND, reason_effect, reason, reason_player, playerid, drawn);
raise_event(&drawn_set, EVENT_MOVE, reason_effect, reason, reason_player, playerid, drawn);
raise_event(drawn_set, EVENT_DRAW, reason_effect, reason, reason_player, playerid, drawn);
raise_event(drawn_set, EVENT_TO_HAND, reason_effect, reason, reason_player, playerid, drawn);
raise_event(drawn_set, EVENT_MOVE, reason_effect, reason, reason_player, playerid, drawn);
process_instant_event();
}
return FALSE;
Expand Down Expand Up @@ -1040,7 +1040,7 @@ bool field::process(Processors::XyzOverlay& arg) {
writetopcard(0);
writetopcard(1);
if(from_grave.size()) {
raise_event(&from_grave, EVENT_LEAVE_GRAVE, core.reason_effect, 0, core.reason_player, 0, 0);
raise_event(std::move(from_grave), EVENT_LEAVE_GRAVE, core.reason_effect, 0, core.reason_player, 0, 0);
process_single_event();
process_instant_event();
}
Expand Down Expand Up @@ -1155,8 +1155,8 @@ bool field::process(Processors::GetControl& arg) {
raise_single_event(pcard, nullptr, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, playerid, 0);
}
if(targets->container.size()) {
raise_event(&targets->container, EVENT_CONTROL_CHANGED, reason_effect, REASON_EFFECT, reason_player, playerid, 0);
raise_event(&targets->container, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, playerid, 0);
raise_event(targets->container, EVENT_CONTROL_CHANGED, reason_effect, REASON_EFFECT, reason_player, playerid, 0);
raise_event(targets->container, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, playerid, 0);
}
process_single_event();
process_instant_event();
Expand Down Expand Up @@ -1314,8 +1314,8 @@ bool field::process(Processors::SwapControl& arg) {
raise_single_event(pcard, nullptr, EVENT_CONTROL_CHANGED, reason_effect, REASON_EFFECT, reason_player, pcard->current.controler, 0);
raise_single_event(pcard, nullptr, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, pcard->current.controler, 0);
}
raise_event(&targets1->container, EVENT_CONTROL_CHANGED, reason_effect, REASON_EFFECT, reason_player, 0, 0);
raise_event(&targets1->container, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, 0, 0);
raise_event(targets1->container, EVENT_CONTROL_CHANGED, reason_effect, REASON_EFFECT, reason_player, 0, 0);
raise_event(targets1->container, EVENT_MOVE, reason_effect, REASON_EFFECT, reason_player, 0, 0);
process_single_event();
process_instant_event();
return FALSE;
Expand Down Expand Up @@ -1448,8 +1448,8 @@ bool field::process(Processors::ControlAdjust& arg) {
raise_single_event(pcard, nullptr, EVENT_MOVE, nullptr, REASON_RULE, 0, pcard->current.controler, 0);
}
if(core.control_adjust_set[0].size()) {
raise_event(&core.control_adjust_set[0], EVENT_CONTROL_CHANGED, nullptr, 0, 0, 0, 0);
raise_event(&core.control_adjust_set[0], EVENT_MOVE, nullptr, 0, 0, 0, 0);
raise_event(core.control_adjust_set[0], EVENT_CONTROL_CHANGED, nullptr, 0, 0, 0, 0);
raise_event(core.control_adjust_set[0], EVENT_MOVE, nullptr, 0, 0, 0, 0);
}
process_single_event();
process_instant_event();
Expand Down Expand Up @@ -1755,7 +1755,7 @@ bool field::process(Processors::Equip& arg) {
card_set cset;
cset.insert(equip_card);
raise_single_event(target, &cset, EVENT_EQUIP, core.reason_effect, 0, core.reason_player, PLAYER_NONE, 0);
raise_event(&cset, EVENT_EQUIP, core.reason_effect, 0, core.reason_player, PLAYER_NONE, 0);
raise_event(std::move(cset), EVENT_EQUIP, core.reason_effect, 0, core.reason_player, PLAYER_NONE, 0);
core.hint_timing[target->overlay_target ? target->overlay_target->current.controler : target->current.controler] |= TIMING_EQUIP;
process_single_event();
process_instant_event();
Expand Down Expand Up @@ -2250,7 +2250,7 @@ bool field::process(Processors::SummonRule& arg) {
if (target->material_cards.size()) {
for (auto& mcard : target->material_cards)
raise_single_event(mcard, nullptr, EVENT_BE_PRE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
raise_event(&target->material_cards, EVENT_BE_PRE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
raise_event(target->material_cards, EVENT_BE_PRE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
}
process_single_event();
process_instant_event();
Expand Down Expand Up @@ -2313,7 +2313,7 @@ bool field::process(Processors::SummonRule& arg) {
if(target->material_cards.size()) {
for(auto& mcard : target->material_cards)
raise_single_event(mcard, nullptr, EVENT_BE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
raise_event(&target->material_cards, EVENT_BE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
raise_event(target->material_cards, EVENT_BE_MATERIAL, summon_procedure_effect, REASON_SUMMON, sumplayer, sumplayer, 0);
}
process_single_event();
process_instant_event();
Expand Down Expand Up @@ -2984,7 +2984,7 @@ bool field::process(Processors::SpellSetGroup& arg) {
}
case 7: {
adjust_instant();
raise_event(&core.operated_set, EVENT_SSET, reason_effect, 0, setplayer, setplayer, 0);
raise_event(core.operated_set, EVENT_SSET, reason_effect, 0, setplayer, setplayer, 0);
process_instant_event();
if(core.current_chain.size() == 0) {
adjust_all();
Expand Down Expand Up @@ -3174,7 +3174,7 @@ bool field::process(Processors::SpSummonRule& arg) {
for (auto& mcard : target->material_cards)
raise_single_event(mcard, nullptr, EVENT_BE_PRE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
}
raise_event(&target->material_cards, EVENT_BE_PRE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
raise_event(target->material_cards, EVENT_BE_PRE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
process_single_event();
process_instant_event();
return FALSE;
Expand Down Expand Up @@ -3246,7 +3246,7 @@ bool field::process(Processors::SpSummonRule& arg) {
for(auto& mcard : target->material_cards)
raise_single_event(mcard, nullptr, EVENT_BE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
}
raise_event(&target->material_cards, EVENT_BE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
raise_event(target->material_cards, EVENT_BE_MATERIAL, proc, matreason, sumplayer, sumplayer, 0);
process_single_event();
process_instant_event();
return FALSE;
Expand Down Expand Up @@ -3402,7 +3402,7 @@ bool field::process(Processors::SpSummonRule& arg) {
}
}
if(cset.size()) {
raise_event(&cset, EVENT_SPSUMMON, arg.summon_proc_effect, 0, sumplayer, sumplayer, 0);
raise_event(std::move(cset), EVENT_SPSUMMON, arg.summon_proc_effect, 0, sumplayer, sumplayer, 0);
process_instant_event();
emplace_process<Processors::PointEvent>(true, true, true);
}
Expand Down Expand Up @@ -3476,7 +3476,7 @@ bool field::process(Processors::SpSummonRule& arg) {
for(auto& pcard : pgroup->container)
raise_single_event(pcard, nullptr, EVENT_SPSUMMON_SUCCESS, pcard->current.reason_effect, 0, pcard->current.reason_player, pcard->summon.player, 0);
process_single_event();
raise_event(&pgroup->container, EVENT_SPSUMMON_SUCCESS, arg.summon_proc_effect, 0, sumplayer, sumplayer, 0);
raise_event(pgroup->container, EVENT_SPSUMMON_SUCCESS, arg.summon_proc_effect, 0, sumplayer, sumplayer, 0);
process_instant_event();
if(core.current_chain.size() == 0) {
adjust_all();
Expand Down Expand Up @@ -3744,7 +3744,7 @@ bool field::process(Processors::SpSummon& arg) {
matreason = REASON_LINK;
for(auto& mcard : pcard->material_cards)
raise_single_event(mcard, &targets->container, EVENT_BE_MATERIAL, pcard->current.reason_effect, matreason, pcard->current.reason_player, pcard->summon.player, 0);
raise_event(&(pcard->material_cards), EVENT_BE_MATERIAL, reason_effect, matreason, reason_player, pcard->summon.player, 0);
raise_event(pcard->material_cards, EVENT_BE_MATERIAL, reason_effect, matreason, reason_player, pcard->summon.player, 0);
}
pcard->set_status(STATUS_FUTURE_FUSION, FALSE);
}
Expand All @@ -3753,7 +3753,7 @@ bool field::process(Processors::SpSummon& arg) {
return FALSE;
}
case 4: {
raise_event(&targets->container, EVENT_SPSUMMON_SUCCESS, reason_effect, 0, reason_player, PLAYER_NONE, 0);
raise_event(targets->container, EVENT_SPSUMMON_SUCCESS, reason_effect, 0, reason_player, PLAYER_NONE, 0);
process_instant_event();
return FALSE;
}
Expand Down Expand Up @@ -3968,7 +3968,7 @@ bool field::process(Processors::Destroy& arg) {
}
adjust_instant();
process_single_event();
raise_event(&targets->container, EVENT_DESTROY, reason_effect, reason, reason_player, 0, 0);
raise_event(targets->container, EVENT_DESTROY, reason_effect, reason, reason_player, 0, 0);
process_instant_event();
return FALSE;
}
Expand Down Expand Up @@ -4345,9 +4345,9 @@ bool field::process(Processors::SendTo& arg) {
}
}
if(leave_p.size())
raise_event(&leave_p, EVENT_LEAVE_FIELD_P, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(leave_p), EVENT_LEAVE_FIELD_P, reason_effect, reason, reason_player, 0, 0);
if(destroying.size())
raise_event(&destroying, EVENT_DESTROY, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(destroying), EVENT_DESTROY, reason_effect, reason, reason_player, 0, 0);
process_single_event();
process_instant_event();
return FALSE;
Expand Down Expand Up @@ -4640,11 +4640,11 @@ bool field::process(Processors::SendTo& arg) {
}
process_single_event();
if(param->leave_field.size())
raise_event(&param->leave_field, EVENT_LEAVE_FIELD, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(param->leave_field), EVENT_LEAVE_FIELD, reason_effect, reason, reason_player, 0, 0);
if(param->leave_grave.size())
raise_event(&param->leave_grave, EVENT_LEAVE_GRAVE, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(param->leave_grave), EVENT_LEAVE_GRAVE, reason_effect, reason, reason_player, 0, 0);
if((core.global_flag & GLOBALFLAG_DETACH_EVENT) && param->detach.size())
raise_event(&param->detach, EVENT_DETACH_MATERIAL, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(param->detach), EVENT_DETACH_MATERIAL, reason_effect, reason, reason_player, 0, 0);
process_instant_event();
adjust_instant();
return FALSE;
Expand Down Expand Up @@ -4711,20 +4711,20 @@ bool field::process(Processors::SendTo& arg) {
raise_single_event(pcard, nullptr, EVENT_MOVE, pcard->current.reason_effect, pcard->current.reason, pcard->current.reason_player, 0, 0);
}
if(tohand.size())
raise_event(&tohand, EVENT_TO_HAND, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(tohand), EVENT_TO_HAND, reason_effect, reason, reason_player, 0, 0);
if(todeck.size())
raise_event(&todeck, EVENT_TO_DECK, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(todeck), EVENT_TO_DECK, reason_effect, reason, reason_player, 0, 0);
if(tograve.size())
raise_event(&tograve, EVENT_TO_GRAVE, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(tograve), EVENT_TO_GRAVE, reason_effect, reason, reason_player, 0, 0);
if(remove.size())
raise_event(&remove, EVENT_REMOVE, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(remove), EVENT_REMOVE, reason_effect, reason, reason_player, 0, 0);
if(discard.size())
raise_event(&discard, EVENT_DISCARD, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(discard), EVENT_DISCARD, reason_effect, reason, reason_player, 0, 0);
if(released.size())
raise_event(&released, EVENT_RELEASE, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(released), EVENT_RELEASE, reason_effect, reason, reason_player, 0, 0);
if(destroyed.size())
raise_event(&destroyed, EVENT_DESTROYED, reason_effect, reason, reason_player, 0, 0);
raise_event(&targets->container, EVENT_MOVE, reason_effect, reason, reason_player, 0, 0);
raise_event(std::move(destroyed), EVENT_DESTROYED, reason_effect, reason, reason_player, 0, 0);
raise_event(targets->container, EVENT_MOVE, reason_effect, reason, reason_player, 0, 0);
process_single_event();
process_instant_event();
if(equipings.size())
Expand Down Expand Up @@ -4850,23 +4850,22 @@ bool field::process(Processors::DiscardDeck& arg) {
core.discarded_set.insert(pcard);
}
if(tohand.size())
raise_event(&tohand, EVENT_TO_HAND, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(std::move(tohand), EVENT_TO_HAND, core.reason_effect, reason, core.reason_player, 0, 0);
if(todeck.size())
raise_event(&todeck, EVENT_TO_DECK, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(std::move(todeck), EVENT_TO_DECK, core.reason_effect, reason, core.reason_player, 0, 0);
if(tograve.size())
raise_event(&tograve, EVENT_TO_GRAVE, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(std::move(tograve), EVENT_TO_GRAVE, core.reason_effect, reason, core.reason_player, 0, 0);
if(remove.size())
raise_event(&remove, EVENT_REMOVE, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(&core.discarded_set, EVENT_MOVE, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(std::move(remove), EVENT_REMOVE, core.reason_effect, reason, core.reason_player, 0, 0);
raise_event(core.discarded_set, EVENT_MOVE, core.reason_effect, reason, core.reason_player, 0, 0);
process_single_event();
process_instant_event();
adjust_instant();
return FALSE;
}
case 2: {
core.operated_set.clear();
core.operated_set = core.discarded_set;
returns.set<int32_t>(0, static_cast<int32_t>(core.discarded_set.size()));
core.operated_set.swap(core.discarded_set);
returns.set<int32_t>(0, static_cast<int32_t>(core.operated_set.size()));
core.discarded_set.clear();
return TRUE;
}
Expand Down Expand Up @@ -5325,11 +5324,11 @@ bool field::process(Processors::ChangePos& arg) {
adjust_instant();
process_single_event();
if(flips.size())
raise_event(&flips, EVENT_FLIP, reason_effect, 0, reason_player, 0, 0);
raise_event(std::move(flips), EVENT_FLIP, reason_effect, 0, reason_player, 0, 0);
if(ssets.size())
raise_event(&ssets, EVENT_SSET, reason_effect, 0, reason_player, 0, 0);
raise_event(std::move(ssets), EVENT_SSET, reason_effect, 0, reason_player, 0, 0);
if(pos_changed.size())
raise_event(&pos_changed, EVENT_CHANGE_POS, reason_effect, 0, reason_player, 0, 0);
raise_event(std::move(pos_changed), EVENT_CHANGE_POS, reason_effect, 0, reason_player, 0, 0);
process_instant_event();
if(equipings.size())
destroy(std::move(equipings), nullptr, REASON_LOST_TARGET + REASON_RULE, PLAYER_NONE);
Expand Down
Loading

0 comments on commit ffe3ba6

Please sign in to comment.