Example #1
0
 public static function normalizeVector($arr, $to_len = 1)
 {
     $len = Vect::length($arr) / $to_len;
     if ($len) {
         return array($arr[0] / $len, $arr[1] / $len, $arr[2] / $len);
     } else {
         return array(0, 0, 0);
     }
     print_r(debug_backtrace());
     die('Division by zero');
 }
Example #2
0
function start_operation()
{
    global $diagnoz_url;
    global $curr_time;
    //	Начать операцию
    foreach ($_SESSION as $key => $value) {
        unset($_SESSION[$key]);
    }
    //	Чистим всю сессию
    $_SESSION['operation_start'] = $curr_time;
    foreach (Autodoc::$tools as $tool => $tooldata) {
        if ($tooldata['is_switchable']) {
            $_SESSION['active_tools'][$tool] = false;
        }
    }
    $data = json_decode(file_get_contents($diagnoz_url), true);
    //	Определяем диагностические показатели
    $_SESSION['diag'] = $data['diag'];
    if (isset($data['diag']['pulse'])) {
        $_SESSION['diag']['pulse'] = $data['diag']['pulse'];
    } else {
        $_SESSION['diag']['pulse'] = Autodoc::getPulse(floatval($data['diag']['AD']), floatval($data['diag']['temp']));
    }
    $_SESSION['diag']['AD_gap'] = 1.5;
    //	Определяем критический цвет болезней
    $crit_col_arr = array();
    if ($data['diseases']) {
        foreach ($data['diseases'] as &$disease) {
            foreach ($disease['systems'] as $system_name => $power) {
                $disease['power'] += $power;
            }
            $crit_col_arr[] = array($disease['color'], $disease['power']);
        }
        $_SESSION['crit_color'] = Vect::mean_color($crit_col_arr);
    } else {
        $_SESSION['crit_color'] = array(0, 0, 0);
    }
    $_SESSION['html_crit_color'] = rgb2html100($_SESSION['crit_color']);
    //	Определяем состояние систем и органов
    foreach (Autodoc::$systems as $system_name => $asystem) {
        $system = $asystem;
        $system['stress'] = intval($data['state'][$system_name]);
        if ($system['stress'] >= 1000) {
            $system['stress'] = 1000;
            $system['color'] = $_SESSION['crit_color'];
        } else {
            // Система не отказала
            //		Определяем цвет системы на момент начала операции. Равен средневзвешенному цвету от дефолтного цвета системы
            //      и всех цветов болезней, которые завязаны на эту систеу
            $cols = array();
            $cols[] = array($asystem['color'], 1000);
            if ($data['diseases']) {
                foreach ($data['diseases'] as &$disease) {
                    if (in_array($system_name, $disease['systems'])) {
                        $cols[] = array($disease['color'], $data['state'][$system_name]);
                    }
                }
            }
            $system['color'] = Vect::mean_color($cols);
        }
        $system['html_color'] = rgb2html100($system['color']);
        $_SESSION['systems'][$system_name] = $system;
    }
    $_SESSION['used_tracks'] = array();
    //	Определяем начальные кровопотери
    $_SESSION['blood'] = array('left' => 5000 - $data['bloodloss'], 'lost' => intval($data['bloodloss']));
    /*
    $maxlen=0;
    foreach ($data['diseases'] as $disease)
    	if ($maxlen < $disease['time_elapsed'])
    		$maxlen = $disease['time_elapsed'];
    $_SESSION['blood']['lost'] = 1800*log($maxlen/600 + 1);
    $_SESSION['blood']['left'] -= $_SESSION['blood']['lost'];
    */
    //	Записываем стартовое состояние
    $_SESSION['start_patient_state'] = $data;
    $_SESSION['operation_in_process'] = 1;
    Autodoc::message(date("H:i:s. Начата операция"), 1, 1);
    //	Для вируса Х
    if ($data['diseases']) {
        foreach ($data['diseases'] as $dis) {
            if (substr($dis['id'], 0, 3) == 'IVX') {
                Autodoc::message("В крови пациента обнаружен характерный Вирус Х. Потенциальная опасность для жизни: крайне высокая. Бакто-препараты модифицированы. ", 1, 1);
            }
            //		if ($dis['id'] == 'MYT')
            //			Autodoc::message("Обнаружены необратимые генетические мутации. Реакция на стандартные медикаменты и инструменты непредсказуема. Проведение операции на свой страх и риск", 1, 1);
        }
    }
}
Example #3
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);
 }