示例#1
0
/**
 * Меняет цвет системы в сторону указанного. $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);
}
示例#2
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);
 }