Core - Rename 'UnknownDLCPackage' to 'RawAssetDLCPackage'

This commit is contained in:
miku-666
2025-12-06 06:01:41 +01:00
parent dcc72a8397
commit dd57d715f9
9 changed files with 114 additions and 165 deletions

View File

@@ -51,7 +51,7 @@ using PckStudio.Core.DLC;
namespace PckStudio.Controls
{
internal partial class PckAssetBrowserEditor : EditorControl<PackInfo>
internal partial class PckAssetBrowserEditor : EditorControl<RawAssetDLCPackage>
{
private string _location = string.Empty;
@@ -85,21 +85,21 @@ namespace PckStudio.Controls
private readonly IDictionary<PckAssetType, Action<PckAsset>> _pckAssetTypeHandler;
//private readonly IDictionary<PckAssetType, ViewPanel> _viewPanels;
public PckAssetBrowserEditor(PackInfo packInfo, ISaveContext<PackInfo> saveContext)
: base(packInfo, saveContext)
public PckAssetBrowserEditor(RawAssetDLCPackage rawAssetDLCPackage, ISaveContext<RawAssetDLCPackage> saveContext)
: base(rawAssetDLCPackage, saveContext)
{
InitializeComponent();
_onModifiedChangeDelegate = OnModify;
_originalEndianness = packInfo.ByteOrder;
_currentEndianness = packInfo.ByteOrder;
_originalEndianness = rawAssetDLCPackage.ByteOrder;
_currentEndianness = rawAssetDLCPackage.ByteOrder;
//! InitializeViewPanels
{
_default = new DefaultPanel();
_models = new ModelsPanel(TryGet<string, Image>.FromDelegate((string path, out Image img) =>
{
bool found = EditorValue.File.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset asset) ||
EditorValue.File.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out asset);
bool found = EditorValue.PckFile.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset asset) ||
EditorValue.PckFile.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out asset);
img = found ? asset.GetTexture() : default;
return found;
}));
@@ -221,27 +221,24 @@ namespace PckStudio.Controls
if (asset.Type != PckAssetType.SkinDataFile && asset.Type != PckAssetType.TexturePackInfoFile || asset.Size <= 0 || !Settings.Default.LoadSubPcks)
return;
ISaveContext<PackInfo> saveContext = new DelegatedSaveContext<PackInfo>(false, (packInfo) =>
ISaveContext<RawAssetDLCPackage> saveContext = new DelegatedSaveContext<RawAssetDLCPackage>(false, (rawAssetDLCPackage) =>
{
if (packInfo.IsValid)
{
asset.SetData(new PckFileWriter(packInfo.File, _currentEndianness));
_wasModified = true;
}
asset.SetData(new PckFileWriter(rawAssetDLCPackage.PckFile, _currentEndianness));
_wasModified = true;
});
string caption = Path.GetFileName(asset.Filename);
string identifier = _location + Path.GetFileName(asset.Filename);
PckFile pckFile = asset.GetData(new PckFileReader(_originalEndianness));
PackInfo packInfo = PackInfo.Create(pckFile, _originalEndianness, false);
RawAssetDLCPackage rawAssetDLCPackage = new RawAssetDLCPackage(asset.Filename, pckFile, _originalEndianness);
// TODO: may change to use a new tab page that will be closed when the main pck is closed
//Program.MainInstance.OpenNewPckTab(caption, identifier, packInfo, saveContext);
//Program.MainInstance.OpenNewPckTab(caption, identifier, RawAssetDLCPackage, saveContext);
}
private void HandleTextureFile(PckAsset asset)
{
_ = asset.IsMipmappedFile() && EditorValue.File.TryGetAsset(asset.GetNormalPath(), PckAssetType.TextureFile, out asset);
_ = asset.IsMipmappedFile() && EditorValue.PckFile.TryGetAsset(asset.GetNormalPath(), PckAssetType.TextureFile, out asset);
if (asset.Size <= 0)
{
@@ -268,7 +265,7 @@ namespace PckStudio.Controls
ITryGet<string, Image> tryGet = TryGet<string, Image>.FromDelegate((string path, out Image img) =>
{
img = null;
if (EditorValue.File.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset armorAsset))
if (EditorValue.PckFile.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset armorAsset))
{
img = armorAsset.GetTexture();
Debug.WriteLine($"Got texture for: {path}");
@@ -309,7 +306,7 @@ namespace PckStudio.Controls
bool hasCustomModel = false;
bool hasDefaultModel = TryGetDefaultEntityModel(modelName, out Model model);
if (EditorValue.File.TryGetAsset("models.bin", PckAssetType.ModelsFile, out PckAsset modelsAsset))
if (EditorValue.PckFile.TryGetAsset("models.bin", PckAssetType.ModelsFile, out PckAsset modelsAsset))
{
ModelContainer models = modelsAsset.GetData(new ModelFileReader());
hasCustomModel = models.ContainsModel(modelName);
@@ -354,13 +351,13 @@ namespace PckStudio.Controls
case ResourceCategory.Atlas:
Atlas atlas = asset.GetDeserializedData(new AtlasDeserializer(resourceLocation));
ColorContainer colorContainer = default;
if (EditorValue.File.TryGetAsset("colours.col", PckAssetType.ColourTableFile, out PckAsset colAsset))
if (EditorValue.PckFile.TryGetAsset("colours.col", PckAssetType.ColourTableFile, out PckAsset colAsset))
colorContainer = colAsset.GetData(new COLFileReader());
ITryGet<string, Animation> tryGetAnimation = TryGet<string, Animation>.FromDelegate((string key, out Animation animation) =>
{
bool found = EditorValue.File.TryGetAsset(key + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.File.TryGetAsset(key + ".tga", PckAssetType.TextureFile, out foundAsset);
bool found = EditorValue.PckFile.TryGetAsset(key + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.PckFile.TryGetAsset(key + ".tga", PckAssetType.TextureFile, out foundAsset);
if (found)
{
animation = foundAsset.GetDeserializedData(AnimationDeserializer.DefaultDeserializer);
@@ -373,8 +370,8 @@ namespace PckStudio.Controls
ITryGet<string, ISaveContext<Animation>> tryGetAnimationSaveContext = TryGet<string, ISaveContext<Animation>>
.FromDelegate((string key, out ISaveContext<Animation> animationSaveContext) =>
{
bool found = EditorValue.File.TryGetAsset(key + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.File.TryGetAsset(key + ".tga", PckAssetType.TextureFile, out foundAsset);
bool found = EditorValue.PckFile.TryGetAsset(key + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.PckFile.TryGetAsset(key + ".tga", PckAssetType.TextureFile, out foundAsset);
if (found)
{
@@ -391,7 +388,7 @@ namespace PckStudio.Controls
Debug.WriteLine("New animation has 0 frames. Aborting saving.");
return;
}
PckAsset newAnimationAsset = EditorValue.File.CreateNewAsset(key + ".png", PckAssetType.TextureFile);
PckAsset newAnimationAsset = EditorValue.PckFile.CreateNewAsset(key + ".png", PckAssetType.TextureFile);
newAnimationAsset.SetSerializedData(animation, AnimationSerializer.DefaultSerializer);
BuildMainTreeView();
});
@@ -503,7 +500,7 @@ namespace PckStudio.Controls
if (asset.HasProperty("CAPEPATH"))
{
string capeAssetPath = asset.GetProperty("CAPEPATH");
if (EditorValue.File.TryGetAsset(capeAssetPath, PckAssetType.CapeFile, out PckAsset capeAsset))
if (EditorValue.PckFile.TryGetAsset(capeAssetPath, PckAssetType.CapeFile, out PckAsset capeAsset))
{
skin.CapeId = capeAsset.GetId();
cape = capeAsset.GetTexture();
@@ -517,7 +514,7 @@ namespace PckStudio.Controls
asset.SetSkin(customSkin, locFile);
});
using CustomSkinEditor skinEditor = new CustomSkinEditor(skin, cape, saveContext, EditorValue.File.HasVerionString);
using CustomSkinEditor skinEditor = new CustomSkinEditor(skin, cape, saveContext, EditorValue.PckFile.HasVerionString);
if (skinEditor.ShowDialog() == DialogResult.OK)
{
_wasModified = true;
@@ -536,22 +533,22 @@ namespace PckStudio.Controls
TryGetDelegate<string, Image> tryGetTexture = (string path, out Image img) =>
{
bool found = EditorValue.File.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset asset) ||
EditorValue.File.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out asset);
bool found = EditorValue.PckFile.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset asset) ||
EditorValue.PckFile.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out asset);
img = found ? asset.GetTexture() : default;
return found;
};
TrySetDelegate<string, Image> trySetTexture = (string path, Image img) =>
{
bool found = EditorValue.File.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.File.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out foundAsset);
PckAsset asset = foundAsset ?? EditorValue.File.CreateNewAsset(path + ".png", PckAssetType.TextureFile);
bool found = EditorValue.PckFile.TryGetAsset(path + ".png", PckAssetType.TextureFile, out PckAsset foundAsset) ||
EditorValue.PckFile.TryGetAsset(path + ".tga", PckAssetType.TextureFile, out foundAsset);
PckAsset asset = foundAsset ?? EditorValue.PckFile.CreateNewAsset(path + ".png", PckAssetType.TextureFile);
asset.SetTexture(img);
return true;
};
bool hasMaterialAsset = EditorValue.File.TryGetAsset("entityMaterials.bin", PckAssetType.MaterialFile, out PckAsset entityMaterialAsset);
bool hasMaterialAsset = EditorValue.PckFile.TryGetAsset("entityMaterials.bin", PckAssetType.MaterialFile, out PckAsset entityMaterialAsset);
IReadOnlyDictionary<string, MaterialContainer.Material> entityMaterials =
hasMaterialAsset
? entityMaterialAsset?.GetData(new MaterialFileReader()).ToDictionary(mat => mat.Name)
@@ -595,7 +592,7 @@ namespace PckStudio.Controls
private void CheckForPasswordAndRemove()
{
if (EditorValue.File.TryGetAsset("0", PckAssetType.InfoFile, out PckAsset asset))
if (EditorValue.PckFile.TryGetAsset("0", PckAssetType.InfoFile, out PckAsset asset))
{
asset.RemoveProperties("LOCK");
}
@@ -619,7 +616,7 @@ namespace PckStudio.Controls
string selectedNodeText = treeViewMain.SelectedNode is TreeNode node ? node.FullPath : string.Empty;
_currentViewPanel.Reset();
treeViewMain.Nodes.Clear();
BuildPckTreeView(treeViewMain.Nodes, EditorValue.File);
BuildPckTreeView(treeViewMain.Nodes, EditorValue.PckFile);
treeViewMain.Sort();
TreeNode[] selectedNodes = treeViewMain.FindPath(selectedNodeText);
@@ -668,8 +665,8 @@ namespace PckStudio.Controls
private bool TryGetLocFile(out LOCFile locFile)
{
if (!EditorValue.File.TryGetAsset("localisation.loc", PckAssetType.LocalisationFile, out PckAsset locAsset) &&
!EditorValue.File.TryGetAsset("languages.loc", PckAssetType.LocalisationFile, out locAsset))
if (!EditorValue.PckFile.TryGetAsset("localisation.loc", PckAssetType.LocalisationFile, out PckAsset locAsset) &&
!EditorValue.PckFile.TryGetAsset("languages.loc", PckAssetType.LocalisationFile, out locAsset))
{
locFile = null;
return false;
@@ -690,8 +687,8 @@ namespace PckStudio.Controls
private bool TrySetLocFile(in LOCFile locFile)
{
if (!EditorValue.File.TryGetAsset("localisation.loc", PckAssetType.LocalisationFile, out PckAsset locAsset) &&
!EditorValue.File.TryGetAsset("languages.loc", PckAssetType.LocalisationFile, out locAsset))
if (!EditorValue.PckFile.TryGetAsset("localisation.loc", PckAssetType.LocalisationFile, out PckAsset locAsset) &&
!EditorValue.PckFile.TryGetAsset("languages.loc", PckAssetType.LocalisationFile, out locAsset))
{
return false;
}
@@ -751,12 +748,12 @@ namespace PckStudio.Controls
using AddFilePrompt diag = new AddFilePrompt("res/" + Path.GetFileName(ofd.FileName));
if (diag.ShowDialog(this) == DialogResult.OK)
{
if (EditorValue.File.Contains(diag.Filepath, diag.Filetype))
if (EditorValue.PckFile.Contains(diag.Filepath, diag.Filetype))
{
MessageBox.Show(this, $"'{diag.Filepath}' of type {diag.Filetype} already exists.", "Import failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
PckAsset asset = EditorValue.File.CreateNewAsset(diag.Filepath, diag.Filetype, () => File.ReadAllBytes(ofd.FileName));
PckAsset asset = EditorValue.PckFile.CreateNewAsset(diag.Filepath, diag.Filetype, () => File.ReadAllBytes(ofd.FileName));
BuildMainTreeView();
_wasModified = true;
@@ -775,12 +772,12 @@ namespace PckStudio.Controls
renamePrompt.LabelText = "Path";
if (renamePrompt.ShowDialog(this) == DialogResult.OK && !string.IsNullOrEmpty(renamePrompt.NewText))
{
if (EditorValue.File.Contains(renamePrompt.NewText, PckAssetType.TextureFile))
if (EditorValue.PckFile.Contains(renamePrompt.NewText, PckAssetType.TextureFile))
{
MessageBox.Show(this, $"'{renamePrompt.NewText}' already exists.", "Import failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
PckAsset asset = EditorValue.File.CreateNewAsset(renamePrompt.NewText, PckAssetType.TextureFile, () => File.ReadAllBytes(fileDialog.FileName));
PckAsset asset = EditorValue.PckFile.CreateNewAsset(renamePrompt.NewText, PckAssetType.TextureFile, () => File.ReadAllBytes(fileDialog.FileName));
BuildMainTreeView();
_wasModified = true;
}
@@ -799,7 +796,7 @@ namespace PckStudio.Controls
{
string skinNameImport = Path.GetFileName(contents.FileName);
byte[] data = File.ReadAllBytes(contents.FileName);
PckAsset mfNew = EditorValue.File.CreateNewAsset(skinNameImport, PckAssetType.SkinFile);
PckAsset mfNew = EditorValue.PckFile.CreateNewAsset(skinNameImport, PckAssetType.SkinFile);
mfNew.SetData(data);
string propertyFile = Path.GetFileNameWithoutExtension(contents.FileName) + ".txt";
if (File.Exists(propertyFile))
@@ -941,7 +938,7 @@ namespace PckStudio.Controls
if (e.Button != MouseButtons.Left || e.Item is not TreeNode node)
return;
if ((node.TryGetTagData(out PckAsset asset) && EditorValue.File.Contains(asset.Filename, asset.Type)) || node.Parent is TreeNode)
if ((node.TryGetTagData(out PckAsset asset) && EditorValue.PckFile.Contains(asset.Filename, asset.Type)) || node.Parent is TreeNode)
{
// TODO: add (mouse) scrolling while dragging item(s)
treeViewMain.DoDragDrop(node, DragDropEffects.Scroll | DragDropEffects.Move);
@@ -1117,14 +1114,14 @@ namespace PckStudio.Controls
}
}
if (EditorValue.File.Contains(filepath, assetType))
if (EditorValue.PckFile.Contains(filepath, assetType))
{
if (askForAssetType)
MessageBox.Show(this, $"'{assetPath}' of type {assetType} already exists.\nSkiping file.", "File already exists", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
Debug.WriteLine($"'{assetPath}' of type {assetType} already exists.\nSkiping file.");
continue;
}
PckAsset importedAsset = EditorValue.File.CreateNewAsset(assetPath, assetType, () => File.ReadAllBytes(filepath));
PckAsset importedAsset = EditorValue.PckFile.CreateNewAsset(assetPath, assetType, () => File.ReadAllBytes(filepath));
string propertyFile = filepath + ".txt";
if (File.Exists(propertyFile))
{
@@ -1165,12 +1162,12 @@ namespace PckStudio.Controls
if (addFile.ShowDialog(this) != DialogResult.OK)
continue;
if (EditorValue.File.Contains(addFile.Filepath, addFile.Filetype))
if (EditorValue.PckFile.Contains(addFile.Filepath, addFile.Filetype))
{
MessageBox.Show(this, $"'{addFile.Filepath}' of type {addFile.Filetype} already exists.", "Import failed", MessageBoxButtons.OK, MessageBoxIcon.Warning);
continue;
}
EditorValue.File.CreateNewAsset(addFile.Filepath, addFile.Filetype, () => File.ReadAllBytes(file));
EditorValue.PckFile.CreateNewAsset(addFile.Filepath, addFile.Filetype, () => File.ReadAllBytes(file));
addedCount++;
BuildMainTreeView();
@@ -1186,19 +1183,19 @@ namespace PckStudio.Controls
{
TryGetLocFile(out LOCFile locFile);
PckAsset skinAsset = addNewSkinDialog.NewSkin.CreateFile(locFile);
EditorValue.File.AddAsset(skinAsset);
EditorValue.PckFile.AddAsset(skinAsset);
bool hasSkinsFolder = treeViewMain.Nodes.ContainsKey("Skins");
if (hasSkinsFolder)
skinAsset.Filename = skinAsset.Filename.Insert(0, "Skins/"); // Then Skins folder
EditorValue.File.AddAsset(skinAsset);
EditorValue.PckFile.AddAsset(skinAsset);
if (addNewSkinDialog.HasCape)
{
PckAsset capeFile = addNewSkinDialog.NewSkin.CreateCapeFile(addNewSkinDialog.CapeTexture);
if (hasSkinsFolder)
capeFile.Filename = capeFile.Filename.Insert(0, "Skins/"); // Then Skins folder
EditorValue.File.AddAsset(capeFile);
EditorValue.PckFile.AddAsset(capeFile);
}
TrySetLocFile(locFile);
@@ -1215,7 +1212,7 @@ namespace PckStudio.Controls
string animationFilepath = $"{ResourceLocations.GetPathFromCategory(diag.Category)}/{diag.SelectedTile.InternalName}.png";
if (EditorValue.File.Contains(animationFilepath, PckAssetType.TextureFile))
if (EditorValue.PckFile.Contains(animationFilepath, PckAssetType.TextureFile))
{
MessageBox.Show(this, $"{diag.SelectedTile.DisplayName} is already present.", "File already present");
return;
@@ -1231,7 +1228,7 @@ namespace PckStudio.Controls
if (animationEditor.ShowDialog() == DialogResult.OK && newAnimation is not null)
{
_wasModified = true;
PckAsset asset = EditorValue.File.CreateNewAsset(animationFilepath, PckAssetType.TextureFile);
PckAsset asset = EditorValue.PckFile.CreateNewAsset(animationFilepath, PckAssetType.TextureFile);
asset.SetSerializedData(newAnimation, AnimationSerializer.DefaultSerializer);
BuildMainTreeView();
_currentViewPanel.LoadAsset(asset, () => _wasModified = true);
@@ -1240,7 +1237,7 @@ namespace PckStudio.Controls
private void audiopckToolStripMenuItem_Click(object sender, EventArgs e)
{
if (EditorValue.File.Contains(PckAssetType.AudioFile))
if (EditorValue.PckFile.Contains(PckAssetType.AudioFile))
{
// the chance of this happening is really really slim but just in case
MessageBox.Show(this, "There is already an audio file in this PCK!", "Can't create audio.pck");
@@ -1264,7 +1261,7 @@ namespace PckStudio.Controls
AudioEditor diag = new AudioEditor(newAudioFile, saveContext);
if (diag.ShowDialog(this) == DialogResult.OK)
{
EditorValue.File.AddAsset(newAudioAsset);
EditorValue.PckFile.AddAsset(newAudioAsset);
}
diag.Dispose();
BuildMainTreeView();
@@ -1272,51 +1269,51 @@ namespace PckStudio.Controls
private void colourscolToolStripMenuItem_Click(object sender, EventArgs e)
{
if (EditorValue.File.TryGetAsset("colours.col", PckAssetType.ColourTableFile, out _))
if (EditorValue.PckFile.TryGetAsset("colours.col", PckAssetType.ColourTableFile, out _))
{
MessageBox.Show(this, "A color table file already exists in this PCK and a new one cannot be created.", "Operation aborted");
return;
}
PckAsset newColorAsset = EditorValue.File.CreateNewAsset("colours.col", PckAssetType.ColourTableFile);
PckAsset newColorAsset = EditorValue.PckFile.CreateNewAsset("colours.col", PckAssetType.ColourTableFile);
newColorAsset.SetData(Resources.tu69colours);
BuildMainTreeView();
}
private void CreateSkinsPCKToolStripMenuItem1_Click(object sender, EventArgs e)
{
if (EditorValue.File.TryGetAsset("Skins.pck", PckAssetType.SkinDataFile, out _))
if (EditorValue.PckFile.TryGetAsset("Skins.pck", PckAssetType.SkinDataFile, out _))
{
MessageBox.Show(this, "A Skins.pck file already exists in this PCK and a new one cannot be created.", "Operation aborted");
return;
}
EditorValue.File.CreateNewAsset("Skins.pck", PckAssetType.SkinDataFile, new PckFileWriter(new PckFile(3, true), _currentEndianness));
EditorValue.PckFile.CreateNewAsset("Skins.pck", PckAssetType.SkinDataFile, new PckFileWriter(new PckFile(3, true), _currentEndianness));
BuildMainTreeView();
}
private void behavioursbinToolStripMenuItem_Click(object sender, EventArgs e)
{
if (EditorValue.File.TryGetAsset("behaviours.bin", PckAssetType.BehavioursFile, out _))
if (EditorValue.PckFile.TryGetAsset("behaviours.bin", PckAssetType.BehavioursFile, out _))
{
MessageBox.Show(this, "A behaviours file already exists in this PCK and a new one cannot be created.", "Operation aborted");
return;
}
EditorValue.File.CreateNewAsset("behaviours.bin", PckAssetType.BehavioursFile, new BehavioursWriter(new BehaviourFile()));
EditorValue.PckFile.CreateNewAsset("behaviours.bin", PckAssetType.BehavioursFile, new BehavioursWriter(new BehaviourFile()));
BuildMainTreeView();
}
private void entityMaterialsbinToolStripMenuItem_Click(object sender, EventArgs e)
{
if (EditorValue.File.TryGetAsset("entityMaterials.bin", PckAssetType.MaterialFile, out _))
if (EditorValue.PckFile.TryGetAsset("entityMaterials.bin", PckAssetType.MaterialFile, out _))
{
MessageBox.Show(this, "A behaviours file already exists in this PCK and a new one cannot be created.", "Operation aborted");
return;
}
var materialContainer = new MaterialContainer();
materialContainer.InitializeDefault();
EditorValue.File.CreateNewAsset("entityMaterials.bin", PckAssetType.MaterialFile, new MaterialFileWriter(materialContainer));
EditorValue.PckFile.CreateNewAsset("entityMaterials.bin", PckAssetType.MaterialFile, new MaterialFileWriter(materialContainer));
BuildMainTreeView();
}
@@ -1333,7 +1330,7 @@ namespace PckStudio.Controls
return;
}
// creates variable to indicate wether current pck skin structure is mashup or regular skin
bool hasSkinsPck = EditorValue.File.HasAsset("Skins.pck", PckAssetType.SkinDataFile);
bool hasSkinsPck = EditorValue.PckFile.HasAsset("Skins.pck", PckAssetType.SkinDataFile);
foreach (var fullfilename in Directory.GetFiles(contents.ResultPath, "*.png"))
{
@@ -1380,7 +1377,7 @@ namespace PckStudio.Controls
}
if (hasSkinsPck)
{
PckAsset skinsFileAsset = EditorValue.File.GetAsset("Skins.pck", PckAssetType.SkinDataFile);
PckAsset skinsFileAsset = EditorValue.PckFile.GetAsset("Skins.pck", PckAssetType.SkinDataFile);
using (var ms = new MemoryStream(skinsFileAsset.Data))
{
//var reader = new PckFileReader(LittleEndianCheckBox.Checked ? OMI.Endianness.LittleEndian : OMI.Endianness.BigEndian);
@@ -1393,7 +1390,7 @@ namespace PckStudio.Controls
}
continue;
}
EditorValue.File.AddAsset(newFile);
EditorValue.PckFile.AddAsset(newFile);
}
BuildMainTreeView();
_wasModified = true;
@@ -1442,8 +1439,8 @@ namespace PckStudio.Controls
{
string mippedPath = $"{textureDirectory}/{textureName}MipMapLevel{i}{textureExtension}";
Debug.WriteLine(mippedPath);
if (EditorValue.File.HasAsset(mippedPath, PckAssetType.TextureFile))
EditorValue.File.RemoveAsset(EditorValue.File.GetAsset(mippedPath, PckAssetType.TextureFile));
if (EditorValue.PckFile.HasAsset(mippedPath, PckAssetType.TextureFile))
EditorValue.PckFile.RemoveAsset(EditorValue.PckFile.GetAsset(mippedPath, PckAssetType.TextureFile));
PckAsset mipMappedAsset = new PckAsset(mippedPath, PckAssetType.TextureFile);
Image originalTexture = asset.GetTexture();
@@ -1451,7 +1448,7 @@ namespace PckStudio.Controls
mipMappedAsset.SetTexture(mippedTexture);
EditorValue.File.InsertAsset(EditorValue.File.IndexOfAsset(asset) + i - 1, mipMappedAsset);
EditorValue.PckFile.InsertAsset(EditorValue.PckFile.IndexOfAsset(asset) + i - 1, mipMappedAsset);
}
BuildMainTreeView();
}
@@ -1532,7 +1529,7 @@ namespace PckStudio.Controls
string selectedFolder = node.FullPath;
foreach (PckAsset asset in EditorValue.File.GetAssets().Where(asset => asset.Filename.StartsWith(selectedFolder)))
foreach (PckAsset asset in EditorValue.PckFile.GetAssets().Where(asset => asset.Filename.StartsWith(selectedFolder)))
{
extractFolderFile(outPath, asset);
}
@@ -1604,7 +1601,7 @@ namespace PckStudio.Controls
TreeNodeCollection nodeCollection = node.Parent?.Nodes ?? treeViewMain.Nodes;
nodeCollection.Insert(node.Index + 1, newNode);
EditorValue.File.InsertAsset(node.Index + 1, newFile);
EditorValue.PckFile.InsertAsset(node.Index + 1, newFile);
BuildMainTreeView();
_wasModified = true;
}
@@ -1626,7 +1623,7 @@ namespace PckStudio.Controls
{
if (isFile)
{
if (EditorValue.File.Contains(diag.NewText, asset.Type))
if (EditorValue.PckFile.Contains(diag.NewText, asset.Type))
{
MessageBox.Show(this, $"{diag.NewText} already exists", "File already exists");
return;
@@ -1729,7 +1726,7 @@ namespace PckStudio.Controls
if (node.TryGetTagData(out PckAsset asset))
{
if (!BeforeFileRemove(asset) && EditorValue.File.RemoveAsset(asset))
if (!BeforeFileRemove(asset) && EditorValue.PckFile.RemoveAsset(asset))
{
_currentViewPanel.Reset();
node.Remove();
@@ -1740,7 +1737,7 @@ namespace PckStudio.Controls
MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
{
string pckFolderDir = node.FullPath;
EditorValue.File.RemoveAll(file => file.Filename.StartsWith(pckFolderDir) && !BeforeFileRemove(file));
EditorValue.PckFile.RemoveAll(file => file.Filename.StartsWith(pckFolderDir) && !BeforeFileRemove(file));
node.Remove();
_wasModified = true;
}

View File

@@ -65,11 +65,11 @@ namespace PckStudio
if (dlcPackage is null)
return;
SaveToRecentFiles(filepath);
if (dlcPackage.GetDLCPackageType() == DLCPackageType.Unknown)
if (dlcPackage.GetDLCPackageType() == DLCPackageType.RawAssets)
AddEditorPage(dlcPackage);
}
internal void OpenNewPckTab(string caption, string identifier, PackInfo packInfo, ISaveContext<PackInfo> saveContext)
internal void OpenNewPckTab(string caption, string identifier, RawAssetDLCPackage packInfo, ISaveContext<RawAssetDLCPackage> saveContext)
{
if (openTabPages.ContainsKey(identifier))
{
@@ -80,7 +80,7 @@ namespace PckStudio
AddPage(caption, identifier, editor);
}
private void AddEditorPage(string caption, string identifier, PackInfo packInfo, ISaveContext<PackInfo> saveContext = null)
private void AddEditorPage(string caption, string identifier, RawAssetDLCPackage packInfo, ISaveContext<RawAssetDLCPackage> saveContext = null)
{
saveContext ??= GetDefaultSaveContext("./new.pck", "PCK (Minecraft Console Package)");
var editor = new PckAssetBrowserEditor(packInfo, saveContext);
@@ -89,15 +89,14 @@ namespace PckStudio
private void AddEditorPage(IDLCPackage dlcPackage)
{
PackInfo packInfo = PackInfo.Create((dlcPackage as UnknownDLCPackage).PckFile, default, false);
ISaveContext<PackInfo> saveContext = GetDefaultSaveContext("", "PCK (Minecraft Console Package)");
var editor = new PckAssetBrowserEditor(packInfo, saveContext);
ISaveContext<RawAssetDLCPackage> saveContext = GetDefaultSaveContext("", "PCK (Minecraft Console Package)");
var editor = new PckAssetBrowserEditor(dlcPackage as RawAssetDLCPackage, saveContext);
TabPage page = AddPage(dlcPackage.Name, dlcPackage.Name, editor);
}
private static ISaveContext<PackInfo> GetDefaultSaveContext(string filepath, string description)
private static ISaveContext<RawAssetDLCPackage> GetDefaultSaveContext(string filepath, string description)
{
return new DelegatedFileSaveContext<PackInfo>(filepath, false, new FileDialogFilter(description, "*"+Path.GetExtension(filepath)),(packInfo, stream) => new PckFileWriter(packInfo.File, packInfo.ByteOrder).WriteToStream(stream));
return new DelegatedFileSaveContext<RawAssetDLCPackage>(filepath, false, new FileDialogFilter(description, "*"+Path.GetExtension(filepath)),(packInfo, stream) => new PckFileWriter(packInfo.PckFile, packInfo.ByteOrder).WriteToStream(stream));
}
private TabPage AddPage(string caption, string identifier, Control control)
@@ -114,9 +113,9 @@ namespace PckStudio
return page;
}
private bool TryGetEditor(TabPage page, out IEditor<PackInfo> editor)
private bool TryGetEditor(TabPage page, out IEditor<RawAssetDLCPackage> editor)
{
if (page.Controls[0] is IEditor<PackInfo> outEditor)
if (page.Controls[0] is IEditor<RawAssetDLCPackage> outEditor)
{
editor = outEditor;
return true;
@@ -125,7 +124,7 @@ namespace PckStudio
return false;
}
private bool TryGetCurrentEditor(out IEditor<PackInfo> editor) => TryGetEditor(tabControl.SelectedTab, out editor);
private bool TryGetCurrentEditor(out IEditor<RawAssetDLCPackage> editor) => TryGetEditor(tabControl.SelectedTab, out editor);
private void MainForm_Load(object sender, EventArgs e)
{
@@ -149,7 +148,7 @@ namespace PckStudio
private void CloseTab(TabControl.TabPageCollection collection, TabPage page)
{
if (TryGetEditor(page, out IEditor<PackInfo> editor))
if (TryGetEditor(page, out IEditor<RawAssetDLCPackage> editor))
{
editor.Close();
RemoveOpenFile(page);
@@ -251,7 +250,7 @@ namespace PckStudio
private void tabControl_PageClosing(object sender, PageClosingEventArgs e)
{
if (TryGetEditor(e.Page, out IEditor<PackInfo> editor))
if (TryGetEditor(e.Page, out IEditor<RawAssetDLCPackage> editor))
{
editor.Close();
RemoveOpenFile();
@@ -343,8 +342,8 @@ namespace PckStudio
if (namePrompt.ShowDialog(this) == DialogResult.OK)
{
PckFile skinPck = InitializePack(new Random().Next(8000, GameConstants.MAX_PACK_ID), 0, namePrompt.NewText, true);
PackInfo packInfo = PackInfo.Create(skinPck, OMI.ByteOrder.BigEndian, true);
AddEditorPage("Unsaved skin pack", "Unsaved skin pack", packInfo);
RawAssetDLCPackage newRawAssetDLCPackage = new RawAssetDLCPackage("New pack", skinPck, OMI.ByteOrder.BigEndian);
AddEditorPage(newRawAssetDLCPackage.Name, "Unsaved texture pack", newRawAssetDLCPackage);
}
}
@@ -354,8 +353,8 @@ namespace PckStudio
if (packPrompt.ShowDialog() == DialogResult.OK)
{
PckFile texturePackPck = InitializeTexturePack(new Random().Next(8000, GameConstants.MAX_PACK_ID), 0, packPrompt.PackName, packPrompt.PackRes, packPrompt.CreateSkinsPck);
PackInfo packInfo = PackInfo.Create(texturePackPck, OMI.ByteOrder.BigEndian, true);
AddEditorPage("Unsaved texture pack", "Unsaved texture pack", packInfo);
RawAssetDLCPackage newRawAssetDLCPackage = new RawAssetDLCPackage("New pack", texturePackPck, OMI.ByteOrder.BigEndian);
AddEditorPage(newRawAssetDLCPackage.Name, "Unsaved texture pack", newRawAssetDLCPackage);
}
}
@@ -365,16 +364,16 @@ namespace PckStudio
if (packPrompt.ShowDialog() == DialogResult.OK)
{
PckFile mashUpPck = InitializeMashUpPack(new Random().Next(8000, GameConstants.MAX_PACK_ID), 0, packPrompt.PackName, packPrompt.PackRes);
PackInfo packInfo = PackInfo.Create(mashUpPck, OMI.ByteOrder.BigEndian, true);
AddEditorPage("Unsaved mash-up pack", "Unsaved mash-up pack", packInfo);
RawAssetDLCPackage newRawAssetDLCPackage = new RawAssetDLCPackage("New pack", mashUpPck, OMI.ByteOrder.BigEndian);
AddEditorPage(newRawAssetDLCPackage.Name, "Unsaved texture pack", newRawAssetDLCPackage);
}
}
private void quickChangeToolStripMenuItem_Click(object sender, EventArgs e)
{
if (TryGetCurrentEditor(out IEditor<PackInfo> editor))
if (TryGetCurrentEditor(out IEditor<RawAssetDLCPackage> editor))
{
using AdvancedOptions advanced = new AdvancedOptions(editor.EditorValue.File);
using AdvancedOptions advanced = new AdvancedOptions(editor.EditorValue.PckFile);
advanced.IsLittleEndian = editor.EditorValue.ByteOrder == OMI.ByteOrder.LittleEndian;
if (advanced.ShowDialog() == DialogResult.OK)
{
@@ -481,7 +480,7 @@ namespace PckStudio
private void saveToolStripMenuItem_Click(object sender, EventArgs e)
{
if (TryGetCurrentEditor(out IEditor<PackInfo> editor))
if (TryGetCurrentEditor(out IEditor<RawAssetDLCPackage> editor))
{
editor.Save();
}
@@ -489,7 +488,7 @@ namespace PckStudio
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e)
{
if (TryGetCurrentEditor(out IEditor<PackInfo> editor))
if (TryGetCurrentEditor(out IEditor<RawAssetDLCPackage> editor))
{
editor.SaveAs();
}

View File

@@ -21,7 +21,6 @@ using System.Drawing;
using System.IO;
using System.Linq;
using PckStudio.Core.Json;
using static PckStudio.Core.AtlasResource;
namespace PckStudio.Core
{

View File

@@ -113,14 +113,14 @@ namespace PckStudio.Core.DLC
if (!pckFile.TryGetAsset("0", PckAssetType.InfoFile, out PckAsset zeroAsset))
{
Trace.TraceError("Could not find asset named:'0'.");
return new UnknownDLCPackage(fileInfo.Name, pckFile);
return new RawAssetDLCPackage(fileInfo.Name, pckFile, ByteOrder);
}
int identifier = (zeroAsset?.HasProperty("PACKID") ?? default) ? zeroAsset.GetProperty("PACKID", int.Parse) : -1;
int identifier = zeroAsset.HasProperty("PACKID") ? zeroAsset.GetProperty("PACKID", int.Parse) : -1;
if (identifier <= 0 || identifier > GameConstants.MAX_PACK_ID)
{
Trace.TraceError($"{nameof(identifier)}({identifier}) was out of range!");
return new UnknownDLCPackage(fileInfo.Name, pckFile);
return new RawAssetDLCPackage(fileInfo.Name, pckFile, ByteOrder);
}
if (_packageRegistry.ContainsPackage(identifier))
@@ -128,9 +128,12 @@ namespace PckStudio.Core.DLC
LOCFile localisation = pckFile.GetAssetsByType(PckAssetType.LocalisationFile).FirstOrDefault()?.GetData(new LOCFileReader());
if (localisation is null)
return new UnknownDLCPackage(fileInfo.Name, pckFile);
{
Trace.TraceError("No localisation asset found.");
return new RawAssetDLCPackage(fileInfo.Name, pckFile, ByteOrder);
}
IDLCPackage package = ScanForPackageType(fileInfo, identifier, pckFile, localisation, fileReader);
IDLCPackage package = LoadDLCPackage(fileInfo, identifier, pckFile, localisation, fileReader);
if (package.GetDLCPackageType() != DLCPackageType.Invalid)
{
_packageRegistry.RegisterPackage(identifier, package, localisation);
@@ -156,7 +159,7 @@ namespace PckStudio.Core.DLC
return true;
}
private IDLCPackage ScanForPackageType(FileInfo fileInfo, int identifier, PckFile pckFile, LOCFile localisation, PckFileReader fileReader)
private IDLCPackage LoadDLCPackage(FileInfo fileInfo, int identifier, PckFile pckFile, LOCFile localisation, PckFileReader fileReader)
{
bool hasLanguage = localisation?.Languages?.Contains(PreferredLanguage) ?? default;
@@ -170,7 +173,7 @@ namespace PckStudio.Core.DLC
bool couldBeMiniGamePack = fileInfo.Name == DEFAULT_MINIGAME_PACK_FILENAME;
bool hasSkins = TryGetDLCSkinPackage(name, identifier, pckFile, fileReader, out IDLCPackage skinPackage);
DLCPackageType dlcPackageType = hasSkins ? DLCPackageType.SkinPack : DLCPackageType.Unknown;
DLCPackageType dlcPackageType = hasSkins ? DLCPackageType.SkinPack : DLCPackageType.RawAssets;
DirectoryInfo dataDirectoryInfo = fileInfo.Directory.EnumerateDirectories().Where(dirInfo => dirInfo.Name == DATA_DIRECTORY_NAME).FirstOrDefault();
@@ -191,7 +194,7 @@ namespace PckStudio.Core.DLC
}
Debug.WriteLine(dlcPackageType);
return new UnknownDLCPackage(name, pckFile);
return new RawAssetDLCPackage(name, pckFile, ByteOrder);
}
private Dictionary<string, IDictionary<string, byte[]>> GetMapData(PckFile pck, DirectoryInfo dataDirectory)

View File

@@ -2,8 +2,8 @@
{
public enum DLCPackageType : int
{
Unknown = -1,
Invalid,
Invalid = -1,
RawAssets,
SkinPack,
TexturePack,
MashUpPack,

View File

@@ -3,21 +3,23 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OMI;
using OMI.Formats.Pck;
using PckStudio.Core.Interfaces;
namespace PckStudio.Core.DLC
{
public sealed class UnknownDLCPackage : DLCPackage
public sealed class RawAssetDLCPackage : DLCPackage
{
public PckFile PckFile { get; }
public ByteOrder ByteOrder { get; }
public UnknownDLCPackage(string name, PckFile pckFile)
: base(name ?? nameof(UnknownDLCPackage), -1, default)
public RawAssetDLCPackage(string name, PckFile pckFile, ByteOrder byteOrder)
: base(name ?? nameof(RawAssetDLCPackage), -1, default)
{
PckFile = pckFile;
ByteOrder = byteOrder;
}
public override DLCPackageType GetDLCPackageType() => DLCPackageType.Unknown;
public override DLCPackageType GetDLCPackageType() => DLCPackageType.RawAssets;
}
}

View File

@@ -1,28 +0,0 @@
using System;
using OMI.Formats.Pck;
namespace PckStudio.Core
{
public sealed class PackInfo
{
public static readonly PackInfo Empty = new PackInfo(default, default, default);
public bool IsValid { get; }
public PckFile File { get; }
public OMI.ByteOrder ByteOrder { get; }
public bool AllowByteOrderSwap { get; }
public static PackInfo Create(PckFile file, OMI.ByteOrder byteOrder, bool allowByteOrderSwap)
{
return new PackInfo(file, byteOrder, allowByteOrderSwap);
}
private PackInfo(PckFile file, OMI.ByteOrder byteOrder, bool allowByteOrderSwap)
{
File = file;
ByteOrder = byteOrder;
AllowByteOrderSwap = allowByteOrderSwap;
IsValid = file is not null && Enum.IsDefined(typeof(OMI.ByteOrder), byteOrder);
}
}
}

View File

@@ -78,7 +78,7 @@
<Compile Include="DLC\DLCPackageRegistry.cs" />
<Compile Include="DLC\DLCSkinPackage.cs" />
<Compile Include="DLC\DLCTexturePackage.cs" />
<Compile Include="DLC\UnknownDLCPackage.cs" />
<Compile Include="DLC\RawAssetDLCPackage.cs" />
<Compile Include="Extensions\AnimationExtensions.cs" />
<Compile Include="Extensions\BlendMode.cs" />
<Compile Include="Extensions\BlendOption.cs" />
@@ -159,7 +159,6 @@
<Compile Include="Misc\FileCacher.cs" />
<Compile Include="Misc\OpenFolderDialog.cs" />
<Compile Include="NamedData.cs" />
<Compile Include="PackInfo.cs" />
<Compile Include="DLC\DLCPackageType.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>

View File

@@ -18,7 +18,6 @@
using System.ComponentModel;
using System.Drawing;
<<<<<<<< HEAD:PckStudio.Rendering/TextureChangingEventArgs.cs
namespace PckStudio.Rendering
{
public class TextureChangingEventArgs : CancelEventArgs
@@ -29,26 +28,5 @@ namespace PckStudio.Rendering
{
NewTexture = newTexture;
}
========
namespace PckStudio.Core
{
public enum ResourceCategory
{
Unknown = -1,
ItemAnimation,
BlockAnimation,
MobEntityTextures,
ItemEntityTextures,
ItemAtlas,
BlockAtlas,
ParticleAtlas,
BannerAtlas,
PaintingAtlas,
ExplosionAtlas,
ExperienceOrbAtlas,
MoonPhaseAtlas,
MapIconAtlas,
AdditionalMapIconsAtlas,
>>>>>>>> main:PckStudio.Core/ResourceCategory.cs
}
}