Exemple #1
0
        /// <summary>
        /// loadChunkで読み込んだサウンドをfadeさせる
        /// </summary>
        /// <param name="speed"></param>
        /// <returns></returns>
        private YanesdkResult PlayChunkFade(int speed)
        {
            CacheSystem.OnAccess(this);
            isPlayingLast = true;

            if (NoSound)
            {
                return(YanesdkResult.PreconditionError);
            }
            int ch =
                (chunkChannel == 0) ?
                // おまかせchunkでの再生ならば空きチャンクを探す
                ch = ChunkManager.GetEmptyChunk(this)
                                :
                     ch = chunkChannel - 1;

            // チャンネルの占拠を明示
            ChunkManager.chunk[ch] = this;
            //	↑このチャンクが使用中であることはここで予約が入る

            // volumeの設定(これは再生時に設定する)
            ChunkManager.SetVolume(ch + 1, Volume);

            return(SDL.Mix_FadeInChannel(ch, chunk, loopflag, speed) == ch ?
                   YanesdkResult.NoError : YanesdkResult.SdlError);
        }
Exemple #2
0
        ///	<summary>サーフェースに文字列を描画します。</summary>
        /// <remarks>
        ///	サーフェースをnewしたくないときは、こちらを使うよろし。
        /// </remarks>
        public void DrawSolidUnicode(Surface surface, string str)
        {
            CacheSystem.OnAccess(this);
            if (font != IntPtr.Zero)
            {
                SDL.TTF_SetFontStyle(font, style);
                IntPtr image = SDL.TTF_RenderUNICODE_Solid(font, str, color);
                RateCheck(ref image);

                /*
                 * // debug目的でsurfaceの種類を調べるためのコード
                 * unsafe
                 * {
                 *      SDL.SDL_PixelFormat* format = (SDL.SDL_PixelFormat*)((SDL.SDL_Surface*)image)->format;
                 *      int alpha = format->alpha;
                 * }
                 * // 8bppのsurfaceが戻ってきているな…
                 */

                // ここで取得されるsurfaceは転送元color keyを設定されているので
                // これを設定するとalphaつきのsurfaceになってしまうのだが…(´ω`)
                // どうしたもんかの…。

                surface.SDL_Surface = image;                 // .setSurface(image);
            }
            else
            {
                surface.SDL_Surface = IntPtr.Zero;                 // setSurface(IntPtr.Zero);
            }
        }
Exemple #3
0
        /// <summary>
        /// Pauseで停止させていたならば、
        /// それを前回停止させていた再生ポジションから再開する。
        /// </summary>
        /// <returns></returns>
        public YanesdkResult Resume()
        {
            CacheSystem.OnAccess(this);
            isPlayingLast = true;

            if (NoSound)
            {
                return(YanesdkResult.NoError);
            }
            return(ChunkManager.Resume(this));
        }
Exemple #4
0
        /// <summary>
        ///	play中のサウンドを停止させる
        /// </summary>
        ///	読み込んでいるサウンドデータ自体を解放するには release を
        ///	呼び出すこと。こちらは、あくまで停止させるだけ。次にplayが
        ///	呼び出されれば、再度、先頭から再生させることが出来る。
        /// <returns></returns>
        public YanesdkResult Stop()
        {
            CacheSystem.OnAccess(this);
            isPlayingLast = false;

            //	stopは、channelごとに管理されているので、
            //	自分が再生しているchannelなのかどうかを
            //	このクラスが把握している必要がある
            if (NoSound)
            {
                return(YanesdkResult.NoError);
            }
            return(ChunkManager.Stop(this));
        }
Exemple #5
0
 ///	<summary>サーフェースに文字列を描画します。</summary>
 /// <remarks>
 ///	サーフェースをnewしたくないときは、こちらを使うよろし。
 /// </remarks>
 public void DrawBlended(Surface surface, string str)
 {
     CacheSystem.OnAccess(this);
     if (font != IntPtr.Zero)
     {
         SDL.TTF_SetFontStyle(font, style);
         IntPtr image = SDL.TTF_RenderText_Blended(font, str, color);
         RateCheck(ref image);
         surface.SDL_Surface = image;                 //  setSurface(image);
     }
     else
     {
         surface.SDL_Surface = IntPtr.Zero;                 //  setSurface(IntPtr.Zero);
     }
 }
Exemple #6
0
        /// <summary>
        /// テクスチャーを貼り付けるときに使う
        /// </summary>
        /// <remarks>
        /// この関数を呼び出したあと、
        /// <code>
        ///		glBegin(GL_POLYGON);
        ///			glTexCoord2f(0 , 0); glVertex2f(-0.9 , -0.9);
        ///			glTexCoord2f(0 , 1); glVertex2f(-0.9 , 0.9);
        ///			glTexCoord2f(1 , 1); glVertex2f(0.9 , 0.9);
        ///			glTexCoord2f(1 , 0); glVertex2f(0.9 , -0.9);
        ///		glEnd();
        ///	</code>
        ///	のようにすれば、テクスチャーをポリゴンにはりつけることが出来ます。
        ///
        /// ※ OpenGLのコードが混在するのが嫌なら使わないで。
        ///	</remarks>
        public void Bind()
        {
            // bindのタイミングでcache systemにこのテクスチャを使用したことを通知する
            CacheSystem.OnAccess(this);

            if (loaded)
            {
                if (textureType == Gl.GL_TEXTURE_RECTANGLE_ARB)
                {
                    Gl.glEnable(Gl.GL_TEXTURE_RECTANGLE_ARB);
                }

                Gl.glBindTexture(textureType, textureName);
            }
        }
Exemple #7
0
        unsafe private void DrawSolidUTF8_(Surface surface, byte[] str)
        {
            CacheSystem.OnAccess(this);

            if (font != IntPtr.Zero && str.Length > 0)
            {
                SDL.TTF_SetFontStyle(font, style);
                Array.Resize(ref str, str.Length + 1);                 // C文字列用の終端の '\0' を追加。
                IntPtr image = SDL.TTF_RenderUTF8_Solid(font, str, color);
                RateCheck(ref image);
                surface.SDL_Surface = image;                 //  setSurface(image);
            }
            else
            {
                surface.SDL_Surface = IntPtr.Zero;                 // setSurface(IntPtr.Zero);
            }
        }
Exemple #8
0
        /// <summary>
        /// loadMusicで読み込んだBGMをfadeさせる
        /// </summary>
        private YanesdkResult PlayMusicFade(int speed)
        {
            CacheSystem.OnAccess(this);
            isPlayingLast = true;

            if (NoSound)
            {
                return(YanesdkResult.PreconditionError);
            }
            ChunkManager.music = this;             // チャンネルの占拠を明示

            // volumeの設定(これは再生時に設定する)
            ChunkManager.SetVolume(0, Volume);

            return(SDL.Mix_FadeInMusic(music, loopflag, speed) == 0 ?
                   YanesdkResult.NoError : YanesdkResult.SdlError);
        }
Exemple #9
0
        /// <summary>
        /// フェードイン付きのplay。speedはfade inに必要な時間[ms]
        /// </summary>
        /// <param name="speed"></param>
        /// <returns></returns>
        public YanesdkResult PlayFade(int speed)
        {
            CacheSystem.OnAccess(this);
            isPlayingLast = true;

            if (NoSound)
            {
                return(YanesdkResult.NoError);
            }
            Stop();             // 停止させて、sound managerの再生チャンネルをクリアしなければ
            if (music != IntPtr.Zero)
            {
                return(PlayMusicFade(speed));
            }
            if (chunk != IntPtr.Zero)
            {
                return(PlayChunkFade(speed));
            }
            return(YanesdkResult.PreconditionError);            // Sound読み込んでないぽ
        }
Exemple #10
0
        /// <summary>
        /// loadで読み込んだサウンドを再生する
        /// </summary>
        /// <returns>
        /// 再生エラーならばYanesdkResult.no_error以外が返る
        /// </returns>
        public YanesdkResult Play()
        {
            // cache systemにこのSoundを使用したことを通知する
            CacheSystem.OnAccess(this);
            isPlayingLast = true;

            if (NoSound)
            {
                return(YanesdkResult.NoError);
            }
            Stop();             // 停止させて、sound managerの再生チャンネルをクリアしなければ
            if (music != IntPtr.Zero)
            {
                return(PlayMusic());
            }
            if (chunk != IntPtr.Zero)
            {
                return(PlayChunk());
            }
            return(YanesdkResult.PreconditionError);            // Sound読み込んでないぽ
        }
Exemple #11
0
        ///	<summary>サーフェースに文字列を描画します。</summary>
        /// <remarks>
        ///	サーフェースをnewしたくないときは、こちらを使うよろし。
        /// </remarks>
        public void     DrawBlendedUnicode(Surface surface, string str)
        {
            CacheSystem.OnAccess(this);
            if (font != IntPtr.Zero)
            {
                SDL.TTF_SetFontStyle(font, style);
                IntPtr image = SDL.TTF_RenderUNICODE_Blended(font, str, color);
                RateCheck(ref image);

                // debug目的でsurfaceの種類を調べるためのコード
                unsafe
                {
                    SDL.SDL_PixelFormat *format = (SDL.SDL_PixelFormat *)((SDL.SDL_Surface *)image)->format;
                    int alpha = format->alpha;
                }

                surface.SDL_Surface = image;                 // setSurface(image);
            }
            else
            {
                surface.SDL_Surface = IntPtr.Zero;                 // setSurface(IntPtr.Zero);
            }
        }