Convert get_multi_endlevel_poll2 to dispatch through a vtable
This commit is contained in:
parent
407678dfdf
commit
2007257064
|
@ -237,6 +237,7 @@ constexpr std::integral_constant<unsigned, 21> MULTI_ALLOW_POWERUP_TEXT_LENGTH{}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace multi {
|
namespace multi {
|
||||||
|
using endlevel_poll_function_type = int(newmenu *menu,const d_event &event, const unused_newmenu_userdata_t *);
|
||||||
struct dispatch_table
|
struct dispatch_table
|
||||||
{
|
{
|
||||||
constexpr const dispatch_table *operator->() const
|
constexpr const dispatch_table *operator->() const
|
||||||
|
@ -247,6 +248,7 @@ struct dispatch_table
|
||||||
virtual void do_protocol_frame(int force, int listen) const = 0;
|
virtual void do_protocol_frame(int force, int listen) const = 0;
|
||||||
virtual window_event_result level_sync() const = 0;
|
virtual window_event_result level_sync() const = 0;
|
||||||
virtual void send_endlevel_packet() const = 0;
|
virtual void send_endlevel_packet() const = 0;
|
||||||
|
virtual endlevel_poll_function_type *get_endlevel_poll2() const = 0;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -485,9 +487,7 @@ void multi_consistency_error(int reset);
|
||||||
window_event_result multi_level_sync();
|
window_event_result multi_level_sync();
|
||||||
int multi_endlevel(int *secret);
|
int multi_endlevel(int *secret);
|
||||||
#ifdef dsx
|
#ifdef dsx
|
||||||
using multi_endlevel_poll = int(newmenu *menu,const d_event &event, const unused_newmenu_userdata_t *);
|
|
||||||
namespace dsx {
|
namespace dsx {
|
||||||
multi_endlevel_poll *get_multi_endlevel_poll2();
|
|
||||||
void multi_send_hostage_door_status(vcwallptridx_t wallnum);
|
void multi_send_hostage_door_status(vcwallptridx_t wallnum);
|
||||||
void multi_prep_level_objects(const d_vclip_array &Vclip);
|
void multi_prep_level_objects(const d_vclip_array &Vclip);
|
||||||
void multi_prep_level_player();
|
void multi_prep_level_player();
|
||||||
|
|
|
@ -30,6 +30,7 @@ struct dispatch_table final : multi::dispatch_table
|
||||||
virtual void do_protocol_frame(int force, int listen) const override;
|
virtual void do_protocol_frame(int force, int listen) const override;
|
||||||
virtual window_event_result level_sync() const override;
|
virtual window_event_result level_sync() const override;
|
||||||
virtual void send_endlevel_packet() const override;
|
virtual void send_endlevel_packet() const override;
|
||||||
|
virtual endlevel_poll_function_type *get_endlevel_poll2() const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const dispatch_table dispatch;
|
extern const dispatch_table dispatch;
|
||||||
|
|
|
@ -312,7 +312,7 @@ window_event_result kmatrix_window::event_handler(const d_event &event)
|
||||||
nm_item_menu(TXT_YES),
|
nm_item_menu(TXT_YES),
|
||||||
nm_item_menu(TXT_NO),
|
nm_item_menu(TXT_NO),
|
||||||
}};
|
}};
|
||||||
choice = newmenu_do2(menu_title{nullptr}, menu_subtitle{TXT_ABORT_GAME}, nm_message_items, network != kmatrix_network::offline ? get_multi_endlevel_poll2() : unused_newmenu_subfunction, unused_newmenu_userdata);
|
choice = newmenu_do2(menu_title{nullptr}, menu_subtitle{TXT_ABORT_GAME}, nm_message_items, network != kmatrix_network::offline ? multi::dispatch->get_endlevel_poll2() : unused_newmenu_subfunction, unused_newmenu_userdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (choice==0)
|
if (choice==0)
|
||||||
|
|
|
@ -1126,23 +1126,6 @@ int multi_endlevel(int *const secret)
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace dsx {
|
|
||||||
|
|
||||||
multi_endlevel_poll *get_multi_endlevel_poll2()
|
|
||||||
{
|
|
||||||
switch (multi_protocol)
|
|
||||||
{
|
|
||||||
#if DXX_USE_UDP
|
|
||||||
case MULTI_PROTO_UDP:
|
|
||||||
return multi::udp::kmatrix_poll2;
|
|
||||||
#endif
|
|
||||||
default:
|
|
||||||
throw std::logic_error("Protocol handling missing in multi_endlevel_poll2");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Part 2 : functions that act on network messages and change the
|
// Part 2 : functions that act on network messages and change the
|
||||||
// the state of the game in some way.
|
// the state of the game in some way.
|
||||||
|
|
|
@ -2521,6 +2521,11 @@ void dispatch_table::send_endlevel_packet() const
|
||||||
dxx_sendto(Netgame.players[0].protocol.udp.addr, UDP_Socket[0], buf, 0);
|
dxx_sendto(Netgame.players[0].protocol.udp.addr, UDP_Socket[0], buf, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endlevel_poll_function_type *dispatch_table::get_endlevel_poll2() const
|
||||||
|
{
|
||||||
|
return kmatrix_poll2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue