示例#1
0
/* Generic "growing-wall" special (callback) */
static void growing_wall_callback(game_t *p_game, int id, void *p_priv_in)
{
  growing_wall_priv_t *p_priv = (growing_wall_priv_t*)p_priv_in;
  point_t new_pt = pt_add_dir(p_priv->pt, get_dx(p_priv->dir));
  mask_tile_t *p_mask_tile;
  tile_t *p_tile;

  /* Reduce the speed */
  if ( !(p_priv->toggle = !p_priv->toggle) )
    return;

  assert(pt_in_rect(new_pt, pt(0,0), pt(p_game->p_cur_level->w, p_game->p_cur_level->h)));

  p_tile = &p_game->p_cur_level->p_level_data[new_pt.y * p_game->p_cur_level->w + new_pt.x];
  p_mask_tile = &MTILE_AT(p_game, new_pt.x, new_pt.y);

  if (!MASK_TILE_IS_WALKABLE(*p_mask_tile))
    {
      status_enqueue_message(p_game, "THE ROARING STOPS");
      callback_unregister(p_game, p_priv->id);
      return;
    }

  p_priv->pt = new_pt;
  *p_tile = p_priv->tile;
  p_mask_tile->id = MASK_ID(p_priv->tile);
}
示例#2
0
/* Update the status of a subarch thread for Java */
void updateStatus(int * subArchThreadStatus) {
	int id = MASK_ID(*subArchThreadStatus);

	if (global_spu_data->threads[id].complete) {
		*subArchThreadStatus |= SUBARCH_READY_BIT;
	}
}
示例#3
0
/* Syscall accessed from Java code */
extern "C" VM_Address
subArchGetRefReturn(int threadId) {
	int id = MASK_ID(threadId);
	checkIdComplete(id);
	VM_Address ret = *((VM_Address*)&global_spu_data->threads[id].retVal[0]);
	global_spu_data->threads[id].in_use = 0;
	return ret;
}
示例#4
0
/* Syscall accessed from Java code */
extern "C" double
subArchGetDoubleReturn(int threadId) {
	int id = MASK_ID(threadId);
	checkIdComplete(id);
	double ret = *((double*)&global_spu_data->threads[id].retVal[0]);
	global_spu_data->threads[id].in_use = 0;
	return ret;
}
示例#5
0
/* Syscall accessed from Java code */
extern "C" long long
subArchGetLongReturn(int threadId) {
	int id = MASK_ID(threadId);
	checkIdComplete(id);
	long long ret = *((long long*)&global_spu_data->threads[id].retVal[0]);
	global_spu_data->threads[id].in_use = 0;
	return ret;
}
示例#6
0
/* Syscall accessed from Java code */
extern "C" float
subArchGetFloatReturn(int threadId) {
	int id = MASK_ID(threadId);
	checkIdComplete(id);
	float ret = *((float*)&global_spu_data->threads[id].retVal[0]);
	global_spu_data->threads[id].in_use = 0;
	return ret;
}