Example #1
0
void update_action_key(
	short player_index,
	boolean triggered)
{
	short               object_index;
	short               minimum_distance= 0;
	short               target_type;
	struct player_data  *player= get_player_data(player_index);
	
	if(triggered) 
	{
		object_index= find_action_key_target(player_index, MAXIMUM_ACTIVATION_RANGE, &target_type);

		if(object_index != NONE)
		{
			switch(target_type) 
			{
				case _target_is_platform:
					player_touch_platform_state(player_index, object_index);
					break;
				case _target_is_control_panel:
					change_panel_state(player_index, object_index);
					break;

				default:
					vhalt(csprintf(temporary, "%d is not a valid target type", target_type));
					break;
			}
		}
	}
}
Example #2
0
/* can be called at interrupt time */
void queue_network_speaker_data(
  byte *buffer,
  short count)
{
  if (speaker) {
    switch (speaker->state)
    {
    case _speaker_is_off:
      /* we were off but now weÕre getting data; fill one double buffer with static and
              change our state to _turning_on (weÕll wait until we receive another full
              double buffer worth of data before beginning to replay) */

//				ZZZ: CarbonSndPlayDB emulation layer specifically warns against calling
//				SndDoImmediate() with a quietCmd at interrupt time - which is what
//				quiet_network_speaker() would do.  So instead here we try resetting
//				the speaker (which ought to be safe I think) now, but delay issuing the
//				quiet commands until just before we start playing again.
#if defined(TARGET_API_MAC_CARBON)
      reset_network_speaker();
#else
      quiet_network_speaker();                           /* we could be playing trailing static */
#endif
      speaker->state= _speaker_is_turning_on;
      fill_network_speaker_buffer(speaker->header->dbhBufferPtr[0]);
      break;

    case _speaker_is_on:
    case _speaker_is_turning_on:
      speaker->connection_status= 0;
      break;

    default:
      vhalt(csprintf(temporary, "what the hell is #%d!?", speaker->state));
    }

    /* move incoming data into queue, NULL buffer means static */
    if (speaker->queue_size+count<=MAXIMUM_QUEUE_SIZE) {
      if (buffer) {
        BlockMove(buffer, speaker->queue+speaker->queue_size, count);
      }
      else
      {
        fill_buffer_with_static((byte *)speaker->queue+speaker->queue_size,
                                count);
      }

      speaker->queue_size+= count;
    }
    else
    {
      // This really shouldn't log in the non-main thread yet...
      logAnomaly3("queue_net_speaker_data() is ignoring data: #%d+#%d>#%d",
                  speaker->queue_size, count,
                  MAXIMUM_QUEUE_SIZE);
    }

#ifdef SNDPLAYDOUBLEBUFFER_DOESNT_SUCK
    switch (speaker->state)
    {
    case _speaker_is_turning_on:
      /* check and see if we have enough data to turn on */
      if (speaker->queue_size>=speaker->block_size) {
        OSErr error;

        error= SndPlayDoubleBuffer(speaker->channel, speaker->header);
        vwarn(error==noErr,
              csprintf(temporary, "SndPlayDoubleBuffer(%p,%p)==#%d",
                       speaker->channel,
                       speaker->header, error));

        speaker->state= _speaker_is_on;
      }
      break;
    }
#endif
  }
}
Example #3
0
void _alephone_assert(const char *file, int32 line, const char *what)
{
	vhalt(csprintf(assert_text, "%s:%d: %s", file, line, what));
}