public static GameFont HiResFromGameData() { using (DisposableStack disposables = new DisposableStack(2)) { GameImage firstImage, secondImage; ArchiveDirectoryEntry mainDirectory = Archives.GetEntry <ArchiveDirectoryEntry>(MainPath); ArchiveDirectoryEntry menuDirectory = Archives.GetEntry <ArchiveDirectoryEntry>(MenuPath); ArchiveDirectoryEntry hiresDirectory = menuDirectory.GetChildEntry <ArchiveDirectoryEntry>(HiResDirectoryName); ArchiveFileEntry tdwEntry = mainDirectory.GetChildEntry <ArchiveFileEntry>(HiResCharactersWidthsFileName); ArchiveFileEntry image01 = hiresDirectory.GetChildEntry <ArchiveFileEntry>(HiResFontImage1FileName); ArchiveFileEntry image02 = hiresDirectory.GetChildEntry <ArchiveFileEntry>(HiResFontImage2FileName); byte[] widths; using (TdwFileReader tdwReader = new TdwFileReader(tdwEntry.OpenReadableContentStream())) widths = tdwReader.Table; using (TexFileReader texReader = new TexFileReader(image01.OpenReadableContentStream())) { firstImage = GameImageReader.FromTex(texReader); disposables.Add(firstImage.Layer); } using (TexFileReader texReader = new TexFileReader(image02.OpenReadableContentStream())) secondImage = disposables.Add(GameImageReader.FromTex(texReader)); int x = firstImage.X; int y = firstImage.Y; GLTexture palettes = firstImage.Palettes; GLTexture layer = GLTextureFactory.HorizontalJoin(firstImage.Layer, secondImage.Layer); GameImage image = new GameImage(x, y, layer, palettes); return(new GameFont(image, widths)); } }
//private sealed class MyStream2 : NetworkStream //{ // private static readonly FileStream _output = new FileStream("tempFile.bin", FileMode.Create, FileAccess.Write, FileShare.ReadWrite); // public MyStream2([NotNull] Socket socket) : base(socket) // { // } // public MyStream2([NotNull] Socket socket, Boolean ownsSocket) : base(socket, ownsSocket) // { // } // public MyStream2([NotNull] Socket socket, FileAccess access) : base(socket, access) // { // } // public MyStream2([NotNull] Socket socket, FileAccess access, Boolean ownsSocket) : base(socket, access, ownsSocket) // { // } // public override Int32 Read(Byte[] buffer, Int32 offset, Int32 size) // { // var readed = base.Read(buffer, offset, size); // _output.Write(buffer, offset, readed); // _output.Flush(); // return readed; // } // public override Int32 ReadByte() // { // var b = base.ReadByte(); // if (b != -1) // { // _output.WriteByte(checked((Byte)b)); // _output.Flush(); // } // return b; // } //} private static void Connect() { lock (Disposables) { Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); Disposables.Add(socket); IPEndPoint ip = new IPEndPoint(IPAddress.Loopback, 49021); socket.Connect(ip); //NetworkStream stream = new MyStream2(socket, FileAccess.Read, false); NetworkStream stream = new NetworkStream(socket, FileAccess.ReadWrite, false); Disposables.Add(stream); BinaryReader br = new BinaryReader(stream, Encoding.UTF8, true); //BinaryReader br = new CrossPlatformBinaryReader(stream, Encoding.UTF8); Disposables.Add(br); BinaryWriter bw = new BinaryWriter(stream, Encoding.UTF8, true); Disposables.Add(bw); Thread readingThread = new Thread(() => { try { ProcessInput(br); } catch (Exception ex) { Disconnect(ex.ToString()); } }) { IsBackground = true, Name = "NetworkReadingThread" }; readingThread.Start(); Thread writingThread = new Thread(() => { try { ProcessOutput(bw); } catch (Exception ex) { Disconnect(ex.ToString()); } }) { IsBackground = true, Name = "NetworkWritingThread" }; writingThread.Start(); InteractionService.RemoteGameObjects.Provide(); Connected?.Invoke(); } }
public static GameImage FromTex(TexFileReader reader) { const short x = 0; const short y = 0; using (DisposableStack insurance = new DisposableStack(2)) { GLTexture layer = insurance.Add(reader.ReadImage()); GLTexture palettes = insurance.Add(GLTextureFactory.FromBitmapPalettes(reader.Palettes)); GameImage result = new GameImage(x, y, layer, palettes); insurance.Clear(); return(result); } }
public IsoFileCommander(IsoInfo isoInfo) { _isoInfo = Exceptions.CheckArgumentNull(isoInfo, "isoInfo"); try { _stream = _disposables.Add(new FileStream(isoInfo.FilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)); _memory = _disposables.Add(MemoryMappedFile.CreateFromFile(_stream, null, 0, MemoryMappedFileAccess.Read, null, HandleInheritability.Inheritable, false)); } catch { Dispose(); throw; } }
public static GameImage FromTim(TimFileReader reader) { using (DisposableStack insurance = new DisposableStack(3)) { TimImage timImage = insurance.Add(reader.ReadImage()); short x = timImage.ImageHeader.X; short y = timImage.ImageHeader.Y; GLTexture layer = timImage.Layer; GLTexture palettes = insurance.Add(GLTextureFactory.FromBitmapPalettes(reader.Palettes == null ? null : reader.Palettes.Palettes)); GameImage result = new GameImage(x, y, layer, palettes); insurance.Clear(); return(result); } }
public BackgroundMusicPlayer() { try { _stream = _disposables.Add(Assembly.GetExecutingAssembly().GetManifestResourceStream(FileName)); _audioFileReader = _disposables.Add(new Mp3FileReader(_stream, CreateMp3Decompressor)); _waveOutDevice = _disposables.Add(new WaveOut()); _waveOutDevice.Init(_audioFileReader); _waveOutDevice.PlaybackStopped += OnPlaybackStopped; } catch { _disposables.Dispose(); throw; } }
public static void CreatePipe(long capacity, out Stream input, out Stream output) { using (DisposableStack insurance = new DisposableStack(3)) { Flute flute = insurance.Add(new Flute(capacity)); Stream writer = insurance.Add(flute.AcquireWriter(0, capacity)); Stream reader = insurance.Add(flute.AcquireReader(0, capacity)); DisposableStream disposableOutput = new DisposableStream(reader); disposableOutput.AfterDispose.Add(flute); disposableOutput.AfterDispose.Add(writer); input = writer; output = disposableOutput; insurance.Clear(); } }
public static void HiResToGameData(GameFont gameFont) { using (DisposableStack disposables = new DisposableStack(2)) { GLTexture leftTexture; GLTexture rightTexture; GLTextureFactory.HorizontalSplit(gameFont.CharactersImage.Layer, out leftTexture, out rightTexture); disposables.Add(leftTexture); disposables.Add(rightTexture); ArchiveDirectoryEntry mainDirectory = Archives.GetEntry <ArchiveDirectoryEntry>(GameFontReader.MainPath); ArchiveDirectoryEntry menuDirectory = Archives.GetEntry <ArchiveDirectoryEntry>(GameFontReader.MenuPath); ArchiveDirectoryEntry hiresDirectory = menuDirectory.GetChildEntry <ArchiveDirectoryEntry>(GameFontReader.HiResDirectoryName); ArchiveFileEntry tdwEntry = mainDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResCharactersWidthsFileName); ArchiveFileEntry image01 = hiresDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResFontImage1FileName); ArchiveFileEntry image02 = hiresDirectory.GetChildEntry <ArchiveFileEntry>(GameFontReader.HiResFontImage2FileName); using (Stream output = tdwEntry.OpenWritableCapacityStream()) using (TdwFileWriter tdwWriter = new TdwFileWriter(output)) { tdwWriter.WriteFontCharactersWidths(gameFont.CharactersWidths); tdwEntry.UpdateMetrics((int)output.Position, tdwEntry.ContentOffset, Compression.None); } using (Stream output = image01.OpenWritableCapacityStream()) using (TexFileWriter texWriter = new TexFileWriter(output)) { texWriter.WriteImage(leftTexture, gameFont.CharactersImage.Palettes); image01.UpdateMetrics((int)output.Position, image01.ContentOffset, Compression.None); } using (Stream output = image02.OpenWritableCapacityStream()) using (TexFileWriter texWriter = new TexFileWriter(output)) { texWriter.WriteImage(rightTexture, gameFont.CharactersImage.Palettes); image02.UpdateMetrics((int)output.Position, image02.ContentOffset, Compression.None); } Archives.GetInfo(ArchiveName.Main).Update(); Archives.GetInfo(ArchiveName.Menu).Update(); } }
public override void Open() { Close(); using (Stream palettesStream = IOStream.GetStreamSegment(4096, MimPalettes.Size)) Palettes = MimPalettes.Read(palettesStream); Stream textureStream = _disposables.Add(IOStream.GetStreamSegment(12288)); Textures = new MimTextures(textureStream); }
private void ReadTextureFromTexFiles(string[] files) { GLTexture[] textures = new GLTexture[2]; using (DisposableStack disposables = new DisposableStack(2)) { for (int i = 0; i < 2; i++) { using (FileStream input = File.OpenRead(files[i])) using (TexFileReader texReader = new TexFileReader(input)) textures[i] = disposables.Add(texReader.ReadImage()); } _texture = GLTextureFactory.HorizontalJoin(textures[0], textures[1]); _ownTexture = true; } }
private static DxTexture[] ReadTextures(ImgbArchiveAccessor accessor, TextureSection[] gtexDatas) { DxTexture[] textures = new DxTexture[gtexDatas.Length]; using (Stream imgbStream = accessor.ExtractContent()) using (DisposableStack insurance = new DisposableStack()) { for (int i = 0; i < gtexDatas.Length; i++) { GtexData data = gtexDatas[i].Gtex; textures[i] = insurance.Add(ReadTexture(imgbStream, data)); } insurance.Clear(); } return(textures); }
public MainWindow() { InitializeComponent(); Unloaded += OnUnloaded; MouseDown += OnMouseDown; _player = _disposables.Add(BackgroundMusicPlayer.TryCreateAndPlay()); PlayButton.GameSettings = GameSettings; PlayButton.MusicPlayer = _player; LocalizatorEnvironmentInfo info = InteractionService.LocalizatorEnvironment.Provide(); if (!info.PlayMusic) { OnMusicButtonClick(MusicButton, new RoutedEventArgs()); } if (!info.ExitAfterRunGame) { OnSwitchButtonClick(SwitchButton, new RoutedEventArgs()); } }
private void Patch(BinaryReader br, GameLocationInfo gameLocation) { if (CancelEvent.IsSet()) return; FFXIIITextEncoding encoding = ReadEncoding(br); TextEncodingInfo encodingInfo = new TextEncodingInfo(encoding); InteractionService.TextEncoding.SetValue(encodingInfo); if (CancelEvent.IsSet()) return; Dictionary<string, string> dic = ReadStrings(br); dic["$title_newgame"] = _userName; if (CancelEvent.IsSet()) return; using (DisposableStack disposables = new DisposableStack()) { MemoryInjectionSource source = disposables.Add(new MemoryInjectionSource()); source.RegisterStrings(dic); if (CancelEvent.IsSet()) return; int count = br.ReadInt32(); OnProgress(4); for (int i = 0; i < count; i++) { long position = br.BaseStream.Position; ImgbPatchData imgb = disposables.Add(ImgbPatchData.ReadFrom(br)); foreach (KeyValuePair<string, SafeUnmanagedArray> data in imgb) source.RegisterStream(Path.Combine(imgb.XgrArchiveUnpackName, data.Key), data.Value.OpenStream(FileAccess.Read)); OnProgress(br.BaseStream.Position - position); if (CancelEvent.IsSet()) return; } UiArchiveTreeBuilder builder = new UiArchiveTreeBuilder(gameLocation); UiArchives archives = builder.Build(); Position = 0; Maximum = archives.Count; foreach (UiContainerNode archive in archives) { Check(archive); OnProgress(1); } if (CancelEvent.IsSet()) return; IUiLeafsAccessor[] accessors = archives.AccessToCheckedLeafs(new Wildcard("*"), null, false).ToArray(); Position = 0; Maximum = accessors.Length; UiInjectionManager manager = new UiInjectionManager(); foreach (IUiLeafsAccessor accessor in accessors) { accessor.Inject(source, manager); OnProgress(1); } manager.WriteListings(); } }