proper keydown/keyup handlers
This commit is contained in:
@@ -484,40 +484,42 @@ namespace OpenRA
|
|||||||
get { return LobbyInfo.Clients.FirstOrDefault(c => c.Index == orderManager.Connection.LocalClientId); }
|
get { return LobbyInfo.Clients.FirstOrDefault(c => c.Index == orderManager.Connection.LocalClientId); }
|
||||||
}
|
}
|
||||||
|
|
||||||
static Dictionary<char, char> RemapKeys = new Dictionary<char, char>
|
public static void HandleKeyDown(KeyInput e)
|
||||||
{
|
|
||||||
{ '!', '1' },
|
|
||||||
{ '@', '2' },
|
|
||||||
{ '#', '3' },
|
|
||||||
{ '$', '4' },
|
|
||||||
{ '%', '5' },
|
|
||||||
{ '^', '6' },
|
|
||||||
{ '&', '7' },
|
|
||||||
{ '*', '8' },
|
|
||||||
{ '(', '9' },
|
|
||||||
{ ')', '0' },
|
|
||||||
};
|
|
||||||
|
|
||||||
public static void HandleKeyPress(KeyInput e)
|
|
||||||
{
|
{
|
||||||
int sync = world.SyncHash();
|
int sync = world.SyncHash();
|
||||||
|
|
||||||
if (chrome.HandleKeyPress(e))
|
if (chrome.HandleKeyPress(e))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var c = RemapKeys.ContainsKey(e.KeyChar) ? RemapKeys[e.KeyChar] : e.KeyChar;
|
switch (e.KeyName)
|
||||||
|
{
|
||||||
|
case "up": scrollUp = true; break;
|
||||||
|
case "down": scrollDown = true; break;
|
||||||
|
case "left": scrollLeft = true; break;
|
||||||
|
case "right": scrollRight = true; break;
|
||||||
|
}
|
||||||
|
|
||||||
if (c >= '0' && c <= '9')
|
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
||||||
Game.controller.selection.DoControlGroup(world,
|
Game.controller.selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers);
|
||||||
c - '0', e.Modifiers);
|
|
||||||
|
|
||||||
if (c == 08)
|
if (e.KeyChar == 08)
|
||||||
Game.controller.GotoNextBase();
|
Game.controller.GotoNextBase();
|
||||||
|
|
||||||
if (sync != Game.world.SyncHash())
|
if (sync != Game.world.SyncHash())
|
||||||
throw new InvalidOperationException("Desync in OnKeyPress");
|
throw new InvalidOperationException("Desync in OnKeyPress");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void HandleKeyUp(KeyInput e)
|
||||||
|
{
|
||||||
|
switch (e.KeyName)
|
||||||
|
{
|
||||||
|
case "up": scrollUp = false; break;
|
||||||
|
case "down": scrollDown = false; break;
|
||||||
|
case "left": scrollLeft = false; break;
|
||||||
|
case "right": scrollRight = false; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void HandleArrowKeyScroll(String k, Boolean pressed)
|
public static void HandleArrowKeyScroll(String k, Boolean pressed)
|
||||||
{
|
{
|
||||||
if (k == "up")
|
if (k == "up")
|
||||||
|
|||||||
@@ -225,28 +225,29 @@ namespace OpenRA.GlRenderer
|
|||||||
|
|
||||||
case Sdl.SDL_KEYDOWN:
|
case Sdl.SDL_KEYDOWN:
|
||||||
{
|
{
|
||||||
bool handled = true;
|
|
||||||
|
|
||||||
var keyEvent = new KeyInput
|
var keyEvent = new KeyInput
|
||||||
{
|
{
|
||||||
Modifiers = mods,
|
Modifiers = mods,
|
||||||
KeyChar = (char) e.key.keysym.unicode,
|
KeyChar = (char) e.key.keysym.unicode,
|
||||||
KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym )
|
KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ),
|
||||||
|
VirtKey = e.key.keysym.sym
|
||||||
};
|
};
|
||||||
|
|
||||||
if (!HandleSpecialKey(keyEvent))
|
if (!HandleSpecialKey(keyEvent))
|
||||||
Game.HandleKeyPress(keyEvent);
|
Game.HandleKeyDown(keyEvent);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Sdl.SDL_KEYUP:
|
case Sdl.SDL_KEYUP:
|
||||||
{
|
{
|
||||||
switch (e.key.keysym.sym)
|
var keyEvent = new KeyInput
|
||||||
{
|
{
|
||||||
case Sdl.SDLK_UP: Game.HandleArrowKeyScroll("up", false); break;
|
Modifiers = mods,
|
||||||
case Sdl.SDLK_LEFT: Game.HandleArrowKeyScroll("left", false); break;
|
KeyChar = (char) e.key.keysym.unicode,
|
||||||
case Sdl.SDLK_DOWN: Game.HandleArrowKeyScroll("down", false); break;
|
KeyName = Sdl.SDL_GetKeyName( e.key.keysym.sym ),
|
||||||
case Sdl.SDLK_RIGHT: Game.HandleArrowKeyScroll("right", false); break;
|
VirtKey = e.key.keysym.sym
|
||||||
}
|
};
|
||||||
|
|
||||||
|
Game.HandleKeyUp(keyEvent);
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user