Release 1.9.7.0 - Summer Update 2025
This commit is contained in:
@@ -740,6 +740,30 @@ namespace Barotrauma
|
||||
|
||||
List<Identifier> missionTypes = MissionPrefab.GetAllMultiplayerSelectableMissionTypes().ToList();
|
||||
|
||||
GUILayoutGroup buttonGroup = new(new RectTransform(Vector2.UnitX, missionTypeList.Content.RectTransform), true) { Stretch = true };
|
||||
GUIButton selectAllMissionsButton = new(new RectTransform(new Vector2(0.5f, 1f), buttonGroup.RectTransform), TextManager.Get("selectall"))
|
||||
{
|
||||
OnClicked = (_, _) =>
|
||||
{
|
||||
IEnumerable<Identifier> validMissions = GetValidMissions();
|
||||
validMissions.ForEach(missionType => GameMain.Client.ServerSettings?.ClientAdminWrite(ServerSettings.NetFlags.Misc, addedMissionType: missionType));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
GUIButton deselectAllMissionsButton = new(new RectTransform(new Vector2(0.5f, 1f), buttonGroup.RectTransform), TextManager.Get("deselectall"))
|
||||
{
|
||||
OnClicked = (_, _) =>
|
||||
{
|
||||
IEnumerable<Identifier> validMissions = GetValidMissions();
|
||||
|
||||
// The server must have at least one mission selected, so ensure the first in the list is enabled.
|
||||
GameMain.Client?.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.Misc, addedMissionType: validMissions.First());
|
||||
validMissions.Skip(1).ForEach(missionType => GameMain.Client?.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.Misc, removedMissionType: missionType));
|
||||
return true;
|
||||
}
|
||||
};
|
||||
buttonGroup.RectTransform.MinSize = (0, buttonGroup.Children.Max(child => child.Rect.Height));
|
||||
|
||||
missionTypeTickBoxes = new GUITickBox[missionTypes.Count];
|
||||
int index = 0;
|
||||
foreach (var missionType in missionTypes.OrderBy(t => TextManager.Get("MissionType." + t.Value).Value))
|
||||
@@ -763,6 +787,13 @@ namespace Barotrauma
|
||||
}
|
||||
else
|
||||
{
|
||||
Identifier firstValidMission = GetValidMissions().First();
|
||||
if (missionTypeTickBoxes.None(tickBox => tickBox.Selected && tickBox.Parent.Visible))
|
||||
{
|
||||
GameMain.Client?.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.Misc, addedMissionType: firstValidMission);
|
||||
if ((Identifier)tickbox.UserData == firstValidMission) { return true; }
|
||||
}
|
||||
|
||||
GameMain.Client?.ServerSettings.ClientAdminWrite(ServerSettings.NetFlags.Misc, removedMissionType: (Identifier)tickbox.UserData);
|
||||
}
|
||||
return true;
|
||||
@@ -771,9 +802,16 @@ namespace Barotrauma
|
||||
frame.RectTransform.MinSize = missionTypeTickBoxes[index].RectTransform.MinSize;
|
||||
index++;
|
||||
}
|
||||
|
||||
clientDisabledElements.Add(selectAllMissionsButton);
|
||||
clientDisabledElements.Add(deselectAllMissionsButton);
|
||||
clientDisabledElements.AddRange(missionTypeTickBoxes);
|
||||
|
||||
return gameModeSpecificFrame;
|
||||
|
||||
IEnumerable<Identifier> GetValidMissions() => missionTypeTickBoxes
|
||||
.Where(tickBox => tickBox.Parent.Visible)
|
||||
.Select(tickBox => (Identifier)tickBox.UserData);
|
||||
}
|
||||
|
||||
private GUIFrame gameModeSettingsContent;
|
||||
@@ -2884,6 +2922,11 @@ namespace Barotrauma
|
||||
UserData = new JobVariant(jobPrefab, variant)
|
||||
};
|
||||
jobVariantTooltip.RectTransform.AbsoluteOffset = new Point(parentSlot.Rect.Right, parentSlot.Rect.Y);
|
||||
if (jobVariantTooltip.Rect.X < 0)
|
||||
{
|
||||
jobVariantTooltip.RectTransform.SetPosition(anchor: Anchor.TopLeft, pivot: Pivot.BottomLeft);
|
||||
jobVariantTooltip.RectTransform.AbsoluteOffset = new Point(parentSlot.Rect.X, parentSlot.Rect.Y);
|
||||
}
|
||||
|
||||
var content = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.95f), jobVariantTooltip.RectTransform, Anchor.Center))
|
||||
{
|
||||
@@ -3049,6 +3092,8 @@ namespace Barotrauma
|
||||
|
||||
private void RefreshOutpostDropdown()
|
||||
{
|
||||
Identifier randomOutpostIdentifier = "Random".ToIdentifier();
|
||||
|
||||
outpostDropdown.Parent.Visible = MissionTypeFrame.Visible;
|
||||
if (!outpostDropdown.Parent.Visible) { return; }
|
||||
|
||||
@@ -3057,7 +3102,7 @@ namespace Barotrauma
|
||||
Identifier prevSelected = GameMain.NetworkMember?.ServerSettings.SelectedOutpostName ?? Identifier.Empty;
|
||||
|
||||
outpostDropdown.ClearChildren();
|
||||
outpostDropdown.AddItem(TextManager.Get("Random"), "Random".ToIdentifier());
|
||||
outpostDropdown.AddItem(TextManager.Get("Random"), randomOutpostIdentifier);
|
||||
HashSet<Identifier> validOutpostTagsForMissions = new HashSet<Identifier>();
|
||||
|
||||
IEnumerable<Type> suitableMissionClasses =
|
||||
@@ -3081,12 +3126,22 @@ namespace Barotrauma
|
||||
foreach (var submarineInfo in SubmarineInfo.SavedSubmarines.DistinctBy(s => s.Name))
|
||||
{
|
||||
if (submarineInfo.Type == SubmarineType.Outpost &&
|
||||
validOutpostTagsForMissions.Any(tag => submarineInfo.OutpostTags.Contains(tag)))
|
||||
validOutpostTagsForMissions.Any(submarineInfo.OutpostTags.Contains))
|
||||
{
|
||||
outpostDropdown.AddItem(submarineInfo.DisplayName, userData: submarineInfo.Name.ToIdentifier(), toolTip: submarineInfo.Description);
|
||||
}
|
||||
}
|
||||
outpostDropdown.ListBox.Select(prevSelected);
|
||||
if (!outpostDropdown.ListBox.Select(prevSelected))
|
||||
{
|
||||
//could not select the previously selected outpost (not suitable for the selected missions)
|
||||
// -> choose random instead
|
||||
if (outpostDropdown.SelectedData is Identifier selectedIdentifier &&
|
||||
selectedIdentifier != randomOutpostIdentifier)
|
||||
{
|
||||
outpostDropdown.Flash(GUIStyle.Red);
|
||||
}
|
||||
outpostDropdown.ListBox.Select(randomOutpostIdentifier);
|
||||
}
|
||||
GameMain.Client.ServerSettings.AssignGUIComponent(nameof(ServerSettings.SelectedOutpostName), outpostDropdown);
|
||||
}
|
||||
else
|
||||
@@ -4496,26 +4551,16 @@ namespace Barotrauma
|
||||
|
||||
void PositionJobSelectionFrame()
|
||||
{
|
||||
JobSelectionFrame.RectTransform.AbsoluteOffset = new Point(characterInfoFrame.Rect.Right - JobSelectionFrame.Rect.Width, characterInfoFrame.Rect.Bottom);
|
||||
if (characterInfoFrame.Rect.Bottom + JobSelectionFrame.Rect.Height > GameMain.GraphicsHeight)
|
||||
//move to the left side of the info frame
|
||||
JobSelectionFrame.RectTransform.AbsoluteOffset = new Point(characterInfoFrame.Rect.X - JobSelectionFrame.Rect.Width, JobList.Rect.Y);
|
||||
if (JobSelectionFrame.Rect.X < 0)
|
||||
{
|
||||
//move to the left side of the info frame if the bottom goes below the screen
|
||||
JobSelectionFrame.RectTransform.AbsoluteOffset = new Point(characterInfoFrame.Rect.X - JobSelectionFrame.Rect.Width, characterInfoFrame.Rect.Bottom - JobSelectionFrame.Rect.Height / 2);
|
||||
if (JobSelectionFrame.Rect.X < 0)
|
||||
{
|
||||
//scale if goes outside the screen horizontally
|
||||
JobSelectionFrame.RectTransform.Resize(new Point(characterInfoFrame.Rect.X, JobSelectionFrame.Rect.Height));
|
||||
JobSelectionFrame.RectTransform.AbsoluteOffset = new Point(characterInfoFrame.Rect.X - JobSelectionFrame.Rect.Width, JobSelectionFrame.RectTransform.AbsoluteOffset.Y);
|
||||
}
|
||||
}
|
||||
//scale if goes outside the screen horizontally
|
||||
JobSelectionFrame.RectTransform.Resize(new Point(characterInfoFrame.Rect.X, JobSelectionFrame.Rect.Height));
|
||||
JobSelectionFrame.RectTransform.AbsoluteOffset = new Point(characterInfoFrame.Rect.X - JobSelectionFrame.Rect.Width, JobSelectionFrame.RectTransform.AbsoluteOffset.Y);
|
||||
}
|
||||
}
|
||||
|
||||
new GUIFrame(new RectTransform(new Vector2(1.25f, 1.25f), JobSelectionFrame.RectTransform, anchor: Anchor.Center), style: "OuterGlow", color: Color.Black)
|
||||
{
|
||||
UserData = "outerglow",
|
||||
CanBeFocused = false
|
||||
};
|
||||
|
||||
var jobSelectionList = new GUIListBox(new RectTransform(Vector2.One * listBoxRelativeSize, JobSelectionFrame.RectTransform, Anchor.Center), style: "GUIFrameListBox")
|
||||
{
|
||||
Padding = Vector4.One * GUI.IntScale(10)
|
||||
|
||||
Reference in New Issue
Block a user