mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-07-21 09:15:06 +00:00
Merge main into v25
This commit is contained in:
@@ -24,6 +24,7 @@ import pl from "../../resources/lang/pl.json";
|
||||
import pt_BR from "../../resources/lang/pt-BR.json";
|
||||
import ru from "../../resources/lang/ru.json";
|
||||
import sh from "../../resources/lang/sh.json";
|
||||
import sl from "../../resources/lang/sl.json";
|
||||
import sv_SE from "../../resources/lang/sv-SE.json";
|
||||
import tp from "../../resources/lang/tp.json";
|
||||
import tr from "../../resources/lang/tr.json";
|
||||
@@ -69,6 +70,7 @@ export class LangSelector extends LitElement {
|
||||
"zh-CN": zh_CN,
|
||||
ko,
|
||||
gl,
|
||||
sl,
|
||||
};
|
||||
|
||||
createRenderRoot() {
|
||||
|
||||
@@ -17,7 +17,7 @@ import {
|
||||
centerButtonElement,
|
||||
COLORS,
|
||||
MenuElementParams,
|
||||
rootMenuItems,
|
||||
rootMenuElement,
|
||||
} from "./RadialMenuElements";
|
||||
|
||||
import swordIcon from "../../../../resources/images/SwordIconWhite.svg";
|
||||
@@ -56,7 +56,12 @@ export class MainRadialMenu extends LitElement implements Layer {
|
||||
`,
|
||||
};
|
||||
|
||||
this.radialMenu = new RadialMenu(this.eventBus, menuConfig);
|
||||
this.radialMenu = new RadialMenu(
|
||||
this.eventBus,
|
||||
rootMenuElement,
|
||||
centerButtonElement,
|
||||
menuConfig,
|
||||
);
|
||||
|
||||
this.playerActionHandler = new PlayerActionHandler(
|
||||
this.eventBus,
|
||||
@@ -64,13 +69,10 @@ export class MainRadialMenu extends LitElement implements Layer {
|
||||
);
|
||||
|
||||
this.chatIntegration = new ChatIntegration(this.game, this.eventBus);
|
||||
|
||||
this.radialMenu.setRootMenuItems(rootMenuItems, centerButtonElement);
|
||||
}
|
||||
|
||||
init() {
|
||||
this.radialMenu.init();
|
||||
this.radialMenu.setRootMenuItems(rootMenuItems, centerButtonElement);
|
||||
this.eventBus.on(ContextMenuEvent, (event) => {
|
||||
const worldCoords = this.transformHandler.screenToWorldCoordinates(
|
||||
event.x,
|
||||
|
||||
@@ -170,6 +170,18 @@ export class PlayerInfoOverlay extends LitElement implements Layer {
|
||||
}
|
||||
}
|
||||
|
||||
private displayUnitCount(
|
||||
player: PlayerView,
|
||||
type: UnitType,
|
||||
description: string,
|
||||
) {
|
||||
return !this.game.config().isUnitDisabled(type)
|
||||
? html`<div class="text-sm opacity-80" translate="no">
|
||||
${translateText(description)}: ${player.totalUnitLevels(type)}
|
||||
</div>`
|
||||
: "";
|
||||
}
|
||||
|
||||
private renderPlayerInfo(player: PlayerView) {
|
||||
const myPlayer = this.game.myPlayer();
|
||||
const isFriendly = myPlayer?.isFriendly(player);
|
||||
@@ -255,26 +267,36 @@ export class PlayerInfoOverlay extends LitElement implements Layer {
|
||||
${translateText("player_info_overlay.gold")}:
|
||||
${renderNumber(player.gold())}
|
||||
</div>
|
||||
<div class="text-sm opacity-80" translate="no">
|
||||
${translateText("player_info_overlay.ports")}:
|
||||
${player.totalUnitLevels(UnitType.Port)}
|
||||
</div>
|
||||
<div class="text-sm opacity-80" translate="no">
|
||||
${translateText("player_info_overlay.cities")}:
|
||||
${player.totalUnitLevels(UnitType.City)}
|
||||
</div>
|
||||
<div class="text-sm opacity-80" translate="no">
|
||||
${translateText("player_info_overlay.missile_launchers")}:
|
||||
${player.totalUnitLevels(UnitType.MissileSilo)}
|
||||
</div>
|
||||
<div class="text-sm opacity-80" translate="no">
|
||||
${translateText("player_info_overlay.sams")}:
|
||||
${player.totalUnitLevels(UnitType.SAMLauncher)}
|
||||
</div>
|
||||
<div class="text-sm opacity-80" translate="no">
|
||||
${translateText("player_info_overlay.warships")}:
|
||||
${player.units(UnitType.Warship).length}
|
||||
</div>
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.Port,
|
||||
"player_info_overlay.ports",
|
||||
)}
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.City,
|
||||
"player_info_overlay.cities",
|
||||
)}
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.Factory,
|
||||
"player_info_overlay.factories",
|
||||
)}
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.MissileSilo,
|
||||
"player_info_overlay.missile_launchers",
|
||||
)}
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.SAMLauncher,
|
||||
"player_info_overlay.sams",
|
||||
)}
|
||||
${this.displayUnitCount(
|
||||
player,
|
||||
UnitType.Warship,
|
||||
"player_info_overlay.warships",
|
||||
)}
|
||||
${relationHtml}
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -44,13 +44,11 @@ export class RadialMenu implements Layer {
|
||||
private currentLevel: number = 0; // Current menu level (0 = main menu, 1 = submenu, etc.)
|
||||
private menuStack: MenuElement[][] = []; // Stack to track menu navigation history
|
||||
private currentMenuItems: MenuElement[] = []; // Current active menu items (changes based on level)
|
||||
private rootMenuItems: MenuElement[] = []; // Store the original root menu items
|
||||
|
||||
private readonly config: RequiredRadialMenuConfig;
|
||||
private readonly backIconSize: number;
|
||||
|
||||
private centerButtonState: CenterButtonState = "default";
|
||||
private centerButtonElement: CenterButtonElement | null = null;
|
||||
|
||||
private isTransitioning: boolean = false;
|
||||
private lastHideTime: number = 0;
|
||||
@@ -79,6 +77,8 @@ export class RadialMenu implements Layer {
|
||||
|
||||
constructor(
|
||||
private eventBus: EventBus,
|
||||
private rootMenu: MenuElement,
|
||||
private centerButtonElement: CenterButtonElement,
|
||||
config: RadialMenuConfig = {},
|
||||
) {
|
||||
this.config = {
|
||||
@@ -904,18 +904,6 @@ export class RadialMenu implements Layer {
|
||||
return this.currentLevel;
|
||||
}
|
||||
|
||||
public setRootMenuItems(
|
||||
items: MenuElement[],
|
||||
centerButton: CenterButtonElement,
|
||||
) {
|
||||
this.currentMenuItems = [...items];
|
||||
this.rootMenuItems = [...items];
|
||||
this.centerButtonElement = centerButton;
|
||||
if (this.isVisible) {
|
||||
this.refreshMenu();
|
||||
}
|
||||
}
|
||||
|
||||
public setParams(params: MenuElementParams) {
|
||||
this.params = params;
|
||||
}
|
||||
@@ -928,7 +916,7 @@ export class RadialMenu implements Layer {
|
||||
this.currentLevel = 0;
|
||||
this.menuStack = [];
|
||||
|
||||
this.currentMenuItems = [...this.rootMenuItems];
|
||||
this.currentMenuItems = this.rootMenu.subMenu!(this.params!);
|
||||
|
||||
this.navigationInProgress = false;
|
||||
|
||||
|
||||
@@ -433,8 +433,17 @@ export const centerButtonElement: CenterButtonElement = {
|
||||
},
|
||||
};
|
||||
|
||||
export const rootMenuItems: MenuElement[] = [
|
||||
infoMenuElement,
|
||||
boatMenuElement,
|
||||
buildMenuElement,
|
||||
];
|
||||
export const rootMenuElement: MenuElement = {
|
||||
id: "root",
|
||||
name: "root",
|
||||
disabled: () => false,
|
||||
icon: infoIcon,
|
||||
color: COLORS.info,
|
||||
subMenu: (params: MenuElementParams) => {
|
||||
let ally = allyRequestElement;
|
||||
if (params.selected?.isAlliedWith(params.myPlayer)) {
|
||||
ally = allyBreakElement;
|
||||
}
|
||||
return [infoMenuElement, boatMenuElement, ally, buildMenuElement];
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user