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; } } } }
/* 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 } }
void _alephone_assert(const char *file, int32 line, const char *what) { vhalt(csprintf(assert_text, "%s:%d: %s", file, line, what)); }