Files
core/hwe/func_template.php
T

317 lines
8.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace sammo;
/**
* 템플릿 생성과 관련된 함수들을 모아두는 파일
*
* NOTE: 아직 converter와 명확한 구분이 되어있지 않음.
* TODO: legacy template들을 전부 template 폴더로 모아둘 필요 있음
* TODO: side effect를 제거
*/
/**
* 관리자 권한이 필요함을 출력.
* @return void
*/
function requireAdminPermissionHTML()
{
ob_start();
?>
<!DOCTYPE html>
<html>
<head>
<title>관리메뉴</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=1024" />
<?= WebUtil::printCSS('../d_shared/common.css') ?>
<?= WebUtil::printDist('ts', 'common', true) ?>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
</head>
<body>
관리자가 아닙니다.<br>
<?= banner() ?>
</body>
</html>
<?php
return ob_get_clean();
}
function chiefTurnTable()
{
$turnList = [];
$turnList[] = "<option selected value='0'>1턴</option>";
foreach (Util::range(1, GameConst::$maxChiefTurn) as $turnIdx) {
$turnText = $turnIdx + 1;
$turnList[] = "<option value='{$turnIdx}'>{$turnText}턴</option>";
}
$turnText = join("\n", $turnList);
return "
<select id='chiefTurnSelector' name=turn[] size=6 multiple>
{$turnText}
</select>
";
}
function templateLimitMsg(string $turntime): string{
return "이미 너무 많은 접속을 하셨습니다. 다음 턴에 다시 시도해주세요. (턴시간: {$turntime})";
}
function displayiActionObjInfo(?iAction $action)
{
if ($action === null) {
$info = '';
$text = '-';
} else {
$info = $action->getInfo();
$text = $action->getName();
}
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
return $templates->render('tooltip', [
'text' => $text,
'info' => $info,
]);
}
function displayCharInfo(string $type): string
{
$class = buildPersonalityClass($type);
$info = $class->getInfo();
$text = $class->getName();
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
return $templates->render('tooltip', [
'text' => $text,
'info' => $info,
]);
}
function displaySpecialWarInfo(?string $type): string
{
$class = buildGeneralSpecialWarClass($type);
$info = $class->getInfo();
$name = $class->getName();
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
return $templates->render('tooltip', [
'text' => $name,
'info' => $info,
]);
}
function displaySpecialDomesticInfo(?string $type): string
{
$class = buildGeneralSpecialDomesticClass($type);
$info = $class->getInfo();
$name = $class->getName();
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
return $templates->render('tooltip', [
'text' => $name,
'info' => $info,
]);
}
function allButton(bool $seizeNPCMode, array $opts = [])
{
if ($seizeNPCMode) {
$site = "a_npcList.php";
$call = "빙의일람";
} else {
$site = "v_vote.php";
$call = "설문조사";
}
if (\file_exists(__DIR__ . "/d_setting/templates/allButton.php")) {
$templates = new \League\Plates\Engine(__DIR__ . '/d_setting/templates');
} else {
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
}
return $templates->render('allButton', array_merge([
'call' => $call,
'site' => $site
], $opts));
}
function commandButton(array $opts = [])
{
$session = Session::getInstance();
$userID = Session::getUserID();
if (!$session->isGameLoggedIn()) {
return '';
}
$db = DB::db();
$me = $db->queryFirstRow("select no,nation,officer_level,belong,permission,penalty from general where owner=%i", $userID);
$nation = $db->queryFirstRow("select nation,level,color,secretlimit from nation where nation=%i", $me['nation']) ?? [
'nation' => 0,
'level' => 0,
'secretlimit' => 99,
'color' => '#000000'
];
$bgColor = Util::array_get($nation['color']) ?: '#000000';
$fgColor = newColor($bgColor);
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
$showSecret = false;
$permission = checkSecretPermission($me);
$btnClassForTournament = $opts['btnClass'];
if ($opts['isTournamentApplicationOpen']) {
if ($btnClassForTournament != 'dropdown-item') {
$btnClassForTournament = 'toolbarButton2';
}
}
$btnClassForBetting = $opts['btnClass'];
if ($opts['isBettingActive']) {
if ($btnClassForTournament != 'dropdown-item') {
$btnClassForBetting = 'toolbarButton2';
}
}
if ($permission >= 1) {
$showSecret = true;
} else if ($me['officer_level'] == 0) {
$showSecret = false;
}
return $templates->render('commandButton', array_merge([
'bgColor' => $bgColor,
'fgColor' => $fgColor,
'meLevel' => $me['officer_level'],
'nationLevel' => $nation['level'],
'showSecret' => $showSecret,
'permission' => $permission,
'btnClassForTournament' => $btnClassForTournament,
'btnClassForBetting' => $btnClassForBetting,
], $opts));
}
function formatWounded(int $value, int $wound): string
{
if ($wound == 0) {
return "$value";
}
$woundedValue = intdiv($value * (100 - $wound), 100);
return "<font color=red>$woundedValue</font>";
}
function formatDefenceTrain(int $value): string
{
if ($value === 999) {
return "×";
} else if ($value >= 90) {
return "☆";
} else if ($value >= 80) {
return "◎";
} else if ($value >= 60) {
return "○";
} else {
return "△";
}
}
function formatLeadershipBonus(int $value): string
{
if ($value == 0) {
return '';
}
return "<font color=cyan>+{$value}</font>";
}
function getMapTheme(): string
{
return GameConst::$mapName;
}
function getMapHtml(?string $mapName = null)
{
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
if($mapName === null){
$mapName = GameConst::$mapName;
}
return $templates->render('map', [
'mapName' => $mapName
]);
}
function getInvitationList(array $nationList)
{
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
foreach ($nationList as &$nation) {
$nation['textColor'] = newColor($nation['color']);
}
return $templates->render('invitationList', [
'nationList' => $nationList
]);
}
function getAutorunInfo($autorunOption)
{
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
$auto_info = [];
foreach ($autorunOption['options'] as $auto_option => $value) {
assert($value);
switch ($auto_option) {
case 'develop':
$auto_info['내정'] = '내정';
break;
case 'warp':
$auto_info['순간이동'] = '순간이동';
break;
case 'recruit':
$auto_info['징병'] = $auto_info['징병'] ?? '징병';
break;
case 'recruit_high':
$auto_info['징병'] = '모병';
break;
case 'train':
$auto_info['훈사'] = '훈련/사기진작';
break;
case 'battle':
$auto_info['출병'] = '출병';
break;
case 'chief':
$auto_info['사령턴'] = '사령턴';
break;
}
}
$limit = Util::toInt($autorunOption['limit_minutes']);
if ($limit >= 43200) {
$auto_info['제한'] = '항상 유효';
} else if ($limit % 60 == 0) {
$auto_info['제한'] = ($limit / 60) . '시간 유효';
} else {
$auto_info['제한'] = ($limit) . '분 유효';
}
$auto_info = join(', ', array_values($auto_info));
return $templates->render('tooltip', [
'text' => '자율행동',
'info' => $auto_info,
'style' => 'text-decoration:underline',
'copyable_info' => true
]);
}