Beispiel #1
0
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);
        }
    }
}
Beispiel #2
0
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);
}