maps2 #2

Merged
lopar merged 23 commits from maps2 into master 2022-02-20 23:15:31 +00:00
Showing only changes of commit 03db6e5aec - Show all commits

74
public/index.php Normal file
View File

@ -0,0 +1,74 @@
<?php
session_start();
error_reporting(E_ALL);
# Date: 20.02.2022 (16:17)
use Insallah\Map\Map;
use Insallah\Map\MapData;
use Insallah\Player\Player;
/** Автозагрузка классов с учётом неймспейсов. */
spl_autoload_register(function ($className) {
$fileName = dirname(__DIR__) . '/src/' . str_replace('\\', '/', $className . '.php');
if (file_exists($fileName)) {
require_once $fileName;
}
});
$_POST['action'] ??= null;
$_SESSION['x'] ??= null;
$_SESSION['y'] ??= null;
$_SESSION['force'] ??= null; // Для насильной смены локации.
$_SESSION['mapname'] ??= 'map';
/** Пример смены локации.
* Да, можно сделать функцию.
* И это будет более правильно.
* Это просто принцип для демонстрации.
*/
if ($_SESSION['x'] === 0 && $_SESSION['y'] === 2 && $_SESSION['mapname'] === 'map') {
$_SESSION['mapname'] = 'map2';
$_SESSION['force'] = true;
header('Location: ' . $_SERVER['REQUEST_URI']);
exit;
}
if ($_SESSION['x'] === 4 && $_SESSION['y'] === 2 && $_SESSION['mapname'] === 'map2') {
$_SESSION['mapname'] = 'map';
$_SESSION['force'] = true;
header('Location: ' . $_SERVER['REQUEST_URI']);
exit;
}
$map = new Map(new MapData($_SESSION['mapname']), $_SESSION['force']);
unset($_SESSION['force']);
if ($_POST['action'] === 'up') {
$map->goUp();
}
if ($_POST['action'] === 'down') {
$map->goDown();
}
if ($_POST['action'] === 'left') {
$map->goLeft();
}
if ($_POST['action'] === 'right') {
$map->goRight();
}
if ($_POST['action'] === 'clear') {
Player::clear();
}
/** Для отладки. */
?>
<div style="width: 600px; border: lightcoral dashed 2px; background-color: antiquewhite; padding: 2px;">
<strong>P:[<?= Player::getPos()[0] ?>,<?= Player::getPos()[1] ?>] MAP:[<?= $_SESSION['mapname'] ?>]</strong><br>
Смена локаций на MAP:[0,2] и MAP2:[4,2]. Да, там надо повторно клацнуть чтобы всё сменилось, но опять же, это
принцип на коленке, а не готовое решение. Если хранить всё хоть в какой-то базе, а не в сессиях от половины этих
костылей можно отказаться.
</div>
<?php
echo $map->drawVisible();
require_once '../resources/views/map-controls.html';
echo 'Карта целиком:<br><br>';
MapData::drawFullMap();