/**
   * Gets the effective research time based on the person's science skill.
   *
   * @param time the real amount of time (millisol) for research.
   * @return the effective amount of time (millisol) for research.
   */
  private double getEffectiveResearchTime(double time) {
    // Determine effective research time based on the science skill.
    double researchTime = time;
    int scienceSkill = getEffectiveSkillLevel();
    if (scienceSkill == 0) {
      researchTime /= 2D;
    } else if (scienceSkill > 1) {
      researchTime += researchTime * (.2D * scienceSkill);
    }

    // Modify by tech level of laboratory.
    int techLevel = lab.getTechnologyLevel();
    if (techLevel > 0) {
      researchTime *= techLevel;
    }

    // If research assistant, modify by assistant's effective skill.
    if (hasResearchAssistant()) {
      SkillManager manager = researchAssistant.getMind().getSkillManager();
      int assistantSkill = manager.getEffectiveSkillLevel(science.getSkill());
      if (scienceSkill > 0) {
        researchTime *= 1D + ((double) assistantSkill / (double) scienceSkill);
      }
    }

    return researchTime;
  }
 @Override
 public int getEffectiveSkillLevel() {
   SkillManager manager = person.getMind().getSkillManager();
   return manager.getEffectiveSkillLevel(science.getSkill());
 }