/// <summary> /// Sets up the sound system and loads in the music controls. This /// does use the full library for Tao, but only the mixer functions /// are used. /// </summary> public void Initialize() { // Set up the SDL sound SdlMixer.Mix_OpenAudio( SdlMixer.MIX_DEFAULT_FREQUENCY, (short)SdlMixer.MIX_DEFAULT_FORMAT, 2, 1024); // Allocate channels SdlMixer.Mix_AllocateChannels(MaximumSoundsChunks); // Default volumnes int vol = Game.Config.GetInt(Constants.ConfigMusicVolume, 75); SdlMixer.Mix_VolumeMusic(vol); // Hook up the events musicStopped = new SdlMixer.MusicFinishedDelegate(OnMusicEnded); SdlMixer.Mix_HookMusicFinished(musicStopped); channelStopped = new SdlMixer.ChannelFinishedDelegate(OnChannelEnded); SdlMixer.Mix_ChannelFinished(channelStopped); }
private void Go() { splashscreen = new Splash(); splashscreen.Show(); splashscreen.BringToFront(); splashscreen.Refresh(); Core.Init(null, null, null, new ProgressHandler(UpdateMessage), true); world = new WorldDefinition(new Distance(150, 150, 7), 3); WorldDefinition.World = world; mainWindowMDI = new MainWindow(); timer = new System.Windows.Forms.Timer(); Events.KeyboardDown += new EventHandler <KeyboardEventArgs>(this.KeyDown); Events.MouseButtonDown += new EventHandler <MouseButtonEventArgs>(this.MouseButtonDown); Events.MouseButtonUp += new EventHandler <MouseButtonEventArgs>(this.MouseButtonUp); Events.Quit += new EventHandler <QuitEventArgs>(this.Quit); Events.Tick += new EventHandler <TickEventArgs>(this.Tick); Events.VideoResize += new EventHandler <SdlDotNet.Graphics.VideoResizeEventArgs>(this.Resize); Events.MusicFinished += new EventHandler <MusicFinishedEventArgs>(this.MusicFinished); Events.MouseMotion += new EventHandler <MouseMotionEventArgs>(this.MouseMotion); dragStartMousePosition = new Point(0, 0); dragStartScrollPosition = new Point(0, 0); ScrollPosition = new Point(0, 0); this.width = Properties.Settings.Default.RenderWindowWidth; this.height = Properties.Settings.Default.RenderWindowHeight; try { SdlDotNet.Graphics.Video.WindowIcon(); SdlDotNet.Graphics.Video.WindowCaption = Translation.GetString("MAIN_WINDOW_TITLE"); SdlDotNet.Graphics.Video.Initialize(); splashscreen.BringToFront(); } catch { MessageBox.Show(Translation.GetString("SDL_NOT_FOUND")); return; } Mixer.Initialize(); SdlMixer.MusicFinishedDelegate musicStopped = new SdlMixer.MusicFinishedDelegate(MusicHasStopped); SdlMixer.Mix_HookMusicFinished(musicStopped); screen = SdlDotNet.Graphics.Video.SetVideoMode(width, height, currentBpp, true); screen.SourceColorKey = Color.Magenta; IntPtr videoInfoPointer = Sdl.SDL_GetVideoInfo(); if (videoInfoPointer != IntPtr.Zero) { videoInfo = (Sdl.SDL_VideoInfo)Marshal.PtrToStructure(videoInfoPointer, typeof(Sdl.SDL_VideoInfo)); pixelFormat = (Sdl.SDL_PixelFormat)Marshal.PtrToStructure(videoInfo.vfmt, typeof(Sdl.SDL_PixelFormat)); } splashscreen.status.AppendText("FreeTrain SDL Starting..."); splashscreen.status.AppendText("\n"); splashscreen.Refresh(); FinalDraw(); splashscreen.status.AppendText("Loading plugins..."); splashscreen.status.AppendText("\n"); splashscreen.Refresh(); FinalDraw(); weatherOverlay = NullWeatherOverlay.theInstance; FinalDraw(); qView = new QuarterViewDrawer(world, new Rectangle(0, 0, world.Size.x * 32 - 16, (world.Size.y - 2 * world.Size.z - 1) * 8)); qView.OffscreenBuffer = new Surface(world.Size.x * 32 - 16, (world.Size.y - 2 * world.Size.z - 1) * 8, screen.CreateCompatibleSurface().Pixels); qView.OffscreenBuffer.SourceColorKey = Color.Magenta; qView.RecreateDrawBuffer(new Size(width, height), true); splashscreen.status.AppendText("Creating Map..."); splashscreen.status.AppendText("\n"); splashscreen.Refresh(); FinalDraw(); qView.Draw(new Rectangle(0, 0, world.Size.x * 32 - 16, (world.Size.y - 2 * world.Size.z - 1) * 8), null); timer.Tick += new EventHandler(TimerTick); timer.Interval = 33; timer.Enabled = true; timer.Start(); mainWindowMDI.Show(); splashscreen.BringToFront(); splashscreen.Close(); Events.Run(); }
/// <summary> /// For performance reasons, you must call this method /// to enable the Events.ChannelFinished and /// Events.MusicFinished events /// </summary> public static void EnableMusicFinishedCallback() { MusicFinishedDelegate = new SdlMixer.MusicFinishedDelegate(MusicFinished); SdlMixer.Mix_HookMusicFinished(MusicFinishedDelegate); Events.MusicFinished += new EventHandler<MusicFinishedEventArgs>(Events_MusicFinished); }
/// <summary> /// For performance reasons, you must call this method /// to enable the Events.ChannelFinished and /// Events.MusicFinished events /// </summary> public static void EnableMusicFinishedCallback() { MusicFinishedDelegate = new SdlMixer.MusicFinishedDelegate(MusicFinished); SdlMixer.Mix_HookMusicFinished(MusicFinishedDelegate); Events.MusicFinished += new EventHandler <MusicFinishedEventArgs>(Events_MusicFinished); }
public static void Run() { int flags = (Sdl.SDL_HWSURFACE|Sdl.SDL_DOUBLEBUF|Sdl.SDL_ANYFORMAT); int bpp = 16; int width = 640; int height = 480; bool quitFlag = false; Random rand = new Random(); string filePath = Path.Combine("..", ".."); string fileDirectory = "Data"; string fileName = "SdlExamples.Rectangles.sound.ogg"; if (File.Exists(fileName)) { filePath = ""; fileDirectory = ""; } else if (File.Exists(Path.Combine(fileDirectory, fileName))) { filePath = ""; } string file = Path.Combine(Path.Combine(filePath, fileDirectory), fileName); Sdl.SDL_Event evt; try { Sdl.SDL_Init(Sdl.SDL_INIT_EVERYTHING); Sdl.SDL_WM_SetCaption("Tao.Sdl Example - Rectangles", ""); IntPtr surfacePtr = Sdl.SDL_SetVideoMode( width, height, bpp, flags); int result = SdlMixer.Mix_OpenAudio( SdlMixer.MIX_DEFAULT_FREQUENCY, (short)SdlMixer.MIX_DEFAULT_FORMAT, 2, 1024); IntPtr chunkPtr = SdlMixer.Mix_LoadMUS(file); SdlMixer.MusicFinishedDelegate musicStopped = new SdlMixer.MusicFinishedDelegate(musicHasStopped); SdlMixer.Mix_HookMusicFinished(musicStopped); result = SdlMixer.Mix_PlayMusic(chunkPtr, 1); if (result == -1) { Console.WriteLine("Music Error: " + Sdl.SDL_GetError()); } int rmask = 0x00000000; int gmask = 0x00ff0000; int bmask = 0x0000ff00; int amask = 0x000000ff; IntPtr rgbSurfacePtr = Sdl.SDL_CreateRGBSurface( flags, width, height, bpp, rmask, gmask, bmask, amask); Sdl.SDL_Rect rect = new Sdl.SDL_Rect( 0, 0, (short)width, (short)height); result = Sdl.SDL_FillRect(rgbSurfacePtr, ref rect, 0); Sdl.SDL_Rect rect2; IntPtr videoInfoPointer = Sdl.SDL_GetVideoInfo(); if (videoInfoPointer == IntPtr.Zero) { throw new ApplicationException(string.Format("Video query failed: {0}", Sdl.SDL_GetError())); } Sdl.SDL_VideoInfo videoInfo = (Sdl.SDL_VideoInfo) Marshal.PtrToStructure(videoInfoPointer, typeof(Sdl.SDL_VideoInfo)); Console.WriteLine("Hi There"); Sdl.SDL_PixelFormat pixelFormat = (Sdl.SDL_PixelFormat) Marshal.PtrToStructure(videoInfo.vfmt, typeof(Sdl.SDL_PixelFormat)); Console.WriteLine(videoInfo.hw_available); Console.WriteLine(videoInfo.wm_available); Console.WriteLine(videoInfo.blit_hw); Console.WriteLine(videoInfo.blit_hw_CC); Console.WriteLine(videoInfo.blit_hw_A); Console.WriteLine(videoInfo.blit_sw); Console.WriteLine(videoInfo.blit_hw_CC); Console.WriteLine(videoInfo.blit_hw_A); Console.WriteLine(videoInfo.blit_fill); Console.WriteLine(videoInfo.video_mem); Console.WriteLine(pixelFormat.BitsPerPixel); Console.WriteLine(pixelFormat.BytesPerPixel); Console.WriteLine(pixelFormat.Rmask); Console.WriteLine(pixelFormat.Gmask); Console.WriteLine(pixelFormat.Bmask); Console.WriteLine(pixelFormat.Amask); int numevents = 10; Sdl.SDL_Event[] events = new Sdl.SDL_Event[numevents]; events[0].type = Sdl.SDL_KEYDOWN; events[0].key.keysym.sym = (int)Sdl.SDLK_p; events[1].type = Sdl.SDL_KEYDOWN; events[1].key.keysym.sym = (int)Sdl.SDLK_z; int result2 = Sdl.SDL_PeepEvents(events, numevents, Sdl.SDL_ADDEVENT, Sdl.SDL_KEYDOWNMASK); Console.WriteLine("Addevent result: " + result2); while (quitFlag == false) { result = Sdl.SDL_PollEvent(out evt); if (evt.type == Sdl.SDL_QUIT) { quitFlag = true; } else if (evt.type == Sdl.SDL_KEYDOWN) { if ((evt.key.keysym.sym == (int)Sdl.SDLK_ESCAPE) || (evt.key.keysym.sym == (int)Sdl.SDLK_q)) { quitFlag = true; } if (evt.key.keysym.sym == (int)Sdl.SDLK_p) { Console.WriteLine("Key p event was added"); } if (evt.key.keysym.sym == (int)Sdl.SDLK_z) { Console.WriteLine("Key z event was added"); } } rect2 = new Sdl.SDL_Rect( (short)rand.Next(-300, width), (short)rand.Next(-300, height), (short)rand.Next(20, 300), (short)rand.Next(20, 300)); try { result = Sdl.SDL_FillRect( surfacePtr, ref rect2, rand.Next(100000)); result = Sdl.SDL_BlitSurface( rgbSurfacePtr, ref rect2, surfacePtr, ref rect); result = Sdl.SDL_Flip(surfacePtr); } catch (Exception) { } } } catch { Sdl.SDL_Quit(); throw; } finally { Sdl.SDL_Quit(); } }
/// <summary> /// Sets up the sound system and loads in the music controls. This /// does use the full library for Tao, but only the mixer functions /// are used. /// </summary> public void Initialize() { // Set up the SDL sound SdlMixer.Mix_OpenAudio( SdlMixer.MIX_DEFAULT_FREQUENCY, (short) SdlMixer.MIX_DEFAULT_FORMAT, 2, 1024); // Allocate channels SdlMixer.Mix_AllocateChannels(MaximumSoundsChunks); // Default volumnes int vol = Game.Config.GetInt(Constants.ConfigMusicVolume, 75); SdlMixer.Mix_VolumeMusic(vol); // Hook up the events musicStopped = new SdlMixer.MusicFinishedDelegate(OnMusicEnded); SdlMixer.Mix_HookMusicFinished(musicStopped); channelStopped = new SdlMixer.ChannelFinishedDelegate(OnChannelEnded); SdlMixer.Mix_ChannelFinished(channelStopped); }
public static void Mix_HookMusicFinished(SdlMixer.MusicFinishedDelegate music_finished);
/// <summary> /// Sets up the SDL audio system for use by the application. /// </summary> public static void Startup() { // Don't reopen it if (isStarted) return; // Set up the SDL sound SdlMixer.Mix_OpenAudio( SdlMixer.MIX_DEFAULT_FREQUENCY, (short) SdlMixer.MIX_DEFAULT_FORMAT, 2, 1024); // Allocate channels SdlMixer.Mix_AllocateChannels(Constants.MaximumSoundChunks); // Default volumnes int vol = 75; SdlMixer.Mix_VolumeMusic(vol); // Hook up the events musicStopped = new SdlMixer.MusicFinishedDelegate(OnMusicEnded); SdlMixer.Mix_HookMusicFinished(musicStopped); channelStopped = new SdlMixer.ChannelFinishedDelegate(OnChannelEnded); SdlMixer.Mix_ChannelFinished(channelStopped); // Set up our basic sound isStarted = true; }
/// <summary> /// /// </summary> public void Run() { int flags = (Sdl.SDL_HWSURFACE | Sdl.SDL_DOUBLEBUF | Sdl.SDL_ANYFORMAT); int bpp = 16; int width = 640; int height = 480; bool quitFlag = false; Random rand = new Random(); string filepath = @"../../"; if (File.Exists("Data/SdlExamples.Rectangles.sound.ogg")) { filepath = ""; } string musicFile = filepath + "Data/SdlExamples.Rectangles.sound.ogg"; Sdl.SDL_Event evt; try { Sdl.SDL_Init(Sdl.SDL_INIT_EVERYTHING); Sdl.SDL_WM_SetCaption("Tao.Sdl Example - Rectangles", ""); IntPtr surfacePtr = Sdl.SDL_SetVideoMode( width, height, bpp, flags); int result = SdlMixer.Mix_OpenAudio( SdlMixer.MIX_DEFAULT_FREQUENCY, (short)SdlMixer.MIX_DEFAULT_FORMAT, 2, 1024); IntPtr chunkPtr = SdlMixer.Mix_LoadMUS(musicFile); SdlMixer.MusicFinishedDelegate musicStopped = new SdlMixer.MusicFinishedDelegate(this.musicHasStopped); SdlMixer.Mix_HookMusicFinished(musicStopped); result = SdlMixer.Mix_PlayMusic(chunkPtr, 1); if (result == -1) { Console.WriteLine("Music Error: " + Sdl.SDL_GetError()); } int rmask = 0x00000000; int gmask = 0x00ff0000; int bmask = 0x0000ff00; int amask = 0x000000ff; IntPtr rgbSurfacePtr = Sdl.SDL_CreateRGBSurface( flags, width, height, bpp, rmask, gmask, bmask, amask); Sdl.SDL_Rect rect = new Sdl.SDL_Rect( 0, 0, (short)width, (short)height); result = Sdl.SDL_FillRect(rgbSurfacePtr, ref rect, 0); Sdl.SDL_Rect rect2; IntPtr videoInfoPointer = Sdl.SDL_GetVideoInfo(); if (videoInfoPointer == IntPtr.Zero) { throw new ApplicationException(string.Format("Video query failed: {0}", Sdl.SDL_GetError())); } Sdl.SDL_VideoInfo videoInfo = (Sdl.SDL_VideoInfo) Marshal.PtrToStructure(videoInfoPointer, typeof(Sdl.SDL_VideoInfo)); Console.WriteLine("Hi There"); Sdl.SDL_PixelFormat pixelFormat = (Sdl.SDL_PixelFormat) Marshal.PtrToStructure(videoInfo.vfmt, typeof(Sdl.SDL_PixelFormat)); Console.WriteLine(videoInfo.hw_available); Console.WriteLine(videoInfo.wm_available); Console.WriteLine(videoInfo.blit_hw); Console.WriteLine(videoInfo.blit_hw_CC); Console.WriteLine(videoInfo.blit_hw_A); Console.WriteLine(videoInfo.blit_sw); Console.WriteLine(videoInfo.blit_hw_CC); Console.WriteLine(videoInfo.blit_hw_A); Console.WriteLine(videoInfo.blit_fill); Console.WriteLine(videoInfo.video_mem); Console.WriteLine(pixelFormat.BitsPerPixel); Console.WriteLine(pixelFormat.BytesPerPixel); Console.WriteLine(pixelFormat.Rmask); Console.WriteLine(pixelFormat.Gmask); Console.WriteLine(pixelFormat.Bmask); Console.WriteLine(pixelFormat.Amask); int numevents = 10; Sdl.SDL_Event[] events = new Sdl.SDL_Event[numevents]; events[0].type = Sdl.SDL_KEYDOWN; events[0].key.keysym.sym = (int)Sdl.SDLK_p; events[1].type = Sdl.SDL_KEYDOWN; events[1].key.keysym.sym = (int)Sdl.SDLK_z; int result2 = Sdl.SDL_PeepEvents(events, numevents, Sdl.SDL_ADDEVENT, Sdl.SDL_KEYDOWNMASK); Console.WriteLine("Addevent result: " + result2); while (quitFlag == false) { result = Sdl.SDL_PollEvent(out evt); if (evt.type == Sdl.SDL_QUIT) { quitFlag = true; } else if (evt.type == Sdl.SDL_KEYDOWN) { if ((evt.key.keysym.sym == (int)Sdl.SDLK_ESCAPE) || (evt.key.keysym.sym == (int)Sdl.SDLK_q)) { quitFlag = true; } if (evt.key.keysym.sym == (int)Sdl.SDLK_p) { Console.WriteLine("Key p event was added"); } if (evt.key.keysym.sym == (int)Sdl.SDLK_z) { Console.WriteLine("Key z event was added"); } } rect2 = new Sdl.SDL_Rect( (short)rand.Next(-300, width), (short)rand.Next(-300, height), (short)rand.Next(20, 300), (short)rand.Next(20, 300)); try { result = Sdl.SDL_FillRect( surfacePtr, ref rect2, rand.Next(100000)); result = Sdl.SDL_BlitSurface( rgbSurfacePtr, ref rect2, surfacePtr, ref rect); result = Sdl.SDL_Flip(surfacePtr); } catch (Exception) {} } } catch { Sdl.SDL_Quit(); throw; } }