public D2IngameCashCounterLogic(Widget widget, World world, WorldRenderer worldRenderer) { this.world = world; player = world.LocalPlayer; playerResources = player.PlayerActor.Trait <PlayerResources>(); playerResources.AssignDelegates(TakeCash, TakeCash, TakeCash, TakeCash); displayResources = playerResources.Cash + playerResources.Resources; cashLabel = playerResources.Resources.ToString(); displayLabel = cashLabel.F(displayResources); DuneMusic.Init(44100, "", DuneMusic.DuneMusicOplEmu.kOplEmuNuked); IReadOnlyFileSystem fileSystem = Game.ModData.DefaultFileSystem; using (var stream = fileSystem.Open("DUNE1.ADL")) { DuneMusic.InsertMemoryFile("test", stream.ReadAllBytes()); byte[] temp = new byte[1800880]; UIntPtr temp3; temp3 = (UIntPtr)1000000; temp3 = DuneMusic.SynthesizeAudio("test", 52, -1, temp, (UIntPtr)temp.Length); //stclick = new MemoryStream(temp); soundSource = Game.Sound.soundEngine.AddSoundSourceFromMemory(temp, 2, 16, 44100); //ISound temp2 = Game.Sound.soundEngine.Play2D(Game.LocalTick, soundSource, false, true, WPos.Zero, 100, false); } //cash.GetText = () => displayLabel; //cash.GetTooltipText = () => "Silo Usage: {0}/{1}".F(playerResources.Resources, playerResources.ResourceCapacity); }
public ADLFormat(Stream stream, string SubSong) { if (buffer.Length > 10) { return; } DuneMusic.Init(44100, "", DuneMusic.DuneMusicOplEmu.kOplEmuNuked); DuneMusic.InsertMemoryFile("test", stream.ReadAllBytes()); buffer = new byte[10106880]; UIntPtr temp3; temp3 = (UIntPtr)1000000; temp3 = DuneMusic.SynthesizeAudio("test", Convert.ToInt32(SubSong), -1, buffer, (UIntPtr)buffer.Length); //ISoundSource soundSource; //soundSource = Game.Sound.soundEngine.AddSoundSourceFromMemory(buffer, 2, 16, 44100); //ISound temp2 = Game.Sound.soundEngine.Play2D(Game.LocalTick, soundSource, false, true, WPos.Zero, 100, false); }
public void Draw2() { //вызовы SetPalette в Draw для UI элементов, конкурируют с RefreshPalette в World.Draw. //Game.Renderer.SetPalette(hardwarePalette); //теперь не нужно, так как обнаружен файл palettes.yaml, в котором все палитры есть и сделано через него. if (String.IsNullOrEmpty(cachedVideo)) { return; } //if (video==null) //{ // return; //} //Game.RunTime MilliSeconds 1s=1000ms=50ms*20times var deltaScale = Game.RunTime - lastDrawTime; CountForWaitNextFrameMs += deltaScale; //if we need pause wait it if (CountForPause > PauseInSeconds * 1000) { if (VideoStackList != null) {//only move next, first video must be dequed from PlayVideoStack if (VideoStackList.Count > 0) { CountForPause = 0; CountForWaitNextFrameMs = 0; Load(VideoStackList.Dequeue()); lastDrawTime = Game.RunTime; stopped = paused = false; return; } //stop video } //нужно остановить медиа=сцену и передать контроль дальше cachedVideo = null; Exit(); return; } if (CountForWaitNextFrameMs < DrawPrevFrameEveryXMs) //code runs every tick before Next Video frame to fill the gap { if (prevSprite != null) { //just draw the same frame Game.Renderer.SpriteRenderer.DrawSprite(prevSprite, videoOrigin, pr, videoSize); } if (prevText != null) { DrawWsaText(prevText); } return; } else { if (video != null && prevSprite != null) { if (video.CurrentFrame >= video.Length - 1) //this code runs every DrawFrameEveryXMilliseconds when video is ended. { //on video last frame draw always last frame Game.Renderer.SpriteRenderer.DrawSprite(prevSprite, videoOrigin, pr, videoSize); CountForPause += deltaScale; //incerease CountForPause to enter at if (CountForPause > PauseInSeconds * 1000) lastDrawTime = Game.RunTime; if (prevText != null) { DrawWsaText(prevText); } return; } //if not last frame of video, move next frame video.AdvanceFrame(); } if (image != null && prevSprite != null) { Game.Renderer.SpriteRenderer.DrawSprite(prevSprite, videoOrigin, pr, videoSize); CountForPause += deltaScale; //incerease CountForPause to enter at if (CountForPause > PauseInSeconds * 1000) lastDrawTime = Game.RunTime; return; } if (prevText != null) { DrawWsaText(prevText); } //|| //\/ } if (video != null) { if (frameSoundLine == null) { } else { if (frameSoundLine.Contains(new FrameSoundLine() { WSAfilename = cachedVideo, FrameNumber = video.CurrentFrame })) { var vocfilename = frameSoundLine.Find(x => x.WSAfilename.Contains(cachedVideo) && x.FrameNumber == video.CurrentFrame).VOCfilename; if (vocfilename.Contains("ADL")) { IReadOnlyFileSystem fileSystem = Game.ModData.DefaultFileSystem; if (!fileSystem.Exists(vocfilename)) { Log.Write("sound", "LoadSound, file does not exist: {0}", vocfilename); } DuneMusic.Quit(); DuneMusic.Init(44100, "", DuneMusic.DuneMusicOplEmu.kOplEmuNuked); using (var stream = fileSystem.Open(vocfilename)) { DuneMusic.InsertMemoryFile("test", stream.ReadAllBytes()); byte[] temp = new byte[28106880]; UIntPtr temp3; temp3 = (UIntPtr)1000000; temp3 = DuneMusic.SynthesizeAudio("test", 52, -1, temp, (UIntPtr)temp.Length); ISoundSource soundSource; soundSource = Game.Sound.soundEngine.AddSoundSourceFromMemory(temp, 2, 16, 44100); ISound temp2 = Game.Sound.soundEngine.Play2D(Game.LocalTick, soundSource, false, true, WPos.Zero, 100, false); } } else { Game.Sound.Play(SoundType.UI, vocfilename); } } } if (frameTextLine == null) { prevText = new FrameTextLine() { Text = "" }; DrawWsaText(prevText); } else { if (frameTextLine.Contains(new FrameTextLine() { WSAfilename = cachedVideo, FrameNumber = video.CurrentFrame })) { FrameTextLine ft = frameTextLine.Find(x => x.WSAfilename.Contains(cachedVideo) && x.FrameNumber == video.CurrentFrame); DrawWsaText(ft); prevText = ft; } } } var sheetBuilder = new SheetBuilder(SheetType.Indexed, 512); //router for WSA frame or CPS frame Sprite videoSprite = null; if (cachedVideo.Contains("WSA")) { videoSprite = sheetBuilder.Add(video.Frame); } else { //videoSprite = new Sprite(sheetBuilder.Current, new Rectangle(0, 0, 320, 200), TextureChannel.RGBA); videoSprite = sheetBuilder.Add(imageSprite[0]); //дампинг ресурсов игры в png //videoSprite.Sheet.CreateBuffer(); //videoSprite.Sheet.ReleaseBuffer(); ////videoSprite.Sheet.AsPng().Save("VIRGIN.png"); //IPalette exppal; //try //{ // exppal = hardwarePalette.GetPalette(cachedVideo); //} //catch (Exception) //{ // exppal = null; //} //if (exppal==null) //{ // LoadPalette(); // videoSprite.Sheet.AsPng(TextureChannel.Blue, hardwarePalette.GetPalette("chrome")).Save(cachedVideo + ".png"); //} //else //{ // videoSprite.Sheet.AsPng(TextureChannel.Blue, exppal).Save(cachedVideo + ".png"); //} } prevSprite = videoSprite; Game.Renderer.SpriteRenderer.DrawSprite(videoSprite, videoOrigin, pr, videoSize); CountForWaitNextFrameMs = 0; lastDrawTime = Game.RunTime; }