VgaGames4

VgaGames4 - network man-pages

[.. upper level ..]

# vg4->nw->update()

Retrieve input-events and receive from and send to network-server.

SYNTAX
VG_BOOL vg4->nw->update(VG_BOOL *dowait, struct VG_NwZdata *zdata)
FUNCTION PARAMETERS

dowait | For returning whether to wait in the game-loop: - VG_TRUE: yes, as no subsequent package is available - VG_FALSE: no, as subsequent packages are available
zdata | For returning received additional-data

RETURN VALUE
Returns boolean: - VG_TRUE: OK - VG_FALSE: Got exit-request (or network-error occurred)
DESCRIPTION
Retrieve input-events and receive from and send to network-server. Receive also an update which clients are connected. This function must be used instead of vg4->input->update() for network-games in the game-loop.
EXAMPLE

      VG_BOOL dowait;
      struct VG_NwZdata nw_zdata;
      int clnr, clmax, icl;
      struct {
        int k_quit;
        int k_nw_fire;
      } kref;

      [...]

      /* set QUIT-key as local key */
      if ((kref.k_quit = vg4->input->key_insert("Quit", VG_FALSE, VG_FALSE)) == 0) { VG_dest(); exit(1); }
      vg4->input->key_setkbd(kref.k_quit, VG_INPUT_KBDCODE_Q);

      /* set FIRE-key as network-key */
      if ((kref.k_nw_fire = vg4->input->key_insert("Fire", VG_FALSE, VG_TRUE)) == 0) { VG_dest(); exit(1); }
      vg4->input->key_setkbd(kref.k_nw_fire, VG_INPUT_KBDCODE_SPACE);

      /* connect, get in clnr client-number of local client */
      [...]

      clmax = vg4->nw->numberofclients(NULL);

      /* game loop */
      for (;;) {
        if (!vg4->nw->update(&dowait, &nw_zdata)) { break; }

        /* check if local client is still connected */
        if (!vg4->nw->is_connected(clnr)) { break; }

        /* check local QUIT-key */
        if (vg4->input->key_newpressed(kref.k_quit)) { break; }

        vg4->window->clear();

        /* for each player */
        for (icl = 1; icl <= clmax; icl++) {
          /* still connected? */
          if (!vg4->nw->is_connected(icl)) { continue; }

          /* check player's input-events */
          if (vg4->nw->key_pressed(icl, kref.k_nw_fire)) {
            /* player icl has pressed FIRE-key */
          }
        }

        vg4->window->flush();
        if (dowait) { vg4->misc->wait_time(50); }
      }

SEE ALSO
vg4->input->update()