Worms4Editor/W4Gui/DataManager.cs

172 lines
4.7 KiB
C#

using LibW4M;
using LibW4M.PS2;
using LibW4M.XBOX;
using LibXom;
using System;
using System.CodeDom;
using System.Collections.Generic;
using System.IO.Compression;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using W4Gui.Tabs;
namespace W4Gui
{
public static class DataManager
{
public static SaveType LoadedSaveType;
public static string LoadedSavePath;
public static bool SaveLoaded = false;
public static W4SaveFile SaveFile;
public static void CommitData()
{
foreach(TabEntry control in SaveComponents)
{
try
{
control.SaveFromControl();
}
catch { };
}
}
public static void ParseData()
{
foreach (TabEntry control in SaveComponents)
{
try
{
control.LoadIntoControl();
}
catch { };
}
}
public static void SavePS2(Stream ps2PsuSaveStream)
{
using (ps2PsuSaveStream)
{
Ps2Save.CreateSaveFile(DataManager.SaveFile, ps2PsuSaveStream);
}
}
public static void SaveXBOX(Stream xboxSaveStream, XboxRegion region)
{
using (xboxSaveStream)
{
XboxSave.CreateSaveZipFile(DataManager.SaveFile, xboxSaveStream, region);
}
}
public static void SavePC(string newXom)
{
SaveFile.Save(File.OpenWrite(newXom));
}
public static void SaveXBOX(string newXom, XboxRegion region)
{
SaveXBOX(File.OpenWrite(newXom), region);
}
public static void SavePS2(string newXom)
{
SavePS2(File.OpenWrite(newXom));
}
public static void LoadPC(string filename)
{
SaveFile = new W4SaveFile(XomReader.ReadXomFile(filename));
}
public static void LoadPS2(string filename)
{
SaveFile = Ps2Save.ReadPS2Save(filename);
}
public static SaveType LoadXBOX(string filename)
{
XboxRegion region = XboxRegion.UNKNOWN;
SaveFile = XboxSave.ReadXboxSave(filename, ref region);
if (region == XboxRegion.USA) return SaveType.XBOX_US;
if (region == XboxRegion.EU) return SaveType.XBOX_EU;
return SaveType.UNKNOWN;
}
public static SaveType LoadGuessType(string filename)
{
switch (Path.GetExtension(filename))
{
case ".xom":
LoadPC(filename);
return SaveType.PC;
case ".psu":
LoadPS2(filename);
return SaveType.PS2;
case ".zip":
return LoadXBOX(filename);
}
return SaveType.UNKNOWN;
}
public static void Load(string filename, SaveType saveType)
{
switch (saveType)
{
case SaveType.PC:
LoadPC(filename);
break;
case SaveType.PS2:
LoadPS2(filename);
break;
case SaveType.XBOX_US:
case SaveType.XBOX_EU:
saveType = LoadXBOX(filename);
break;
case SaveType.UNKNOWN:
default:
saveType = LoadGuessType(filename);
break;
}
if(saveType != SaveType.UNKNOWN)
{
DataManager.LoadedSavePath = filename;
DataManager.LoadedSaveType = saveType;
}
else {
throw new Exception("unable to determine save type.");
}
}
public static void Save(string filename, SaveType saveType)
{
switch (saveType)
{
case SaveType.PC:
DataManager.SavePC(filename);
break;
case SaveType.PS2:
DataManager.SavePS2(filename);
break;
case SaveType.XBOX_US:
DataManager.SaveXBOX(filename, XboxRegion.USA);
break;
case SaveType.XBOX_EU:
DataManager.SaveXBOX(filename, XboxRegion.EU);
break;
}
DataManager.LoadedSavePath = filename;
DataManager.LoadedSaveType = saveType;
}
public static List<TabEntry> SaveComponents = new List<TabEntry>();
}
}