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

221 lines
7.2 KiB
C#

#region Usings
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
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;
//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
break;
}
}
private void AssetDownloader_AssetDownloaderButton_Click(object sender, EventArgs e)
{
SDKFuncs.StartItemDownload(
AssetDownloader_AssetNameBox.Text,
url,
AssetDownloader_AssetIDBox.Text,
Convert.ToInt32(AssetDownloader_AssetVersionSelector.Value),
isWebSite);
}
private void AssetDownloader_LoadHelpMessage_CheckedChanged(object sender, EventArgs e)
{
GlobalVars.UserConfiguration.DisabledItemMakerHelp = AssetDownloader_LoadHelpMessage.Checked;
}
#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
}