Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
9 KB
Referenced Files
None
Subscribers
None
diff --git a/scripts/menu/main_menu.as b/scripts/menu/main_menu.as
index c36d1ac..3e7a09d 100644
--- a/scripts/menu/main_menu.as
+++ b/scripts/menu/main_menu.as
@@ -1,342 +1,343 @@
import menus;
import settings.game_settings;
from new_game import showNewGame;
from multiplayer_menu import showMultiplayer;
from irc_window import openIRC, closeIRC, LinkableMarkupText;
import dialogs.QuestionDialog;
import icons;
// TODO: Switch this out once we fix multiple starts.
const bool M_BROKEN = false;
enum MenuActions {
MA_NewGame,
MA_EndGame,
MA_Tutorial,
MA_Campaign,
MA_LoadGame,
MA_SaveGame,
MA_Options,
MA_Resume,
MA_Quit,
MA_OpenIRC,
MA_CloseIRC,
MA_Multiplayer,
MA_Disconnect,
MA_Sandbox,
MA_Update,
MA_Mods,
};
+class MainMenu : MenuBox {
MenuNews news;
MainMenu() {
super();
}
void buildMenu() {
if(game_running && gameSpeed == 0)
title.text = locale::PAUSED_MENU;
else
title.text = locale::MAIN_MENU;
if(game_running) {
if(gameSpeed == 0 && settings::bMenuPause)
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 10), locale::RESUME_GAME, MA_Resume));
else
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 10), locale::RETURN_TO_GAME, MA_Resume));
}
if(mpClient)
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 8), locale::DISCONNECT, MA_Disconnect));
else if(game_running)
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 8), locale::END_GAME, MA_EndGame));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 3), locale::TUTORIAL, MA_Tutorial));
//items.addItem(MenuAction(Sprite(material::TabPlanets), locale::CAMPAIGN, MA_Campaign));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 0), locale::NEW_GAME, MA_NewGame));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 1), locale::LOAD_GAME, MA_LoadGame));
if(game_running && !mpClient)
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 2), locale::SAVE_GAME, MA_SaveGame));
items.addItem(MenuAction(Sprite(spritesheet::ResourceIconsSmall, 46), locale::MODS_MENU, MA_Mods));
//if(!game_running && !STEAM_EQUIV_BUILD)
//items.addItem(MenuAction(icons::Refresh, locale::CHECK_FOR_UPDATES, MA_Update));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 4), locale::MULTIPLAYER, MA_Multiplayer));
items.addItem(MenuAction(Sprite(material::TabDesigns), locale::SANDBOX, MA_Sandbox));
if(IRC.running)
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 5), locale::CLOSE_IRC, MA_CloseIRC));
else
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 6), locale::OPEN_IRC, MA_OpenIRC));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 7), locale::MENU_OPTIONS, MA_Options));
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 8), locale::QUIT_GAME, MA_Quit));
}
void tick(double time) {
if(!game_running && !menu_container.animating && menu_container.visible) {
if(mpIsConnected())
showNewGame(true);
else if(mpIsConnecting() || cloud::queueRequest)
showMultiplayer();
}
}
void startTutorial() {
GameSettings settings;
settings.defaults();
settings.galaxies[0].map_id = "Tutorial.Tutorial";
Message msg;
settings.write(msg);
if(topMod !is baseMod) {
array<string> basemods = {"base"};
switchToMods(basemods);
}
startNewGame(msg);
}
void startSandbox() {
GameSettings settings;
settings.defaults();
settings.galaxies[0].map_id = "Sandbox.Sandbox";
Message msg;
settings.write(msg);
startNewGame(msg);
}
void _stopGame() {
stopGame();
refresh();
}
void animate(MenuAnimation type) {
if(type == MAni_LeftOut || type == MAni_RightOut)
showDescBox(null);
MenuBox::animate(type);
}
void completeAnimation(MenuAnimation type) {
if(type == MAni_LeftShow || type == MAni_RightShow)
showDescBox(news);
MenuBox::completeAnimation(type);
}
void onSelected(const string& name, int value) {
switch(value) {
case MA_Resume:
switchToGame();
break;
case MA_NewGame:
showNewGame();
break;
case MA_Tutorial:
if(game_running)
question(locale::PROMPT_TUTORIAL, ConfirmChoice(MenuChoice(this.startTutorial)));
else
startTutorial();
break;
case MA_Campaign:
switchToMenu(campaign_menu);
break;
case MA_Sandbox:
if(game_running)
question(locale::PROMPT_SANDBOX, ConfirmChoice(MenuChoice(this.startSandbox)));
else
startSandbox();
break;
case MA_Options:
switchToMenu(options_menu);
break;
case MA_LoadGame:
switchToMenu(load_menu);
break;
case MA_SaveGame:
switchToMenu(save_menu);
break;
case MA_Mods:
switchToMenu(mods_menu);
break;
case MA_EndGame:
if(game_running)
question(locale::PROMPT_END, ConfirmChoice(MenuChoice(this._stopGame)));
else
_stopGame();
break;
case MA_Disconnect:
if(game_running)
question(locale::PROMPT_DISCONNECT, ConfirmChoice(MenuChoice(this._stopGame)));
else {
mpDisconnect();
_stopGame();
}
break;
case MA_OpenIRC:
if(!IRC.running) {
IRC.nickname = settings::sNickname;
IRC.connect();
openIRC();
refresh();
}
break;
case MA_CloseIRC:
if(IRC.running) {
IRC.disconnect();
closeIRC();
refresh();
}
break;
case MA_Quit:
if(game_running)
question(locale::PROMPT_QUIT, ConfirmChoice(quitGame));
else
quitGame();
break;
case MA_Multiplayer:
showMultiplayer();
break;
case MA_Update:
checkForUpdates();
break;
}
}
};
funcdef void MenuChoice();
class ConfirmChoice : QuestionDialogCallback {
MenuChoice@ choice;
ConfirmChoice(MenuChoice@ Choice) {
@choice = Choice;
}
void questionCallback(QuestionDialog@ dialog, int answer) {
if(answer == QA_Yes)
choice();
}
};
class MenuNews : DescBox {
GuiPanel@ newsPanel;
LinkableMarkupText@ newsText;
WebData wdata;
bool shown = false;
GuiPanel@ modsPanel;
GuiMarkupText@ modsText;
GuiButton@ modsButton;
GuiButton@ workshopButton;
GuiButton@ internetButton;
MenuNews() {
@newsPanel = GuiPanel(this, Alignment(Left, Top, Right, Bottom-100));
@newsText = LinkableMarkupText(newsPanel, recti_area(12,12,100,100));
newsText.text = "...";
newsText.paragraphize = true;
@modsPanel = GuiPanel(this, Alignment(Left, Bottom-88, Right, Bottom));
@modsText = GuiMarkupText(modsPanel, Alignment(Left+12, Top+12, Right-12, Bottom-52));
modsText.defaultFont = FT_Bold;
@modsButton = GuiButton(modsPanel, Alignment(Left+0.5f-204, Bottom-50, Width=200, Height=40), locale::MANAGE_MODS);
modsButton.buttonIcon = Sprite(spritesheet::ResourceIconsSmall, 46);
@workshopButton = GuiButton(modsPanel, Alignment(Left+0.5f+4, Bottom-50, Width=200, Height=40), locale::OPEN_WORKSHOP);
workshopButton.buttonIcon = icons::Import;
@internetButton = GuiButton(newsPanel, Alignment(Left+0.5f-200, Top+0.5f-30, Left+0.5f+200, Top+0.5f+30), locale::ENABLE_INTERNET);
internetButton.visible = false;
if(cloud::isActive) {
settings::bEnableInternet = true;
}
else {
workshopButton.visible = false;
modsButton.alignment.left.pixels += 104;
}
if(settings::bEnableInternet) {
getWikiPage("News", wdata);
}
else {
internetButton.visible = true;
newsText.text = "[font=Medium]News[/font]";
shown = true;
}
refresh();
updateAbsolutePosition();
}
void updateAbsolutePosition() {
DescBox::updateAbsolutePosition();
if(newsText !is null)
newsText.size = vec2i(newsPanel.size.width-24, newsText.renderer.height+10);
}
void refresh() {
uint installed = 0;
uint enabled = 0;
for(uint i = 0, cnt = modCount; i < cnt; ++i) {
auto@ mod = getMod(i);
if(!mod.listed)
continue;
installed += 1;
if(mod.enabled)
enabled += 1;
}
modsText.text = format("[center]"+locale::MENU_MOD_COUNTS+"[/center]", toString(installed), toString(enabled));
}
bool onGuiEvent(const GuiEvent& evt) override {
if(evt.type == GUI_Clicked) {
if(evt.caller is modsButton) {
switchToMenu(mods_menu);
return true;
}
else if(evt.caller is workshopButton) {
openBrowser("http://steamcommunity.com/app/282590/workshop/");
return true;
}
else if(evt.caller is internetButton) {
internetButton.visible = false;
shown = false;
getWikiPage("News", wdata);
settings::bEnableInternet = true;
saveSettings();
return true;
}
}
return DescBox::onGuiEvent(evt);
}
void show() {
DescBox::show();
refresh();
}
void draw() {
if(!shown && wdata.completed) {
string result = wdata.result;
newsText.text = result;
shown = true;
updateAbsolutePosition();
}
skin.draw(SS_PlainBox, SF_Normal, newsPanel.AbsolutePosition, Color(0xffffffff));
skin.draw(SS_PlainBox, SF_Normal, modsPanel.AbsolutePosition, Color(0xffffffff));
BaseGuiElement::draw();
}
};
void init() {
MainMenu menu;
@main_menu = menu;
showDescBox(menu.news);
switchToMenu(menu);
}

File Metadata

Mime Type
text/x-diff
Expires
Sat, May 16, 7:09 AM (15 h, 51 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
64054
Default Alt Text
(9 KB)

Event Timeline