mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-29 00:23:31 -04:00
117 lines
3.5 KiB
C#
117 lines
3.5 KiB
C#
// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
|
|
using System;
|
|
using System.IO;
|
|
using ClassicalSharp.TexturePack;
|
|
|
|
namespace Launcher.Patcher {
|
|
|
|
public sealed class ResourceChecker {
|
|
|
|
public void CheckResourceExistence() {
|
|
string audioPath = Path.Combine( Program.AppDirectory, "audio" );
|
|
if( !Directory.Exists( audioPath ) )
|
|
Directory.CreateDirectory( audioPath );
|
|
DigSoundsExist = CheckDigSoundsExist();
|
|
StepSoundsExist = CheckStepSoundsExist();
|
|
AllResourcesExist = DigSoundsExist && StepSoundsExist;
|
|
|
|
string texDir = Path.Combine( Program.AppDirectory, "texpacks" );
|
|
string zipPath = Path.Combine( texDir, "default.zip" );
|
|
bool defaultZipExists = File.Exists( zipPath );
|
|
if( File.Exists( zipPath ) )
|
|
CheckDefaultZip( zipPath );
|
|
|
|
CheckTexturePack();
|
|
CheckMusic( audioPath );
|
|
CheckSounds();
|
|
}
|
|
|
|
void CheckTexturePack() {
|
|
ushort flags = 0;
|
|
foreach( var entry in ResourceList.Files )
|
|
flags |= entry.Value;
|
|
if( flags != 0 ) AllResourcesExist = false;
|
|
|
|
if( (flags & ResourceList.cMask) != 0 ) {
|
|
DownloadSize += 291/1024f; ResourcesCount++;
|
|
}
|
|
if( (flags & ResourceList.mMask) != 0 ) {
|
|
DownloadSize += 4621/1024f; ResourcesCount++;
|
|
}
|
|
if( (flags & ResourceList.tMask) != 0 ) {
|
|
DownloadSize += 7/1024f; ResourcesCount++;
|
|
}
|
|
if( (flags & ResourceList.gMask) != 0 ) {
|
|
DownloadSize += 21/1024f; ResourcesCount++;
|
|
}
|
|
}
|
|
|
|
void CheckMusic( string audioPath ) {
|
|
string[] files = ResourceList.MusicFiles;
|
|
for( int i = 0; i < files.Length; i++ ) {
|
|
string file = Path.Combine( audioPath, files[i] + ".ogg" );
|
|
musicExists[i] = File.Exists( file );
|
|
if( !musicExists[i] ) {
|
|
DownloadSize += musicSizes[i] / 1024f;
|
|
ResourcesCount++;
|
|
AllResourcesExist = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
void CheckSounds() {
|
|
if( !DigSoundsExist ) {
|
|
ResourcesCount += ResourceList.DigSounds.Length;
|
|
DownloadSize += 173 / 1024f;
|
|
}
|
|
if( !StepSoundsExist ) {
|
|
ResourcesCount += ResourceList.StepSounds.Length;
|
|
DownloadSize += 244 / 1024f;
|
|
}
|
|
}
|
|
|
|
public bool AllResourcesExist, DigSoundsExist, StepSoundsExist;
|
|
public float DownloadSize;
|
|
public int ResourcesCount;
|
|
internal bool[] musicExists = new bool[7];
|
|
|
|
void CheckDefaultZip( string path ) {
|
|
ZipReader reader = new ZipReader();
|
|
reader.ShouldProcessZipEntry = ShouldProcessZipEntry;
|
|
reader.ProcessZipEntry = ProcessZipEntry;
|
|
|
|
using( Stream src = new FileStream( path, FileMode.Open, FileAccess.Read ) )
|
|
reader.Extract( src );
|
|
}
|
|
|
|
bool ShouldProcessZipEntry( string filename ) {
|
|
string name = ResourceList.GetFile( filename );
|
|
ResourceList.Files.Remove( name );
|
|
return false;
|
|
}
|
|
|
|
void ProcessZipEntry( string filename, byte[] data, ZipEntry entry ) { }
|
|
|
|
bool CheckDigSoundsExist() {
|
|
string[] files = ResourceList.DigSounds;
|
|
string path = Path.Combine( Program.AppDirectory, "audio" );
|
|
for( int i = 0; i < files.Length; i++ ) {
|
|
string file = "dig_" + files[i].Substring( 1 ) + ".wav";
|
|
if( !File.Exists( Path.Combine( path, file ) ) ) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool CheckStepSoundsExist() {
|
|
string[] files = ResourceList.StepSounds;
|
|
string path = Path.Combine( Program.AppDirectory, "audio" );
|
|
for( int i = 0; i < files.Length; i++ ) {
|
|
string file = "step_" + files[i].Substring( 1 ) + ".wav";
|
|
if( !File.Exists( Path.Combine( path, file ) ) ) return false;
|
|
}
|
|
return true;
|
|
}
|
|
static int[] musicSizes = new [] { 2472, 1931, 2181, 1926, 1714, 1879, 2499 };
|
|
}
|
|
}
|