Novetus_src/Novetus/NovetusLauncher/Forms/SDK/AssetSDK.cs

284 lines
9.6 KiB
C#

#region Usings
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Windows.Forms;
#endregion
public partial class AssetSDK : Form
{
#region Private Variables
//localizer
private RobloxFileType currentType;
private string path;
private string name;
private string meshname;
//downloader
private string url = "https://assetdelivery.roblox.com/v1/asset/?id=";
private bool isWebSite = false;
private bool batchMode = false;
//obj2mesh
private OpenFileDialog MeshConverter_OpenOBJDialog;
#endregion
#region Constructor
public AssetSDK()
{
InitializeComponent();
//meshconverter
MeshConverter_OpenOBJDialog = new OpenFileDialog()
{
FileName = "Select a .OBJ file",
Filter = "Wavefront .obj file (*.obj)|*.obj",
Title = "Open model .obj"
};
}
#endregion
#region Form Events
#region Load/Close Events
private void AssetSDK_Load(object sender, EventArgs e)
{
//asset downloader
AssetDownloader_URLSelection.SelectedItem = "https://assetdelivery.roblox.com/";
isWebSite = false;
AssetDownloader_LoadHelpMessage.Checked = GlobalVars.UserConfiguration.DisabledItemMakerHelp;
//asset localizer
AssetLocalization_SaveBackups.Checked = GlobalVars.UserConfiguration.AssetLocalizerSaveBackups;
AssetLocalization_AssetTypeBox.SelectedItem = "RBXL";
AssetLocalization_UsesHatMeshBox.SelectedItem = "None";
if (Directory.Exists(GlobalPaths.hatdirFonts))
{
DirectoryInfo dinfo = new DirectoryInfo(GlobalPaths.hatdirFonts);
FileInfo[] Files = dinfo.GetFiles("*.mesh");
foreach (FileInfo file in Files)
{
if (file.Name.Equals(String.Empty))
{
continue;
}
AssetLocalization_UsesHatMeshBox.Items.Add(file.Name);
}
}
GlobalFuncs.CreateAssetCacheDirectories();
}
void AssetSDK_Close(object sender, CancelEventArgs e)
{
//asset localizer
AssetLocalization_BackgroundWorker.CancelAsync();
}
#endregion
#region Asset Downloader
private void AssetDownloader_URLSelection_SelectedIndexChanged(object sender, EventArgs e)
{
switch (AssetDownloader_URLSelection.SelectedIndex)
{
case 1:
url = "https://www.roblox.com/catalog/";
isWebSite = true;
break;
case 2:
url = "https://www.roblox.com/library/";
isWebSite = true;
break;
default:
//use defaults
url = "https://assetdelivery.roblox.com/v1/asset/?id=";
isWebSite = false;
break;
}
}
private void AssetDownloader_AssetDownloaderButton_Click(object sender, EventArgs e)
{
if (batchMode == false)
{
SDKFuncs.StartItemDownload(
AssetDownloader_AssetNameBox.Text,
url,
AssetDownloader_AssetIDBox.Text,
Convert.ToInt32(AssetDownloader_AssetVersionSelector.Value),
isWebSite);
}
else
{
SaveFileDialog saveFileDialog1 = new SaveFileDialog
{
FileName = ".",
//"Compressed zip files (*.zip)|*.zip|All files (*.*)|*.*"
Filter = "Roblox Model(*.rbxm) | *.rbxm | Roblox Mesh(*.mesh) | *.mesh | PNG Image(*.png) | *.png | WAV Sound(*.wav) | *.wav",
DefaultExt = ".rbxm",
Title = "Save files downloaded via batch"
};
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
string basepath = Path.GetDirectoryName(saveFileDialog1.FileName);
string extension = Path.GetExtension(saveFileDialog1.FileName);
AssetDownloaderBatch_Status.Visible = true;
string[] lines = AssetDownloaderBatch_BatchIDBox.Lines;
foreach (var line in lines)
{
string[] linesplit = line.Split('|');
SDKFuncs.StartItemBatchDownload(
linesplit[0] + extension,
url,
linesplit[1],
Convert.ToInt32(AssetDownloader_AssetVersionSelector.Value),
isWebSite, basepath);
}
AssetDownloaderBatch_Status.Visible = false;
MessageBox.Show("Batch download complete! " + lines.Count() + " items downloaded!", "Novetus Item SDK", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
private void AssetDownloader_LoadHelpMessage_CheckedChanged(object sender, EventArgs e)
{
GlobalVars.UserConfiguration.DisabledItemMakerHelp = AssetDownloader_LoadHelpMessage.Checked;
}
private void AssetDownloader_BatchMode_CheckedChanged(object sender, EventArgs e)
{
batchMode = AssetDownloader_BatchMode.Checked;
if (batchMode)
{
AssetDownloaderBatch_BatchIDBox.Enabled = true;
AssetDownloaderBatch_Note.Visible = true;
AssetDownloader_AssetIDBox.Enabled = false;
AssetDownloader_AssetNameBox.Enabled = false;
}
else
{
AssetDownloaderBatch_BatchIDBox.Enabled = false;
AssetDownloaderBatch_Note.Visible = false;
AssetDownloader_AssetIDBox.Enabled = true;
AssetDownloader_AssetNameBox.Enabled = true;
}
}
#endregion
#region Asset Localizer
private void AssetLocalization_AssetTypeBox_SelectedIndexChanged(object sender, EventArgs e)
{
currentType = SDKFuncs.SelectROBLOXFileType(AssetLocalization_AssetTypeBox.SelectedIndex);
}
private void AssetLocalization_ItemNameBox_TextChanged(object sender, EventArgs e)
{
name = AssetLocalization_ItemNameBox.Text;
}
private void AssetLocalization_UsesHatMeshBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (AssetLocalization_UsesHatMeshBox.SelectedItem.ToString() == "None")
{
meshname = "";
}
else
{
meshname = AssetLocalization_UsesHatMeshBox.SelectedItem.ToString();
}
}
private void AssetLocalization_SaveBackups_CheckedChanged(object sender, EventArgs e)
{
GlobalVars.UserConfiguration.AssetLocalizerSaveBackups = AssetLocalization_SaveBackups.Checked;
}
private void AssetLocalization_LocalizeButton_Click(object sender, EventArgs e)
{
OpenFileDialog robloxFileDialog = SDKFuncs.LoadROBLOXFileDialog(currentType);
if (robloxFileDialog.ShowDialog() == DialogResult.OK)
{
path = robloxFileDialog.FileName;
AssetLocalization_BackgroundWorker.RunWorkerAsync();
}
}
// This event handler is where the time-consuming work is done.
private void AssetLocalization_BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
SDKFuncs.LocalizeAsset(currentType, worker, path, name, meshname);
}
// This event handler updates the progress.
private void AssetLocalization_BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
AssetLocalization_StatusText.Text = SDKFuncs.GetProgressString(currentType, e.ProgressPercentage);
AssetLocalization_StatusBar.Value = e.ProgressPercentage;
}
// This event handler deals with the results of the background operation.
private void AssetLocalization_BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
switch (e)
{
case RunWorkerCompletedEventArgs can when can.Cancelled:
AssetLocalization_StatusText.Text = "Canceled!";
break;
case RunWorkerCompletedEventArgs err when err.Error != null:
AssetLocalization_StatusText.Text = "Error: " + e.Error.Message;
break;
default:
AssetLocalization_StatusText.Text = "Done!";
break;
}
}
#endregion
#region Mesh Converter
private void MeshConverter_ConvertButton_Click(object sender, EventArgs e)
{
if (MeshConverter_OpenOBJDialog.ShowDialog() == DialogResult.OK)
{
MeshConverter_ProcessOBJ(GlobalPaths.ConfigDirData + "\\RBXMeshConverter.exe", MeshConverter_OpenOBJDialog.FileName);
}
}
private void MeshConverter_ProcessOBJ(string EXEName, string FileName)
{
MeshConverter_StatusText.Text = "Loading utility...";
Process proc = new Process();
proc.StartInfo.FileName = EXEName;
proc.StartInfo.Arguments = "-f " + FileName + " -v " + MeshConverter_MeshVersionSelector.Value;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.UseShellExecute = false;
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(OBJ2MeshV1Exited);
proc.Start();
MeshConverter_StatusText.Text = "Converting OBJ to ROBLOX Mesh v" + MeshConverter_MeshVersionSelector.Value + "...";
}
void OBJ2MeshV1Exited(object sender, EventArgs e)
{
MeshConverter_StatusText.Text = "Ready";
string properName = Path.GetFileName(MeshConverter_OpenOBJDialog.FileName) + ".mesh";
MessageBox.Show("File " + properName + " created!");
}
#endregion
#endregion
}