void playable_custom_object::process(level& lvl) { if(player_info_.current_level() != lvl.id()) { player_info_.set_current_level(lvl.id()); } if(can_interact_ > 0) { --can_interact_; } iphone_controls::set_underwater(underwater_controls_); iphone_controls::set_can_interact(can_interact_ != 0); iphone_controls::set_on_platform(on_platform()); iphone_controls::set_standing(is_standing(level::current())); float underwater_x, underwater_y; if(underwater_controls_ && iphone_controls::water_dir(&underwater_x, &underwater_y)) { underwater_ctrl_x_ = underwater_x*1000; underwater_ctrl_y_ = underwater_y*1000; } else { underwater_ctrl_x_ = 0; underwater_ctrl_y_ = 0; } reverse_ab_ = preferences::reverse_ab(); bool controls[controls::NUM_CONTROLS]; for(int n = 0; n != controls::NUM_CONTROLS; ++n) { controls[n] = control_status(static_cast<controls::CONTROL_ITEM>(n)); } clear_control_status(); read_controls(lvl.cycle()); static const std::string keys[] = { "up", "down", "left", "right", "attack", "jump", "tongue" }; for(int n = 0; n != controls::NUM_CONTROLS; ++n) { if(controls[n] != control_status(static_cast<controls::CONTROL_ITEM>(n))) { if(controls[n]) { handle_event("end_ctrl_" + keys[n]); } else { handle_event("ctrl_" + keys[n]); } } } custom_object::process(lvl); }