void ts::action::Stage::create_stage_entities(const Stage_data& stage_data) { const auto& track = world_->track(); const auto& start_points = track.start_points(); for (const auto& car_data : stage_data.cars) { if (car_data.car_def.model && car_data.start_pos < start_points.size() && car_lookup_.find(car_data.car_id) == car_lookup_.end()) { const auto& start_point = start_points[car_data.start_pos]; auto car = world_->create_car(*car_data.car_def.model); car->set_position(start_point.position); car->set_rotation(start_point.rotation); car->set_z_position(start_point.level); car_data_.emplace_back(); car_data_.back().car = car; cup::Car_data& internal = car_data_.back(); internal = car_data; if (car_data.controller && car_data.controller->control_slot != controls::invalid_slot) { control_center_->assume_control(car_data.controller->control_slot, car); } car_lookup_[car_data.car_id] = car; car->set_controllable_id(car_data.car_id); } } }
static void xyz_move_notify(object old_env) { mixed nx, ny, nz; object common; object new_env; new_env = query_environment(); if (!old_env || !new_env) { return; } common = THING_SUBD->query_common_container(old_env, new_env); if (!common) { nx = 0; ny = 0; nz = 0; } else { nx = query_x_position(); ny = query_y_position(); nz = query_z_position(); for (; old_env != common; old_env = old_env->query_environment()) { nx += old_env->query_x_position(); ny += old_env->query_y_position(); nz += old_env->query_z_position(); } for (; new_env != common; new_env = new_env->query_environment()) { nx -= new_env->query_x_position(); ny -= new_env->query_y_position(); nz -= new_env->query_z_position(); } } set_x_position(nx); set_y_position(ny); set_z_position(nz); }