t_pars *my_path_access(t_pars *pars, char **env, int a) { int i; int j; j = 0; i = 0; while (env[a][i]) { j = 0; while (env[a][i] != '/') i++; if ((pars->path = malloc(sizeof(char) * my_strlen(env[a]) + 1)) == NULL) return (NULL); while (env[a][i] != ':' && env[a][i] != '\0') { pars->path[j] = env[a][i++]; j++; } pars->path = finish_path(pars, j); if (access(pars->path, X_OK) == 0) return (pars); else pars = pars_path(pars, env, a); } pars->path = NULL; return (pars); }
// ------------------------------------------------------------------------ // do movement that's hidden // ------------------------------------------------------------------------ void t_army_mover::do_hidden_move() { if (m_is_visible) return; if (m_path.size() == 0) { finish_path(); return; } t_adventure_map const& map = *m_army->get_map(); t_player& player = map.get_player(); int team = player.get_team(); declare_timer( timer_1, "do_hidden_movement" ); while (!m_is_visible && !m_halted) { t_adventure_path_point& point = m_path[m_step]; m_army->move( point ); expend_movement( point.move_cost ); mark_eluded_armies(); if (m_step == m_path.size() - 1) { finish_path(); return; } trigger_event(); if (m_halted) return; m_is_visible = !m_army->hidden_by_fog_of_war( team ) && show_enemy_moves(); if (m_is_visible) break; // break here, because start_new_square will increment step. ++m_step; declare_timer( timer_2, "on_starting_new_square: hidden" ); on_starting_new_square(); } if (m_halted) return; m_army->set_action( k_adv_actor_action_walk ); m_distance = compute_overall_distance( m_path, m_step + 1 ); start_new_square(); prepare_move( 0 ); set_next_time( get_time() + get_delay() ); }
// ------------------------------------------------------------------------ // class to move army on adventure map // ------------------------------------------------------------------------ void t_army_mover::do_movement() { int frame = m_army->get_frame(); int frame_count = m_army->get_frame_count(); t_adv_actor_action_id action = m_army->get_action(); t_uint32 current_time = get_time(); t_uint32 next_time = get_next_time() - get_delay(); t_counted_ptr<t_army_mover> ref = this; t_window_ptr adv_frame = m_window->get_frame(); // temporary reference to prevent the adventure frame // from removing itself if the game is over bool entered_new_square = false; declare_timer( timer_1, "do_movement" ); while ( m_frames > 0 && (!m_is_visible || elapsed_time( current_time, next_time ) >= 0) ) { m_offset += m_delta; m_cell_distance -= m_distance_delta; if (m_cell_distance <= m_crossing_point) { enter_new_square(); } m_army->set_frame_offset( m_offset / m_divisor ); frame++; if (action == k_adv_actor_action_walk && frame == frame_count) frame = 0; if (frame < frame_count) m_army->set_frame( frame ); m_frames--; if (m_is_visible) next_time += get_delay(); } if (m_is_visible) set_next_time( next_time ); // if m_frames is zero, we've hit the center of the cell, or we've // finished a prewalk / walk / postwalk sequence if (m_frames == 0) { if ((action == k_adv_actor_action_postwalk || m_path.size() == 0) && m_distance + m_cell_distance == 0) { finish_path(); return; } if (m_cell_distance == 0) { start_new_square(); entered_new_square = true; trigger_event(); if (m_halted) return; } else { m_cell_distance /= m_divisor; m_crossing_point /= m_divisor; } prepare_move( frame ); } if (entered_new_square) { declare_timer( timer_2, "on_starting_new_square" ); on_starting_new_square(); } }