116 lines
2.4 KiB
ActionScript
116 lines
2.4 KiB
ActionScript
import menus;
|
|
import saving;
|
|
import dialogs.MessageDialog;
|
|
|
|
const string DATE_FORMAT("%Y-%m-%d %H:%M");
|
|
class SaveItem : MenuAction {
|
|
string fname;
|
|
int64 mtime;
|
|
string date;
|
|
|
|
SaveItem(const string& filename) {
|
|
fname = filename;
|
|
super(getBasename(filename, false), 1);
|
|
|
|
mtime = getModifiedTime(filename);
|
|
date = strftime(DATE_FORMAT, mtime);
|
|
}
|
|
|
|
void draw(GuiListbox@ ele, uint flags, const recti& absPos) override {
|
|
MenuAction::draw(ele, flags, absPos);
|
|
|
|
const Font@ detail = ele.skin.getFont(FT_Small);
|
|
detail.draw(pos=absPos.padded(6), text=date, vertAlign=1.0, horizAlign=1.0);
|
|
}
|
|
|
|
int opCmp(const SaveItem@ other) const {
|
|
if(mtime < other.mtime)
|
|
return -1;
|
|
if(mtime > other.mtime)
|
|
return 1;
|
|
return 0;
|
|
}
|
|
};
|
|
|
|
class LoadMenu : MenuBox {
|
|
LoadMenu() {
|
|
super();
|
|
}
|
|
|
|
void buildMenu() {
|
|
title.text = locale::LOAD_GAME;
|
|
|
|
items.addItem(MenuAction(Sprite(spritesheet::MenuIcons, 11), locale::MENU_BACK, 0));
|
|
|
|
string dir = baseProfile["saves"];
|
|
FileList files(dir, "*.sr2");
|
|
|
|
uint cnt = files.length;
|
|
array<SaveItem@> list;
|
|
for(uint i = 0; i < cnt; ++i)
|
|
list.insertLast(SaveItem(files.path[i]));
|
|
list.sortDesc();
|
|
for(uint i = 0; i < cnt; ++i)
|
|
items.addItem(list[i]);
|
|
}
|
|
|
|
void onSelected(const string& name, int value) {
|
|
if(value == 0) {
|
|
if(mpServer && !game_running)
|
|
mpDisconnect();
|
|
switchToMenu(main_menu, false);
|
|
return;
|
|
}
|
|
else if(value == 1) {
|
|
string path = path_join(baseProfile["saves"], name)+".sr2";
|
|
|
|
SaveFileInfo info;
|
|
getSaveFileInfo(path, info);
|
|
|
|
if(!info.hasMods()) {
|
|
message(locale::SAVE_NO_MODS);
|
|
return;
|
|
}
|
|
|
|
uint version = getSaveVersion(path);
|
|
if(!isSaveCompatible(version)) {
|
|
auto@ dialog = message(locale::SAVE_NO_COMPAT);
|
|
dialog.titleColor = colors::Red;
|
|
return;
|
|
}
|
|
|
|
switchToMenu(main_menu, false, true);
|
|
loadGame(path);
|
|
return;
|
|
}
|
|
}
|
|
|
|
void hide() {
|
|
backgroundFile = "";
|
|
MenuBox::hide();
|
|
}
|
|
|
|
bool onGuiEvent(const GuiEvent& event) {
|
|
switch(event.type) {
|
|
case GUI_Hover_Changed:
|
|
if(event.caller is items) {
|
|
MenuAction@ act = cast<MenuAction>(items.hoveredItem);
|
|
if(act !is null && act.value == 1) {
|
|
backgroundFile = path_join(baseProfile["saves"], act.text)+".png";
|
|
if(!fileExists(backgroundFile))
|
|
backgroundFile = "";
|
|
}
|
|
else
|
|
backgroundFile = "";
|
|
return true;
|
|
}
|
|
break;
|
|
}
|
|
return MenuBox::onGuiEvent(event);
|
|
}
|
|
};
|
|
|
|
void init() {
|
|
@load_menu = LoadMenu();
|
|
}
|