/** * Меняет цвет системы в сторону указанного. $new_color - либо массив, либо 'crit', либо 'heal' * @param $system_id * @param $new_color */ function change_system_color($system_id, $value, $new_color, $descr = '') { // Отсечка на случай, если попытаются менять цвет/стресс главного разреза if (!array_key_exists($system_id, Autodoc::$systems)) { return; } // Отказавшее - не перекрашивается, остается в крите! if ($_SESSION['systems'][$system_id]['stress'] >= 1000) { return; } // Проверяем - а не заморожен ли орган? $freeze_time = $_SESSION['effects'][$system_id]['freeze']; if ($freeze_time > 0) { // Есть заморозка if (microtime(1) > $freeze_time) { // заморозка уже прошла unset($_SESSION['effects'][$system_id]['freeze']); } else { // Еще не прошла - изменение цвета не работает return; } } $cur_col = $_SESSION['systems'][$system_id]['color']; $crit_col = $_SESSION['crit_color']; if ($new_color == 'heal') { $direction = Vect::diffVector($crit_col, $cur_col); } elseif ($new_color == 'crit') { $direction = Vect::diffVector($cur_col, $crit_col); } else { $direction = Vect::diffVector($cur_col, $new_color); } $changes = Vect::normalizeVector($direction, $value); if ($new_color == 'heal') { $out_col = Vect::addVector($cur_col, $changes); } else { if ($new_color == 'crit') { $target_col = $crit_col; } else { $target_col = $new_color; } $out_col = array(0, 0, 0); for ($i = 0; $i < 3; $i++) { if (abs($cur_col[$i] - $target_col[$i]) < abs($changes[$i])) { $out_col[$i] = $target_col[$i]; } else { $out_col[$i] = $cur_col[$i] + $changes[$i]; } } } $_SESSION['systems'][$system_id]['color'] = Vect::boundVector($out_col, 0, 100, 'fit'); $value = round($value, 2); // if ($descr) // Autodoc::message("Меняем цвет системы $system_id на $value в направлении ".(is_array($new_color)? "(".join(', ', $new_color).')': $new_color) // .($descr ? ' - '.$descr : ''), 0,0); }
public static function getDamageQuot($system) { $length = Vect::length(Vect::diffVector($_SESSION['systems'][$system]['color'], $_SESSION['crit_color'])); if ($length == 0) { return Autodoc::MAX_TOOL_DAMAGE_QUOTIENT; } return min(Autodoc::MAX_TOOL_DAMAGE_QUOTIENT, Autodoc::TOOL_COLOR_DAMAGE_BASE / $length); }