Ejemplo n.º 1
0
static void update_enemies()
{
  static u32b_t ticks=0;

  // Start a new wave if needed.
  ticks++;
  if( ticks >= 10000 ) {
    ticks = 0;
    start_wave();
  }

  // Update the enemies.
  update_enemy_effects();
  update_enemies_path();
}
void PlaybackChannel::handle_start(RedPeer::InMessage* message)
{
    PlaybackHandler* handler = static_cast<PlaybackHandler*>(get_message_handler());
    SpiceMsgPlaybackStart* start = (SpiceMsgPlaybackStart*)message->data();

    handler->set_handler(SPICE_MSG_PLAYBACK_START, NULL);
    handler->set_handler(SPICE_MSG_PLAYBACK_STOP, &PlaybackChannel::handle_stop);

#ifdef WAVE_CAPTURE
    start_wave();
#endif
    if (!_wave_player) {
        // for now support only one setting
        int celt_mode_err;

        if (start->format != SPICE_AUDIO_FMT_S16) {
            THROW("unexpected format");
        }
        int bits_per_sample = 16;
        int frame_size = 256;
        _frame_bytes = frame_size * start->channels * bits_per_sample / 8;
        try {
            _wave_player = Platform::create_player(start->frequency, bits_per_sample,
                                                   start->channels);
        } catch (...) {
            LOG_WARN("create player failed");
            //todo: support disconnecting single channel
            disable();
            return;
        }

        if (!(_celt_mode = celt051_mode_create(start->frequency, start->channels,
                                               frame_size, &celt_mode_err))) {
            THROW("create celt mode failed %d", celt_mode_err);
        }

        if (!(_celt_decoder = celt051_decoder_create(_celt_mode))) {
            THROW("create celt decoder");
        }
    }
    _playing = true;
    _frame_count = 0;
    set_data_handler();
}
Ejemplo n.º 3
0
static void game_loop()
{
  u64b_t         ticks = 0;
  u64b_t         t1,t2,sleep;

  // Set a path for enemies ...
  State->path = load_path_file("data/bmp/path.bmp");

  // Load tower positions from file..
  load_towers_file("data/bmp/towers.bmp");

  // Add some stuff ...
  start_wave();
  add_some_gems();

  // Start the GUI
  StartGUI("v0.0.1",((gstate_t*)State)); 
  UpdateGuiState(((gstate_t*)State));

  while( (State->time = ++ticks) ) {
    // Progress the game one time step
    t1 = get_time();
    tick();
    t2 = get_time();

    // Update the gui
    UpdateGuiState(((gstate_t*)State));

    // Sleep for the remainder of the tick cycle
    if( (t1 < t2) && ((t2-t1) < 5000) ) {
      sleep = 5000 - (t2-t1);
      if( sleep > 0 ) {
	usleep( sleep );
      }
    }
  }

}
Ejemplo n.º 4
0
static void process_events()
{
  game_eventq_t *q;
  gem_t          gem;
  int            i;

  for(q=game_event_get(NULL); q; q=game_event_get(q)) {
    // Find event type
    switch(q->type) {
    case GAME_EVENT_TOWER_INSTALL_GEM:
      for(i=0; i<State->player.ntowers; i++) {
	// Apply event to the tower at the specified location.
	if( vector3_compare(&(State->player.towers[i].position), &(q->tower_install_gem.tpos)) ) {
	  tower_install_gem(&(State->player.towers[i]), &(State->player.bag.items[q->tower_install_gem.ndx].gem));
	  bag_remove_item(&(State->player.bag),q->tower_install_gem.ndx);
	  break;
	}
      }
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    case GAME_EVENT_TOWER_REMOVE_GEM:
      for(i=0; i<State->player.ntowers; i++) {
	// Apply event to the tower at the specified location.
	if( vector3_compare(&(State->player.towers[i].position), &(q->tower_install_gem.tpos)) ) {
	  bag_add_gem(&(State->player.bag), &(State->player.towers[i].gem));
	  tower_remove_gem(&(State->player.towers[i]));
	  break;
	}
      }
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    case GAME_EVENT_TOWER_SWAP_GEM:
      for(i=0; i<State->player.ntowers; i++) {
	// Apply event to the tower at the specified location.
	if( vector3_compare(&(State->player.towers[i].position), &(q->tower_install_gem.tpos)) ) {
	  bag_add_gem(&(State->player.bag), &(State->player.towers[i].gem));
	  tower_remove_gem(&(State->player.towers[i]));
	  tower_install_gem(&(State->player.towers[i]), &(State->player.bag.items[q->tower_install_gem.ndx].gem));
	  bag_remove_item(&(State->player.bag),q->tower_install_gem.ndx);
	  break;
	}
      }
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    case GAME_EVENT_CREATE_GEM:
      // Create new gem in player's bag.
      if( State->player.mana >= GEM_CREATE_MANA_COST ) {
	bag_add_gem(&(State->player.bag), &(q->create_gem.gem));
	State->player.mana -= GEM_CREATE_MANA_COST;
      }
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    case GAME_EVENT_MIX_GEMS:
      // Mix gems in player's bag.
      if( State->player.mana >= GEM_MIX_MANA_COST ) {
	// Make new "mixed" gem.
	gem_mix_gems(&(State->player.bag.items[q->mix_gems.ndx1].gem),
		     &(State->player.bag.items[q->mix_gems.ndx2].gem),
		     &gem);
	bag_add_gem(&(State->player.bag), &gem);
	// Remove the "parent" gems.
	bag_remove_item(&(State->player.bag),q->mix_gems.ndx1);
	bag_remove_item(&(State->player.bag),q->mix_gems.ndx2);
	// Apply mana cost.
	State->player.mana -= GEM_MIX_MANA_COST;
      }
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    case GAME_EVENT_NEXT_WAVE:
      // Bring next wave early.
      start_wave();
      // Give player a bonus.
      State->player.mana += 10;
      State->player.xp   += 100;
      // Remove the event from the queue.
      game_event_remove(q);
      break;
    }
  }
}