Make control group hotkeys configurable

- Split control groups management to its own interface
- Add hotkeys for selecting, creating, adding to and combining with control groups
- Add a ControlGroups widget to manage the player interaction
This commit is contained in:
Ivaylo Draganov
2021-09-14 22:54:45 +03:00
committed by abcdefg30
parent 04b456d6c2
commit 7a93b9ea8c
31 changed files with 598 additions and 137 deletions

View File

@@ -477,10 +477,25 @@ namespace OpenRA.Traits
void Clear();
bool RolloverContains(Actor a);
void SetRollover(IEnumerable<Actor> actors);
void DoControlGroup(World world, WorldRenderer worldRenderer, int group, Modifiers mods, int multiTapCount);
}
public interface IControlGroupsInfo : ITraitInfoInterface
{
string[] Groups { get; }
}
public interface IControlGroups
{
string[] Groups { get; }
void SelectControlGroup(int group);
void CreateControlGroup(int group);
void AddSelectionToControlGroup(int group);
void CombineSelectionWithControlGroup(int group);
void AddToControlGroup(Actor a, int group);
void RemoveFromControlGroup(Actor a);
int? GetControlGroupForActor(Actor a);
IEnumerable<Actor> GetActorsInControlGroup(int group);
}
/// <summary>

View File

@@ -158,6 +158,7 @@ namespace OpenRA
}
public readonly ISelection Selection;
public readonly IControlGroups ControlGroups;
public void CancelInputMode() { OrderGenerator = new UnitOrderGenerator(); }
@@ -201,6 +202,7 @@ namespace OpenRA
ActorMap = WorldActor.Trait<IActorMap>();
ScreenMap = WorldActor.Trait<ScreenMap>();
Selection = WorldActor.Trait<ISelection>();
ControlGroups = WorldActor.Trait<IControlGroups>();
OrderValidators = WorldActor.TraitsImplementing<IValidateOrder>().ToArray();
notifyDisconnected = WorldActor.TraitsImplementing<INotifyPlayerDisconnected>().ToArray();