Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
        }