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'); }
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); } } }
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); }