@@ -125,7 +125,8 @@ namespace OpenRA.GameRules
|
|||||||
public string PauseKey = "f3";
|
public string PauseKey = "f3";
|
||||||
|
|
||||||
public string CycleBaseKey = "backspace";
|
public string CycleBaseKey = "backspace";
|
||||||
public string GotoLastEventKey = "space";
|
public string ToLastEventKey = "space";
|
||||||
|
public string ToSelectionKey = "home";
|
||||||
public string SellKey = "v";
|
public string SellKey = "v";
|
||||||
public string PowerDownKey = "b";
|
public string PowerDownKey = "b";
|
||||||
public string RepairKey = "n";
|
public string RepairKey = "n";
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
* available to you under the terms of the GNU General Public License
|
* available to you under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation. For more information,
|
* as published by the Free Software Foundation. For more information,
|
||||||
@@ -64,7 +64,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
|
Cache<int, List<Actor>> controlGroups = new Cache<int, List<Actor>>(_ => new List<Actor>());
|
||||||
|
|
||||||
public void DoControlGroup(World world, int group, Modifiers mods)
|
public void DoControlGroup(World world, int group, Modifiers mods, int MultiTapCount)
|
||||||
{
|
{
|
||||||
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
|
var addModifier = Platform.CurrentPlatform == PlatformType.OSX ? Modifiers.Meta : Modifiers.Ctrl;
|
||||||
if (mods.HasModifier(addModifier))
|
if (mods.HasModifier(addModifier))
|
||||||
@@ -82,7 +82,7 @@ namespace OpenRA
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mods.HasModifier(Modifiers.Alt))
|
if (mods.HasModifier(Modifiers.Alt) || MultiTapCount >= 2)
|
||||||
{
|
{
|
||||||
Game.viewport.Center(controlGroups[group]);
|
Game.viewport.Center(controlGroups[group]);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -171,10 +171,10 @@ namespace OpenRA.Widgets
|
|||||||
{
|
{
|
||||||
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
if (e.KeyName.Length == 1 && char.IsDigit(e.KeyName[0]))
|
||||||
{
|
{
|
||||||
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers);
|
world.Selection.DoControlGroup(world, e.KeyName[0] - '0', e.Modifiers, e.MultiTapCount);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (e.KeyName == "pause" || e.KeyName == "f3")
|
else if (e.KeyName == Game.Settings.Keys.PauseKey)
|
||||||
{
|
{
|
||||||
world.IssueOrder(Order.PauseRequest());
|
world.IssueOrder(Order.PauseRequest());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,9 +137,13 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
specialHotkeyList.AddChild(viewportToBase);
|
specialHotkeyList.AddChild(viewportToBase);
|
||||||
|
|
||||||
var lastEventKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
var lastEventKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||||
SetupKeyBinding(lastEventKey, "Move Viewport to Last Event:", () => keyConfig.GotoLastEventKey, k => keyConfig.GotoLastEventKey = k);
|
SetupKeyBinding(lastEventKey, "Move Viewport to Last Event:", () => keyConfig.ToLastEventKey, k => keyConfig.ToLastEventKey = k);
|
||||||
specialHotkeyList.AddChild(lastEventKey);
|
specialHotkeyList.AddChild(lastEventKey);
|
||||||
|
|
||||||
|
var viewportToSelectionKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||||
|
SetupKeyBinding(viewportToSelectionKey, "Move Viewport to Selection:", () => keyConfig.ToSelectionKey, k => keyConfig.ToSelectionKey = k);
|
||||||
|
specialHotkeyList.AddChild(viewportToSelectionKey);
|
||||||
|
|
||||||
var sellKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
var sellKey = ScrollItemWidget.Setup(specialHotkeyTemplate, () => false, () => {});
|
||||||
SetupKeyBinding(sellKey, "Switch to Sell-Cursor:", () => keyConfig.SellKey, k => keyConfig.SellKey = k);
|
SetupKeyBinding(sellKey, "Switch to Sell-Cursor:", () => keyConfig.SellKey, k => keyConfig.SellKey = k);
|
||||||
specialHotkeyList.AddChild(sellKey);
|
specialHotkeyList.AddChild(sellKey);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
* available to you under the terms of the GNU General Public License
|
* available to you under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation. For more information,
|
* as published by the Free Software Foundation. For more information,
|
||||||
@@ -47,8 +47,11 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
if (e.KeyName == Game.Settings.Keys.CycleBaseKey)
|
if (e.KeyName == Game.Settings.Keys.CycleBaseKey)
|
||||||
return CycleBases();
|
return CycleBases();
|
||||||
|
|
||||||
if (e.KeyName == Game.Settings.Keys.GotoLastEventKey)
|
if (e.KeyName == Game.Settings.Keys.ToLastEventKey)
|
||||||
return GotoLastEvent();
|
return ToLastEvent();
|
||||||
|
|
||||||
|
if (e.KeyName == Game.Settings.Keys.ToSelectionKey)
|
||||||
|
return ToSelection();
|
||||||
|
|
||||||
if (e.KeyName == Game.Settings.Keys.SellKey)
|
if (e.KeyName == Game.Settings.Keys.SellKey)
|
||||||
return PerformSwitchToSellMode();
|
return PerformSwitchToSellMode();
|
||||||
@@ -168,11 +171,11 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
next = bases.Select(b => b.Actor).First();
|
next = bases.Select(b => b.Actor).First();
|
||||||
|
|
||||||
World.Selection.Combine(World, new Actor[] { next }, false, true);
|
World.Selection.Combine(World, new Actor[] { next }, false, true);
|
||||||
Game.viewport.Center(World.Selection.Actors);
|
|
||||||
return true;
|
return ToSelection();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GotoLastEvent()
|
bool ToLastEvent()
|
||||||
{
|
{
|
||||||
if (World.LocalPlayer == null)
|
if (World.LocalPlayer == null)
|
||||||
return true;
|
return true;
|
||||||
@@ -188,6 +191,12 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ToSelection()
|
||||||
|
{
|
||||||
|
Game.viewport.Center(World.Selection.Actors);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool PerformSwitchToSellMode()
|
bool PerformSwitchToSellMode()
|
||||||
{
|
{
|
||||||
World.ToggleInputMode<SellOrderGenerator>();
|
World.ToggleInputMode<SellOrderGenerator>();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#region Copyright & License Information
|
#region Copyright & License Information
|
||||||
/*
|
/*
|
||||||
* Copyright 2007-2011 The OpenRA Developers (see AUTHORS)
|
* Copyright 2007-2013 The OpenRA Developers (see AUTHORS)
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
* available to you under the terms of the GNU General Public License
|
* available to you under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation. For more information,
|
* as published by the Free Software Foundation. For more information,
|
||||||
@@ -25,11 +25,23 @@ public static class MultiTapDetection
|
|||||||
return clickHistory.GetTapCount(xy);
|
return clickHistory.GetTapCount(xy);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int InfoFromMouse(byte MBName)
|
||||||
|
{
|
||||||
|
var clickHistory = ClickHistoryCache[MBName];
|
||||||
|
return clickHistory.LastTapCount();
|
||||||
|
}
|
||||||
|
|
||||||
public static int DetectFromKeyboard(string KeyName)
|
public static int DetectFromKeyboard(string KeyName)
|
||||||
{
|
{
|
||||||
var keyHistory = KeyHistoryCache[KeyName];
|
var keyHistory = KeyHistoryCache[KeyName];
|
||||||
return keyHistory.GetTapCount(int2.Zero);
|
return keyHistory.GetTapCount(int2.Zero);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int InfoFromKeyboard(string KeyName)
|
||||||
|
{
|
||||||
|
var keyHistory = KeyHistoryCache[KeyName];
|
||||||
|
return keyHistory.LastTapCount();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class TapHistory
|
class TapHistory
|
||||||
@@ -57,4 +69,11 @@ class TapHistory
|
|||||||
if (!CloseEnough(SecondRelease, FirstRelease)) return 2;
|
if (!CloseEnough(SecondRelease, FirstRelease)) return 2;
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int LastTapCount()
|
||||||
|
{
|
||||||
|
if (!CloseEnough(ThirdRelease, SecondRelease)) return 1;
|
||||||
|
if (!CloseEnough(SecondRelease, FirstRelease)) return 2;
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -67,8 +67,12 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
var button = MakeButton( e.button.button );
|
var button = MakeButton( e.button.button );
|
||||||
lastButtonBits |= button;
|
lastButtonBits |= button;
|
||||||
|
|
||||||
inputHandler.OnMouseInput( new MouseInput(
|
var pos = new int2( e.button.x, e.button.y );
|
||||||
MouseInputEvent.Down, button, new int2( e.button.x, e.button.y ), mods, 1 ) );
|
|
||||||
|
inputHandler.OnMouseInput(new MouseInput(
|
||||||
|
MouseInputEvent.Down, button, pos, mods,
|
||||||
|
MultiTapDetection.DetectFromMouse(e.button.button, pos)
|
||||||
|
));
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Sdl.SDL_MOUSEBUTTONUP:
|
case Sdl.SDL_MOUSEBUTTONUP:
|
||||||
@@ -83,9 +87,10 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
lastButtonBits &= ~button;
|
lastButtonBits &= ~button;
|
||||||
|
|
||||||
var pos = new int2( e.button.x, e.button.y );
|
var pos = new int2( e.button.x, e.button.y );
|
||||||
inputHandler.OnMouseInput( new MouseInput(
|
inputHandler.OnMouseInput(new MouseInput(
|
||||||
MouseInputEvent.Up, button, pos, mods,
|
MouseInputEvent.Up, button, pos, mods,
|
||||||
MultiTapDetection.DetectFromMouse( e.button.button, pos )));
|
MultiTapDetection.InfoFromMouse(e.button.button)
|
||||||
|
));
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case Sdl.SDL_MOUSEMOTION:
|
case Sdl.SDL_MOUSEMOTION:
|
||||||
@@ -99,13 +104,16 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
|
|
||||||
case Sdl.SDL_KEYDOWN:
|
case Sdl.SDL_KEYDOWN:
|
||||||
{
|
{
|
||||||
|
var keyName = Sdl.SDL_GetKeyName( e.key.keysym.sym );
|
||||||
|
|
||||||
var keyEvent = new KeyInput
|
var keyEvent = new KeyInput
|
||||||
{
|
{
|
||||||
Event = KeyInputEvent.Down,
|
Event = KeyInputEvent.Down,
|
||||||
Modifiers = mods,
|
Modifiers = mods,
|
||||||
UnicodeChar = (char)e.key.keysym.unicode,
|
UnicodeChar = (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
|
VirtKey = e.key.keysym.sym,
|
||||||
|
MultiTapCount = MultiTapDetection.DetectFromKeyboard(keyName)
|
||||||
};
|
};
|
||||||
|
|
||||||
if( !HandleSpecialKey( keyEvent ) )
|
if( !HandleSpecialKey( keyEvent ) )
|
||||||
@@ -123,7 +131,7 @@ namespace OpenRA.Renderer.SdlCommon
|
|||||||
UnicodeChar = (char)e.key.keysym.unicode,
|
UnicodeChar = (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,
|
VirtKey = e.key.keysym.sym,
|
||||||
MultiTapCount = MultiTapDetection.DetectFromKeyboard(keyName)
|
MultiTapCount = MultiTapDetection.InfoFromKeyboard(keyName)
|
||||||
};
|
};
|
||||||
|
|
||||||
inputHandler.OnKeyInput( keyEvent );
|
inputHandler.OnKeyInput( keyEvent );
|
||||||
|
|||||||
Reference in New Issue
Block a user