␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private Game Loop Sentinel␊ |
␊ |
␉␉private bool INTERNAL_runApplication;␊ |
␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private Active XNA Key List␊ |
␊ |
␉␉private List<Keys> keys;␊ |
␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private Text Input Variables␊ |
␊ |
␉␉private int[] INTERNAL_TextInputControlRepeat;␊ |
␉␉private bool[] INTERNAL_TextInputControlDown;␊ |
␉␉private bool INTERNAL_TextInputSuppress;␊ |
␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private DisplayMode Variables␊ |
␊ |
␉␉private int displayIndex = 0;␊ |
|
␉␉␉{␊ |
␉␉␉␉INTERNAL_useFullscreenSpaces = false;␊ |
␉␉␉}␊ |
␊ |
␉␉␉// Initialize Active Key List␊ |
␉␉␉keys = new List<Keys>();␊ |
␊ |
␉␉␉/* Setup Text Input Control Character Arrays␊ |
␉␉␉ * (Only 4 control keys supported at this time)␊ |
␉␉␉ */␊ |
␉␉␉INTERNAL_TextInputControlDown = new bool[4];␊ |
␉␉␉INTERNAL_TextInputControlRepeat = new int[4];␊ |
␊ |
␉␉␉// Ready to run the loop!␊ |
␉␉␉INTERNAL_runApplication = true;␊ |
␉␉}␊ |
␊ |
␉␉#endregion␊ |
|
␉␉{␊ |
␉␉␉SDL.SDL_ShowWindow(Game.Window.Handle);␊ |
␊ |
␉␉␉// Active Key List␊ |
␉␉␉List<Keys> keys = new List<Keys>();␊ |
␊ |
␉␉␉/* Setup Text Input Control Character Arrays␊ |
␉␉␉ * (Only 4 control keys supported at this time)␊ |
␉␉␉ */␊ |
␉␉␉bool[] INTERNAL_TextInputControlDown = new bool[4];␊ |
␉␉␉int[] INTERNAL_TextInputControlRepeat = new int[4];␊ |
␉␉␉bool INTERNAL_TextInputSuppress = false;␊ |
␊ |
␉␉␉SDL.SDL_Event evt;␊ |
␊ |
␉␉␉while (INTERNAL_runApplication)␊ |
␉␉␉while (Game.RunApplication)␊ |
␉␉␉{␊ |
␉␉␉␉while (SDL.SDL_PollEvent(out evt) == 1)␊ |
␉␉␉␉{␊ |
|
␉␉␉␉␉␉if (!keys.Contains(key))␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉keys.Add(key);␊ |
␉␉␉␉␉␉␉INTERNAL_TextInputIn(key);␊ |
␉␉␉␉␉␉␉if (key == Keys.Back)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[0] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[0] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 8); // Backspace␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[1] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[1] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 9); // Tab␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[2] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[2] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 13); // Enter␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (keys.Contains(Keys.LeftControl) && key == Keys.V)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[3] = true;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlRepeat[3] = Environment.TickCount + 400;␊ |
␉␉␉␉␉␉␉␉TextInputEXT.OnTextInput((char) 22); // Control-V (Paste)␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputSuppress = true;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉}␊ |
␉␉␉␉␉}␊ |
␉␉␉␉␉else if (evt.type == SDL.SDL_EventType.SDL_KEYUP)␊ |
|
#endif␊ |
␉␉␉␉␉␉if (keys.Remove(key))␊ |
␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉INTERNAL_TextInputOut(key);␊ |
␉␉␉␉␉␉␉if (key == Keys.Back)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[0] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[1] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[2] = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉␉else if ((!keys.Contains(Keys.LeftControl) && INTERNAL_TextInputControlDown[3]) || key == Keys.V)␊ |
␉␉␉␉␉␉␉{␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputControlDown[3] = false;␊ |
␉␉␉␉␉␉␉␉INTERNAL_TextInputSuppress = false;␊ |
␉␉␉␉␉␉␉}␊ |
␉␉␉␉␉␉}␊ |
␉␉␉␉␉}␊ |
␊ |
|
␉␉␉␉␉// Quit␊ |
␉␉␉␉␉else if (evt.type == SDL.SDL_EventType.SDL_QUIT)␊ |
␉␉␉␉␉{␊ |
␉␉␉␉␉␉INTERNAL_runApplication = false;␊ |
␉␉␉␉␉␉Game.RunApplication = false;␊ |
␉␉␉␉␉␉break;␊ |
␉␉␉␉␉}␊ |
␉␉␉␉}␊ |
␉␉␉␉// Text Input Controls Key Handling␊ |
␉␉␉␉INTERNAL_TextInputUpdate();␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[0] && INTERNAL_TextInputControlRepeat[0] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 8);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[1] && INTERNAL_TextInputControlRepeat[1] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 9);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[2] && INTERNAL_TextInputControlRepeat[2] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 13);␊ |
␉␉␉␉}␊ |
␉␉␉␉if (INTERNAL_TextInputControlDown[3] && INTERNAL_TextInputControlRepeat[3] <= Environment.TickCount)␊ |
␉␉␉␉{␊ |
␉␉␉␉␉TextInputEXT.OnTextInput((char) 22);␊ |
␉␉␉␉}␊ |
␊ |
␉␉␉␉Keyboard.SetKeys(keys);␊ |
␉␉␉␉Game.Tick();␊ |
|
␉␉␉Game.Exit();␊ |
␉␉}␊ |
␊ |
␉␉public override void Exit()␊ |
␉␉{␊ |
␉␉␉// Stop the game loop␊ |
␉␉␉INTERNAL_runApplication = false;␊ |
␉␉}␊ |
␊ |
␉␉public override void BeforeInitialize()␊ |
␉␉{␊ |
␉␉␉// We want to initialize the controllers ASAP!␊ |
|
␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private TextInput Methods␊ |
␊ |
␉␉private void INTERNAL_TextInputIn(Keys key)␊ |
␉␉{␊ |
␉␉␉if (key == Keys.Back)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[0] = true;␊ |
␉␉␉␉INTERNAL_TextInputControlRepeat[0] = Environment.TickCount + 400;␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 8); // Backspace␊ |
␉␉␉}␊ |
␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[1] = true;␊ |
␉␉␉␉INTERNAL_TextInputControlRepeat[1] = Environment.TickCount + 400;␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 9); // Tab␊ |
␉␉␉}␊ |
␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[2] = true;␊ |
␉␉␉␉INTERNAL_TextInputControlRepeat[2] = Environment.TickCount + 400;␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 13); // Enter␊ |
␉␉␉}␊ |
␉␉␉else if (keys.Contains(Keys.LeftControl) && key == Keys.V)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[3] = true;␊ |
␉␉␉␉INTERNAL_TextInputControlRepeat[3] = Environment.TickCount + 400;␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 22); // Control-V (Paste)␊ |
␉␉␉␉INTERNAL_TextInputSuppress = true;␊ |
␉␉␉}␊ |
␉␉}␊ |
␊ |
␉␉private void INTERNAL_TextInputOut(Keys key)␊ |
␉␉{␊ |
␉␉␉if (key == Keys.Back)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[0] = false;␊ |
␉␉␉}␊ |
␉␉␉else if (key == Keys.Tab)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[1] = false;␊ |
␉␉␉}␊ |
␉␉␉else if (key == Keys.Enter)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[2] = false;␊ |
␉␉␉}␊ |
␉␉␉else if ((!keys.Contains(Keys.LeftControl) && INTERNAL_TextInputControlDown[3]) || key == Keys.V)␊ |
␉␉␉{␊ |
␉␉␉␉INTERNAL_TextInputControlDown[3] = false;␊ |
␉␉␉␉INTERNAL_TextInputSuppress = false;␊ |
␉␉␉}␊ |
␉␉}␊ |
␊ |
␉␉private void INTERNAL_TextInputUpdate()␊ |
␉␉{␊ |
␉␉␉if (INTERNAL_TextInputControlDown[0] && INTERNAL_TextInputControlRepeat[0] <= Environment.TickCount)␊ |
␉␉␉{␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 8);␊ |
␉␉␉}␊ |
␉␉␉if (INTERNAL_TextInputControlDown[1] && INTERNAL_TextInputControlRepeat[1] <= Environment.TickCount)␊ |
␉␉␉{␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 9);␊ |
␉␉␉}␊ |
␉␉␉if (INTERNAL_TextInputControlDown[2] && INTERNAL_TextInputControlRepeat[2] <= Environment.TickCount)␊ |
␉␉␉{␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 13);␊ |
␉␉␉}␊ |
␉␉␉if (INTERNAL_TextInputControlDown[3] && INTERNAL_TextInputControlRepeat[3] <= Environment.TickCount)␊ |
␉␉␉{␊ |
␉␉␉␉TextInputEXT.OnTextInput((char) 22);␊ |
␉␉␉}␊ |
␉␉}␊ |
␊ |
␉␉#endregion␊ |
␊ |
␉␉#region Private Static SDL_Surface Interop␊ |
␊ |
␉␉[StructLayout(LayoutKind.Sequential)]␊ |