コード例 #1
0
 public CartConsoleInput(char Chr, KeyCode Key, bool Ctrl = false, bool Shift = false, bool Alt = false)
 {
     this.Chr = Chr;
     this.Key = Key;
     this.Ctrl = Ctrl;
     this.Alt = Alt;
     this.Shift = Shift;
 }
コード例 #2
0
ファイル: CartConsole.cs プロジェクト: Tamschi/FacePuncher
        private static unsafe void Main()
        {
            if (SDL.SDL_Init(SDL.SDL_INIT_VIDEO) != 0)
                throw new Exception(SDL.SDL_GetError());
            if (SDLi.IMG_Init(SDLi.IMG_InitFlags.IMG_INIT_PNG) == 0)
                throw new Exception(SDL.SDL_GetError());

            CreateSDL();

            Open = true;
            Initialized = true;
            bool Changed = false;

            SWatch.Start();

            while (Open) {
                while (SDL.SDL_PollEvent(out Event) != 0) {
                    switch (Event.type) {
                        case SDL.SDL_EventType.SDL_QUIT:
                            Open = false;
                            break;
                        case SDL.SDL_EventType.SDL_TEXTINPUT:
                            fixed (byte* T = Event.text.text) {
                                char Chr = (char)T[0];
                                InputQueue.Enqueue(new CartConsoleInput(Chr, KC, Ctrl, Shift, Alt));
                            }
                            break;

                        case SDL.SDL_EventType.SDL_KEYDOWN: {
                                KeyCode KC = Event.key.keysym.sym;

                                if ((KC == KeyCode.SDLK_LCTRL) || (KC == KeyCode.SDLK_RCTRL))
                                    Ctrl = true;
                                if ((KC == KeyCode.SDLK_LALT) || (KC == SDL.SDL_Keycode.SDLK_RALT))
                                    Alt = true;
                                if ((KC == KeyCode.SDLK_LSHIFT) || (KC == KeyCode.SDLK_RSHIFT))
                                    Shift = true;

                                CartConsole.KC = KC;

                                switch (KC) {
                                    case KeyCode.SDLK_UP:
                                    case KeyCode.SDLK_DOWN:
                                    case KeyCode.SDLK_LEFT:
                                    case KeyCode.SDLK_RIGHT:
                                    case KeyCode.SDLK_RETURN:
                                    case KeyCode.SDLK_RETURN2:
                                    case KeyCode.SDLK_BACKSPACE:
                                        InputQueue.Enqueue(new CartConsoleInput('\n', KC, Ctrl, Shift, Alt));
                                        break;
                                    default:
                                        break;
                                }
                                break;
                            }

                        case SDL.SDL_EventType.SDL_KEYUP: {
                                KeyCode KC = Event.key.keysym.sym;
                                if ((KC == KeyCode.SDLK_LCTRL) || (KC == KeyCode.SDLK_RCTRL))
                                    Ctrl = false;
                                if ((KC == KeyCode.SDLK_LALT) || (KC == KeyCode.SDLK_RALT))
                                    Alt = false;
                                if ((KC == KeyCode.SDLK_LSHIFT) || (KC == KeyCode.SDLK_RSHIFT))
                                    Shift = false;
                                break;
                            }

                        default:
                            break;

                    }
                }

                if (ReloadSDL) {
                    ReloadSDL = false;
                    CreateSDL();
                }

                SDL.SDL_SetRenderDrawBlendMode(Rend, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
                byte CurChar = 0;

                if (DoRefresh) {
                    DoRefresh = Changed = false;

                    for (int i = 0; i < TEXT.Length; i++) {
                        if (!DIRTY[i])
                            continue;
                        DIRTY[i] = false;
                        Changed = true;

                        POS.x = (i % W) * CharW;
                        POS.y = (i / W) * CharH;
                        CurChar = (byte)TEXT[i];
                        TEXPOS.x = (CurChar % CharCountX) * CharW;
                        TEXPOS.y = (CurChar / CharCountY) * CharH;

                        fixed (void* TP = &TEXPOS, P = &POS) {
                            SDL.SDL_SetRenderDrawColor(Rend, BACK_C[i].r, BACK_C[i].g, BACK_C[i].b, BACK_C[i].a);
                            SDL.SDL_RenderFillRect(Rend, ref POS);

                            SDL.SDL_SetTextureColorMod(FontTex, FORE_C[i].r, FORE_C[i].g, FORE_C[i].b);
                            SDL.SDL_SetTextureAlphaMod(FontTex, FORE_C[i].a);
                            SDL.SDL_RenderCopy(Rend, FontTex, new IntPtr(TP), new IntPtr(P));
                        }
                    }

                    if (Changed)
                        SDL.SDL_RenderPresent(Rend);
                }

                SDL.SDL_Delay(10);

                SWatch.Stop();
                FrameTime = SWatch.ElapsedMilliseconds;
                SWatch.Restart();

                if (FontDirty) {
                    FontDirty = false;
                    SetFont(CartConsole.FontPath, CharCountX, CharCountY);
                }
            }

            SDL.SDL_DestroyRenderer(Rend);
            SDL.SDL_DestroyWindow(Wind);
            Environment.Exit(0);
        }