"; } $is_verbose = false; if ($is_verbose) echo "REQUEST..."; foreach($_REQUEST as $key => $value) { //in case auto_globals is not enabled $GLOBALS[$key]=$value; if ($is_verbose) echo "$key:$value..."; } if ($is_verbose) echo "timezone..."; date_default_timezone_set('EST'); //required by PHP >=5.1.0 if ($is_verbose) echo "globals..."; //$chunkymap_view_x=0; //$chunkymap_view_z=0; //$chunkymap_view_zoom_multiplier=25; if (!isset($chunkymap_view_x)) { $chunkymap_view_x=0; } if (!isset($chunkymap_view_z)) { $chunkymap_view_z=0; } if (!isset($chunkymap_view_zoom_multiplier)) { $chunkymap_view_zoom_multiplier=.25; } // OPTIONAL: $chunkymapdata_path = "chunkymapdata"; $showplayers=true; // NOT OPTIONAL: $chunkymap_tile_original_w=80; $chunkymap_tile_original_h=80; $chunk_dimension_min=$chunkymap_tile_original_w; if ($chunkymap_tile_original_h<$chunk_dimension_min) $chunk_dimension_min=$chunkymap_tile_original_h; $chunkymap_view_zoom_min=1.0/$chunk_dimension_min; //should be a number that would get to exactly 100 eventually if multiplied by 2 repeatedly (such as 0.09765625); 0.005 doesn't work since tiles are 80x80 pixels $chunkymap_view_zoom_max=13107200.0; function echo_error($val) { if (!isset($val)) { $val="Unknown Error"; } echo ''.$val.'
'."\n"; } function get_dict_from_conf($path, $assignment_operator) { global $is_verbose; if ($is_verbose) echo "get_dict..."; $handle = fopen($path, "r"); $result = null; if ($handle) { while (($line = fgets($handle)) !== false) { $line_strip = trim($line); if (strlen($line_strip)>0) { if (substr($line_strip,0,1)!="#") { $ao_index = strpos($line_strip, $assignment_operator); if ($ao_index>0 and $ao_index<(strlen($line_strip)-1)) { //skip blank variable OR value $found_name = substr($line_strip, 0, $ao_index); $found_value_index = $ao_index + 1; $found_value = substr($line_strip, $found_value_index, strlen($line_strip)-$found_value_index); if ($result===null) { $result = array(); } $result[$found_name]=$found_value; } } } } fclose($handle); } else { echo "Failed to read $path (run chunkymap-cronjob script as root first, otherwise see README.md in minetest-chunkymap to ensure installation is correct).
"; } return $result; }//end get_dict_from_conf $map_dict = get_dict_from_conf($chunkymapdata_path."/generated.yml",":"); //startsWith and endsWith are from: //Salmon A. stackoverflow. . 5 Feb 2016. 19 Feb, 2016. function startsWith($haystack, $needle) { // search backwards starting from haystack length characters from the end return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== false; } function endsWith($haystack, $needle) { // search forward starting from end minus needle length characters return $needle === "" || (($temp = strlen($haystack) - strlen($needle)) >= 0 && strpos($haystack, $needle, $temp) !== false); } //NOTE: This function is here since the builtin is_int checks type (which is not needed in this webapp) and the builtin is_numeric includes decimal and exponent (see http://php.net/manual/en/function.is-numeric.php) function is_int_string($val) { global $is_verbose; if ($is_verbose) echo "is_int_string..."; $result = true; $int_chars="0123456789-"; for ($i=0; $i$chunkymap_view_zoom_min) { $is_out=true; $out_zoom = ($chunkymap_view_zoom_multiplier/2.0); } else $out_img_name = "chunkymap_zoom-out_disabled.png"; $zoom_clip = $chunkymap_view_zoom_max; $found=false; while ($zoom_clip>=$chunkymap_view_zoom_min) { if ($out_zoom>$zoom_clip) { $out_zoom=$zoom_clip*2; $found=true; break; } $zoom_clip = $zoom_clip/2; } if (!$found) { $out_zoom=$chunkymap_view_zoom_min; } //if ($in_zoom>$chunkymap_view_zoom_max) { // $in_zoom=$chunkymap_view_zoom_max; // echo ""; //} //elseif ($in_zoom>200) $in_zoom=400; //elseif ($in_zoom>100) $in_zoom=200; //elseif ($in_zoom>75) $in_zoom=100; //if ($in_zoom>50) $in_zoom=75; //elseif ($in_zoom>25) $in_zoom=50; //elseif ($in_zoom>12) $in_zoom=25; //elseif ($in_zoom>4) $in_zoom=12; //elseif ($in_zoom>2) $in_zoom=4; //elseif ($in_zoom>1) $in_zoom=2; //else $in_zoom=$chunkymap_view_zoom_min; // if ($in_zoom>1) $in_zoom=5; //echo "in:$in_zoom "; // if ($out_zoom<$chunkymap_view_zoom_min) $out_zoom=$chunkymap_view_zoom_min; // elseif ($out_zoom<2) $out_zoom=1; // elseif ($out_zoom<4) $out_zoom=2; // elseif ($out_zoom<12) $out_zoom=4; // elseif ($out_zoom<25) $out_zoom=12; // elseif ($out_zoom<50) $out_zoom=25; // elseif ($out_zoom<75) $out_zoom=50; // elseif ($out_zoom<100) $out_zoom=75; //elseif ($out_zoom<200) $out_zoom=100; //elseif ($out_zoom<$chunkymap_view_zoom_max) $out_zoom=(int)($chunkymap_view_zoom_max/2); //else $out_zoom=$chunkymap_view_zoom_max; //if ($out_zoom>76) $out_zoom=100; $zoom_clip=$chunkymap_view_zoom_min; $found=false; while ($zoom_clip<=$chunkymap_view_zoom_max) { if ($in_zoom<($zoom_clip*2)) { $in_zoom=$zoom_clip; $found=true; break; } $zoom_clip = $zoom_clip * 2; } if (!$found) $in_zoom=$chunkymap_view_zoom_max; $in_html=""; $out_html=""; if ($is_in) $in_html="$in_html"; if ($is_out) $out_html="$out_html"; echo $in_html; echo $out_html; } $is_echo_never_held=false; $held_echos=""; function echo_hold($val) { global $is_echo_never_held; global $held_echos; if (!$is_echo_never_held) $held_echos.="$val"; else echo "$val"; } function echo_release() { global $held_echos; global $is_echo_never_held; if (!$is_echo_never_held) echo "$held_echos"; $held_echos=""; } function echo_worldname() { global $map_dict; if (isset($map_dict["world_name"])) { echo $map_dict["world_name"]; } else echo "(missing world name)"; } function echo_chunkymap_table() { global $is_echo_never_held; $is_echo_never_held=true; global $chunkymap_view_x; global $chunkymap_view_z; global $chunkymap_view_zoom_multiplier; global $chunkymap_view_zoom_max; global $chunkymap_view_zoom_min; global $chunkymapdata_path; global $map_dict; global $is_verbose; global $chunkymap_tile_original_w; global $chunkymap_tile_original_h; global $chunkymap_view_zoom_max; if ($chunkymap_view_zoom_multiplier<$chunkymap_view_zoom_min) $chunkymap_view_zoom_multiplier = $chunkymap_view_zoom_min; if ($chunkymap_view_zoom_multiplier>$chunkymap_view_zoom_max) $chunkymap_view_zoom_multiplier = $chunkymap_view_zoom_max; //$zoom_divisor = (int)(100/$chunkymap_view_zoom_multiplier); $chunk_assoc = array(); // used for determining which chunks are on the edge, since not all generated map tiles are the same size (edge tile images are smaller and corner ones are smaller yet) $chunk_count = 0; $x_opener="chunk_x"; $z_opener="z"; $dot_and_ext = ".png"; $chunkx_min = 0; $chunkz_min = 0; $chunkx_max = 0; $chunkz_max = 0; //if ($map_dict != null) { // $chunkx_min = $map_dict["chunkx_min"]; // $chunkz_min = $map_dict["chunkz_min"]; // $chunkx_max = $map_dict["chunkx_max"]; // $chunkz_max = $map_dict["chunkz_max"]; //} //else { //echo "calculating range..."; //NOTE: even though *min and *max could be known from $map_dict, build a dict of chunks in order to align images properly since they are not all the same size: if ($handle = opendir($chunkymapdata_path)) { while (false !== ($file = readdir($handle))) { if (substr($file, 0, 1) != ".") { $file_lower = strtolower($file); if (endsWith($file_lower, $dot_and_ext) and startsWith($file_lower, $x_opener)) { $z_opener_index = strpos($file_lower, $z_opener, strlen($x_opener)); if ($z_opener_index !== false) { $x_len = $z_opener_index - strlen($x_opener); $z_len = strlen($file_lower) - strlen($x_opener) - $x_len - strlen($z_opener) - strlen($dot_and_ext); $x = substr($file_lower, strlen($x_opener), $x_len); $z = substr($file_lower, $z_opener_index + strlen($z_opener), $z_len); if (is_int_string($x) and is_int_string($z)) { $chunk_luid = "x".$x."z".$z; $chunk_assoc[$chunk_luid] = true; if ($is_verbose) echo "$chunk_luid,"; if ($x<$chunkx_min) { $chunkx_min=(int)$x; } if ($x>$chunkx_max) { $chunkx_max=(int)$x; } if ($z<$chunkz_min) { $chunkz_min=(int)$z; } if ($z>$chunkz_max) { $chunkz_max=(int)$z; } } else { echo "misnamed chunk tile image '$file' had coordinates ".$x.",".$z." for x,z."; } } } } } if ($is_verbose) echo "checked all chunks."; echo ""; } else { echo_error("could not open $chunkymapdata_path"); } //} $x_count = $chunkx_max - $chunkx_min; $z_count = $chunkz_max - $chunkz_min; echo "\r\n"; echo "
\r\n"; echo_hold( " \r\n"); $z = (int)$chunkz_max; $scale=(float)$chunkymap_view_zoom_multiplier; // no longer /100 $zoomed_w=(int)((float)$chunkymap_tile_original_w*$scale+.5); $zoomed_h=(int)((float)$chunkymap_tile_original_h*$scale+.5); while ($z >= $chunkz_min) { echo_hold( " \r\n"); $x = (int)$chunkx_min; while ($x <= $chunkx_max) { echo_hold( " \r\n"); $x++; } echo_hold( " \r\n"); echo_release(); $z--; } echo "
"); $chunk_luid = "x".$x."z".$z; $chunk_img_name = $x_opener.$x.$z_opener.$z."$dot_and_ext"; $chunk_img_path = $chunkymapdata_path.'/'.$chunk_img_name; if (is_file($chunk_img_path)) { echo_hold( " "); } //echo "
".$x.",0,".$z; echo_hold( "
\r\n"; echo "
\r\n"; } ?>