/** * 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()); }