#include #include #include #include #include #include #include void deerith::load_base_protocols() { router_add_packet_processor(); } template <> void deerith::process_packet(packet_update_player_input_t &packet, client_t *client) { entity_t entity = client->entity_id; component_client_sync_character_t &sync_client = get_component(entity); packet.input_transport.recive(sync_client.move_input); packet.position_transport.recive(sync_client.position); } void deerith::send_create_entity_to_all_clients(deerith::entity_t ent) { auto view = get_entity_registry().view(); for (auto [entity, link_to_client] : view.each()) { send_create_entity_to_client(ent, link_to_client.client); } } void deerith::send_create_entity_to_client(entity_t ent, client_t *client) { component_network_id_t &entity_network_id = get_component(ent); packet_create_entity_t create_entity; create_entity.network_sync_id = entity_network_id.network_id; // in case its the self entity we let it know to the client if (has_component(ent)) { component_client_link_t &link = get_component(ent); create_entity.is_self_client = link.client == client; deerith_trace("entity could be self {}", create_entity.is_self_client); } if (has_component(ent)) { create_entity.add_entity_sync_coordinates = true; } router_send_packet(create_entity, client); } void deerith::send_delete_entity_to_all_clients(entity_t ent) { packet_destroy_entity_t destroy_entity; component_network_id_t &network_id = get_component(ent); destroy_entity.network_sync_id = network_id.network_id; auto view = get_entity_registry().view(); for (auto [entity, link_to_client] : view.each()) { router_send_packet(destroy_entity, link_to_client.client); } } void deerith::send_create_all_entities_to_client(client_t *client) { auto entities_view = get_entity_registry().view(); for (auto [ent, network_id] : entities_view.each()) { send_create_entity_to_client(ent, client); } }