(3ac5065f5) Fixed: Rendering order for Bugreporter window, OK button position

This commit is contained in:
Joonas Rikkonen
2019-05-18 17:42:41 +03:00
parent da693c20fa
commit 3a2310e547
52 changed files with 278 additions and 458 deletions
@@ -332,6 +332,7 @@ namespace Barotrauma
CharacterInventory.Layout.Right; CharacterInventory.Layout.Right;
} }
} }
}
if (!character.IsUnconscious && character.Stun <= 0.0f) if (!character.IsUnconscious && character.Stun <= 0.0f)
{ {
@@ -370,13 +371,7 @@ namespace Barotrauma
private static void DrawOrderIndicator(SpriteBatch spriteBatch, Camera cam, Character character, Order order, float iconAlpha = 1.0f) private static void DrawOrderIndicator(SpriteBatch spriteBatch, Camera cam, Character character, Order order, float iconAlpha = 1.0f)
{ {
if (order.TargetAllCharacters) if (order.TargetAllCharacters && !order.HasAppropriateJob(character)) { return; }
{
if (order.OrderGiver != character && !order.HasAppropriateJob(character))
{
return;
}
}
Entity target = order.ConnectedController != null ? order.ConnectedController.Item : order.TargetEntity; Entity target = order.ConnectedController != null ? order.ConnectedController.Item : order.TargetEntity;
if (target == null) { return; } if (target == null) { return; }
@@ -273,7 +273,7 @@ namespace Barotrauma
{ {
IsHorizontal = false IsHorizontal = false
}; };
cprButton = new GUIButton(new RectTransform(new Point((int)(80 * GUI.Scale)), GUI.Canvas), text: "", style: "CPRButton") cprButton = new GUIButton(new RectTransform(new Point(80, 80), GUI.Canvas), text: "", style: "CPRButton")
{ {
OnClicked = (button, userData) => OnClicked = (button, userData) =>
{ {
+14 -18
View File
@@ -36,16 +36,6 @@ namespace Barotrauma
get { return (GameMain.GraphicsWidth / 1920.0f + GameMain.GraphicsHeight / 1080.0f) / 2.0f * GameSettings.HUDScale; } get { return (GameMain.GraphicsWidth / 1920.0f + GameMain.GraphicsHeight / 1080.0f) / 2.0f * GameSettings.HUDScale; }
} }
public static float xScale
{
get { return GameMain.GraphicsWidth / 1920.0f * GameSettings.HUDScale; }
}
public static float yScale
{
get { return GameMain.GraphicsHeight / 1080.0f * GameSettings.HUDScale; }
}
public static GUIStyle Style; public static GUIStyle Style;
private static Texture2D t; private static Texture2D t;
@@ -396,11 +386,8 @@ namespace Barotrauma
{ {
MouseOn.DrawToolTip(spriteBatch); MouseOn.DrawToolTip(spriteBatch);
} }
if (GameMain.WindowActive) Cursor.Draw(spriteBatch, PlayerInput.LatestMousePosition);
{
Cursor.Draw(spriteBatch, PlayerInput.LatestMousePosition, 0, Scale / 2f);
}
} }
public static void DrawBackgroundSprite(SpriteBatch spriteBatch, Sprite backgroundSprite, float blurAmount = 1.0f, float aberrationStrength = 1.0f) public static void DrawBackgroundSprite(SpriteBatch spriteBatch, Sprite backgroundSprite, float blurAmount = 1.0f, float aberrationStrength = 1.0f)
@@ -570,7 +557,7 @@ namespace Barotrauma
private static void HandlePersistingElements(float deltaTime) private static void HandlePersistingElements(float deltaTime)
{ {
if (GUIMessageBox.VisibleBox != null && GUIMessageBox.VisibleBox.UserData as string != "verificationprompt") if (GUIMessageBox.VisibleBox != null && GUIMessageBox.VisibleBox.UserData as string != "verificationprompt" && GUIMessageBox.VisibleBox.UserData as string != "bugreporter")
{ {
GUIMessageBox.VisibleBox.AddToGUIUpdateList(); GUIMessageBox.VisibleBox.AddToGUIUpdateList();
} }
@@ -585,7 +572,7 @@ namespace Barotrauma
} }
//the "are you sure you want to quit" prompts are drawn on top of everything else //the "are you sure you want to quit" prompts are drawn on top of everything else
if (GUIMessageBox.VisibleBox?.UserData as string == "verificationprompt") if (GUIMessageBox.VisibleBox?.UserData as string == "verificationprompt" || GUIMessageBox.VisibleBox?.UserData as string == "bugreporter")
{ {
GUIMessageBox.VisibleBox.AddToGUIUpdateList(); GUIMessageBox.VisibleBox.AddToGUIUpdateList();
} }
@@ -1447,7 +1434,16 @@ namespace Barotrauma
RelativeSpacing = 0.05f RelativeSpacing = 0.05f
}; };
var button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuResume"), style: "GUIButtonLarge") var button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("bugreportbutton"), style: "GUIButtonLarge")
{
Color = Color.Red,
HoverColor = Color.DarkRed,
PressedColor = Color.White,
OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; }
};
button = new GUIButton(new RectTransform(new Vector2(1.0f, 0.1f), buttonContainer.RectTransform), TextManager.Get("PauseMenuResume"), style: "GUIButtonLarge")
{ {
OnClicked = TogglePauseMenu OnClicked = TogglePauseMenu
}; };
@@ -471,8 +471,6 @@ namespace Barotrauma
public static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle targetElement) public static void DrawToolTip(SpriteBatch spriteBatch, string toolTip, Rectangle targetElement)
{ {
if (Tutorials.Tutorial.ContentRunning) return;
int width = (int)(400 * GUI.Scale); int width = (int)(400 * GUI.Scale);
int height = (int)(18 * GUI.Scale); int height = (int)(18 * GUI.Scale);
Point padding = new Point((int)(20 * GUI.Scale), (int)(7 * GUI.Scale)); Point padding = new Point((int)(20 * GUI.Scale), (int)(7 * GUI.Scale));
@@ -91,7 +91,7 @@ namespace Barotrauma
} }
InnerFrame.RectTransform.NonScaledSize = InnerFrame.RectTransform.NonScaledSize =
new Point(InnerFrame.Rect.Width, (int)Math.Max(height / Content.RectTransform.RelativeSize.Y, height + (int)(50 * GUI.yScale))); new Point(InnerFrame.Rect.Width, (int)Math.Max(height / Content.RectTransform.RelativeSize.Y, height + 50));
Content.RectTransform.NonScaledSize = Content.RectTransform.NonScaledSize =
new Point(Content.Rect.Width, height); new Point(Content.Rect.Width, height);
} }
@@ -99,7 +99,7 @@ namespace Barotrauma
Buttons = new List<GUIButton>(buttons.Length); Buttons = new List<GUIButton>(buttons.Length);
for (int i = 0; i < buttons.Length; i++) for (int i = 0; i < buttons.Length; i++)
{ {
var button = new GUIButton(new RectTransform(new Vector2(Math.Min(0.9f / buttons.Length, 0.5f), 1.0f), buttonContainer.RectTransform), buttons[i], style: "GUIButtonLarge"); var button = new GUIButton(new RectTransform(new Vector2(Math.Min(0.9f / buttons.Length, 0.5f), 1.0f), buttonContainer.RectTransform, maxSize: new Point(300, 35)), buttons[i], style: "GUIButtonLarge");
Buttons.Add(button); Buttons.Add(button);
} }
@@ -339,7 +339,7 @@ namespace Barotrauma
Font.DrawString(spriteBatch, Font.DrawString(spriteBatch,
Wrap ? wrappedText : text, Wrap ? wrappedText : text,
pos, rect.Location.ToVector2() + textPos + TextOffset,
textColor * (textColor.A / 255.0f), textColor * (textColor.A / 255.0f),
0.0f, origin, TextScale, 0.0f, origin, TextScale,
SpriteEffects.None, textDepth); SpriteEffects.None, textDepth);
@@ -208,7 +208,7 @@ namespace Barotrauma
for (int i = 0; i < lines.Length; i++) for (int i = 0; i < lines.Length; i++)
{ {
GUI.Font.DrawString(spriteBatch, lines[i], GUI.Font.DrawString(spriteBatch, lines[i],
new Vector2((int)(GameMain.GraphicsWidth / 2.0f - GUI.Font.MeasureString(lines[i]).X / 2.0f), (int)(GameMain.GraphicsHeight * 0.78f + i * lineHeight)), Color.White); new Vector2(GameMain.GraphicsWidth / 2.0f - GUI.Font.MeasureString(lines[i]).X / 2.0f, GameMain.GraphicsHeight * 0.78f + i * lineHeight), Color.White);
} }
} }
@@ -242,10 +242,6 @@ namespace Barotrauma
if (hover && PlayerInput.LeftButtonClicked()) if (hover && PlayerInput.LeftButtonClicked())
{ {
GameMain.Config.Language = language; GameMain.Config.Language = language;
//reload tip in the selected language
selectedTip = TextManager.Get("LoadingScreenTip", true);
GameMain.Config.SetDefaultBindings(legacy: false);
GameMain.Config.CheckBindings(useDefaults: true);
WaitForLanguageSelection = false; WaitForLanguageSelection = false;
} }
@@ -356,7 +356,7 @@ namespace Barotrauma
Point? minSize = null, maxSize = null; Point? minSize = null, maxSize = null;
if (element.Attribute("minsize") != null) minSize = element.GetAttributePoint("minsize", Point.Zero); if (element.Attribute("minsize") != null) minSize = element.GetAttributePoint("minsize", Point.Zero);
//if (element.Attribute("maxsize") != null) maxSize = element.GetAttributePoint("maxsize", new Point(1000, 1000)); if (element.Attribute("maxsize") != null) maxSize = element.GetAttributePoint("maxsize", new Point(1000, 1000));
RectTransform rectTransform; RectTransform rectTransform;
if (element.Attribute("relativesize") != null) if (element.Attribute("relativesize") != null)
+12 -7
View File
@@ -334,7 +334,7 @@ namespace Barotrauma
SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume); SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume);
SoundManager.SetCategoryGainMultiplier("waterambience", Config.SoundVolume); SoundManager.SetCategoryGainMultiplier("waterambience", Config.SoundVolume);
SoundManager.SetCategoryGainMultiplier("music", Config.MusicVolume); SoundManager.SetCategoryGainMultiplier("music", Config.MusicVolume);
SoundManager.SetCategoryGainMultiplier("voip", Config.VoiceChatVolume * 5.0f); SoundManager.SetCategoryGainMultiplier("voip", Config.VoiceChatVolume);
if (Config.EnableSplashScreen) if (Config.EnableSplashScreen)
{ {
var pendingSplashScreens = TitleScreen.PendingSplashScreens; var pendingSplashScreens = TitleScreen.PendingSplashScreens;
@@ -666,7 +666,7 @@ namespace Barotrauma
(NetworkMember == null || !NetworkMember.GameStarted); (NetworkMember == null || !NetworkMember.GameStarted);
#if !DEBUG #if !DEBUG
if (NetworkMember == null && !WindowActive && !paused && true && Screen.Selected != MainMenuScreen && Config.PauseOnFocusLost) if (NetworkMember == null && !WindowActive && !paused && true && Screen.Selected != MainMenuScreen)
{ {
GUI.TogglePauseMenu(); GUI.TogglePauseMenu();
paused = true; paused = true;
@@ -812,17 +812,19 @@ namespace Barotrauma
// ToDo: Move texts/links to localization, when possible. // ToDo: Move texts/links to localization, when possible.
public void ShowBugReporter() public void ShowBugReporter()
{ {
var msgBox = new GUIMessageBox("", ""); var msgBox = new GUIMessageBox(TextManager.Get("bugreportbutton"), "");
var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 0.5f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.05f }; msgBox.UserData = "bugreporter";
var linkHolder = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), msgBox.Content.RectTransform)) { Stretch = true, RelativeSpacing = 0.025f };
linkHolder.RectTransform.MaxSize = new Point(int.MaxValue, linkHolder.Rect.Height);
List<Pair<string, string>> links = new List<Pair<string, string>>() List<Pair<string, string>> links = new List<Pair<string, string>>()
{ {
new Pair<string, string>("Barotrauma Feedback Form","https://barotraumagame.com/feedback"), new Pair<string, string>(TextManager.Get("bugreportfeedbackform"),"https://barotraumagame.com/feedback"),
new Pair<string, string>("Github Issue Form (Needs account)","https://github.com/Regalis11/Barotrauma/issues/new?template=bug_report.md") new Pair<string, string>(TextManager.Get("bugreportgithubform"),"https://github.com/Regalis11/Barotrauma/issues/new?template=bug_report.md")
}; };
foreach (var link in links) foreach (var link in links)
{ {
new GUIButton(new RectTransform(new Vector2(1.0f, 0.2f), linkHolder.RectTransform), link.First, style: "MainMenuGUIButton", textAlignment: Alignment.Left) new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), linkHolder.RectTransform), link.First, style: "MainMenuGUIButton", textAlignment: Alignment.Left)
{ {
UserData = link.Second, UserData = link.Second,
OnClicked = (btn, userdata) => OnClicked = (btn, userdata) =>
@@ -833,6 +835,9 @@ namespace Barotrauma
} }
}; };
} }
msgBox.InnerFrame.RectTransform.MinSize = new Point(0,
msgBox.InnerFrame.Rect.Height + linkHolder.Rect.Height + msgBox.Content.AbsoluteSpacing * 2 + (int)(50 * GUI.Scale));
} }
static bool waitForKeyHit = true; static bool waitForKeyHit = true;
@@ -747,7 +747,7 @@ namespace Barotrauma
{ {
if (orderGiver == null || orderGiver.CurrentHull == null) { return; } if (orderGiver == null || orderGiver.CurrentHull == null) { return; }
var hull = orderGiver.CurrentHull; var hull = orderGiver.CurrentHull;
AddOrder(new Order(order.Prefab, hull, null, orderGiver), order.Prefab.FadeOutTime); AddOrder(new Order(order.Prefab, hull, null), order.Prefab.FadeOutTime);
if (IsSinglePlayer) if (IsSinglePlayer)
{ {
orderGiver.Speak( orderGiver.Speak(
@@ -1350,7 +1350,7 @@ namespace Barotrauma
bool hasFires = Character.Controlled.CurrentHull.FireSources.Count > 0; bool hasFires = Character.Controlled.CurrentHull.FireSources.Count > 0;
ToggleReportButton("reportfire", hasFires); ToggleReportButton("reportfire", hasFires);
bool hasLeaks = Character.Controlled.CurrentHull.Submarine != null && Character.Controlled.CurrentHull.ConnectedGaps.Any(g => !g.IsRoomToRoom && g.Open > 0.0f); bool hasLeaks = Character.Controlled.CurrentHull.ConnectedGaps.Any(g => !g.IsRoomToRoom && g.Open > 0.0f);
ToggleReportButton("reportbreach", hasLeaks); ToggleReportButton("reportbreach", hasLeaks);
bool hasIntruders = Character.CharacterList.Any(c => c.CurrentHull == Character.Controlled.CurrentHull && AIObjectiveFightIntruders.IsValidTarget(Character.Controlled, c)); bool hasIntruders = Character.CharacterList.Any(c => c.CurrentHull == Character.Controlled.CurrentHull && AIObjectiveFightIntruders.IsValidTarget(Character.Controlled, c));
@@ -233,9 +233,9 @@ namespace Barotrauma.Tutorials
//patient 1 requests first aid //patient 1 requests first aid
patient1.CanSpeak = true; patient1.CanSpeak = true;
var newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), patient1.CurrentHull, null, orderGiver: patient1); var newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), patient1.CurrentHull, null);
GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime); GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime);
patient1.Speak(newOrder.GetChatMessage("", patient1.CurrentHull?.DisplayName, givingOrderToSelf: false), ChatMessageType.Order); patient1.Speak(newOrder.GetChatMessage("", patient1.CurrentHull?.RoomName, givingOrderToSelf: false), ChatMessageType.Order);
patient1.AIController.Enabled = true; patient1.AIController.Enabled = true;
while (doctor.CurrentHull != patient1.CurrentHull) while (doctor.CurrentHull != patient1.CurrentHull)
@@ -317,9 +317,9 @@ namespace Barotrauma.Tutorials
//patient calls for help //patient calls for help
patient2.CanSpeak = true; patient2.CanSpeak = true;
newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), patient2.CurrentHull, null, orderGiver: patient2); newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), patient2.CurrentHull, null);
GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime); GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime);
patient2.Speak(newOrder.GetChatMessage("", patient1.CurrentHull?.DisplayName, givingOrderToSelf: false), ChatMessageType.Order); patient2.Speak(newOrder.GetChatMessage("", patient1.CurrentHull?.RoomName, givingOrderToSelf: false), ChatMessageType.Order);
patient2.AIController.Enabled = true; patient2.AIController.Enabled = true;
patient2.Oxygen = -50; patient2.Oxygen = -50;
CoroutineManager.StartCoroutine(KeepPatientAlive(patient2), "KeepPatient2Alive"); CoroutineManager.StartCoroutine(KeepPatientAlive(patient2), "KeepPatient2Alive");
@@ -369,7 +369,7 @@ namespace Barotrauma.Tutorials
double subEnterTime = Timing.TotalTime; double subEnterTime = Timing.TotalTime;
bool[] patientCalledHelp = new bool[] { false, false, false, false, false, false }; bool[] patientCalledHelp = new bool[] { false, false, false };
while (subPatients.Any(p => p.Vitality < p.MaxVitality * 0.9f && !p.IsDead)) while (subPatients.Any(p => p.Vitality < p.MaxVitality * 0.9f && !p.IsDead))
{ {
for (int i = 0; i < subPatients.Count; i++) for (int i = 0; i < subPatients.Count; i++)
@@ -378,10 +378,10 @@ namespace Barotrauma.Tutorials
//(within 1 minute intervals of entering the sub) //(within 1 minute intervals of entering the sub)
if (!patientCalledHelp[i] && Timing.TotalTime > subEnterTime + 60 * (i + 1)) if (!patientCalledHelp[i] && Timing.TotalTime > subEnterTime + 60 * (i + 1))
{ {
newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), subPatients[i].CurrentHull, null, orderGiver: subPatients[i]); newOrder = new Order(Order.PrefabList.Find(o => o.AITag == "requestfirstaid"), subPatients[i].CurrentHull, null);
GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime); GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime);
string message = newOrder.GetChatMessage("", subPatients[i].CurrentHull?.DisplayName, givingOrderToSelf: false); string message = newOrder.GetChatMessage("", subPatients[i].CurrentHull?.RoomName, givingOrderToSelf: false);
if (subPatients[i].CanSpeak) if (subPatients[i].CanSpeak)
{ {
subPatients[i].Speak(message, ChatMessageType.Order); subPatients[i].Speak(message, ChatMessageType.Order);
@@ -293,7 +293,7 @@ namespace Barotrauma.Tutorials
// Room 3 // Room 3
do { yield return null; } while (!mechanic_weldingObjectiveSensor.MotionDetected); do { yield return null; } while (!mechanic_weldingObjectiveSensor.MotionDetected);
TriggerTutorialSegment(2, GameMain.Config.KeyBind(InputType.Aim), GameMain.Config.KeyBind(InputType.Shoot)); // Welding objective TriggerTutorialSegment(2, GameMain.Config.KeyBind(InputType.Shoot), GameMain.Config.KeyBind(InputType.Aim)); // Welding objective
do do
{ {
if (!mechanic.HasEquippedItem("divingmask")) if (!mechanic.HasEquippedItem("divingmask"))
@@ -334,13 +334,14 @@ namespace Barotrauma.Tutorials
//TriggerTutorialSegment(11, GameMain.Config.KeyBind(InputType.Select), GameMain.Config.KeyBind(InputType.Up), GameMain.Config.KeyBind(InputType.Down), GameMain.Config.KeyBind(InputType.Select)); // Ladder objective //TriggerTutorialSegment(11, GameMain.Config.KeyBind(InputType.Select), GameMain.Config.KeyBind(InputType.Up), GameMain.Config.KeyBind(InputType.Down), GameMain.Config.KeyBind(InputType.Select)); // Ladder objective
//do { yield return null; } while (!mechanic_ladderSensor.MotionDetected); //do { yield return null; } while (!mechanic_ladderSensor.MotionDetected);
//RemoveCompletedObjective(segments[11]); //RemoveCompletedObjective(segments[11]);
yield return new WaitForSeconds(2f);
GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.Get("Mechanic.Radio.News"), ChatMessageType.Radio, null); GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.Get("Mechanic.Radio.News"), ChatMessageType.Radio, null);
yield return new WaitForSeconds(1f); yield return new WaitForSeconds(1f);
GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.Get("Mechanic.Radio.Fire"), ChatMessageType.Radio, null); GameMain.GameSession?.CrewManager.AddSinglePlayerChatMessage(radioSpeakerName, TextManager.Get("Mechanic.Radio.Fire"), ChatMessageType.Radio, null);
yield return new WaitForSeconds(6f);
// Room 4 // Room 4
do { yield return null; } while (!mechanic_thirdDoor.IsOpen); do { yield return null; } while (!mechanic_thirdDoor.IsOpen);
yield return new WaitForSeconds(1f);
mechanic_fire = new DummyFireSource(new Vector2(20f, 2f), Item.ItemList.Find(i => i.HasTag("mechanic_fire")).WorldPosition); mechanic_fire = new DummyFireSource(new Vector2(20f, 2f), Item.ItemList.Find(i => i.HasTag("mechanic_fire")).WorldPosition);
//do { yield return null; } while (!mechanic_craftingObjectiveSensor.MotionDetected); //do { yield return null; } while (!mechanic_craftingObjectiveSensor.MotionDetected);
TriggerTutorialSegment(4); // Deconstruct TriggerTutorialSegment(4); // Deconstruct
@@ -405,7 +405,6 @@ namespace Barotrauma.Tutorials
private void ReplaySegmentVideo(TutorialSegment segment) private void ReplaySegmentVideo(TutorialSegment segment)
{ {
if (ContentRunning) return; if (ContentRunning) return;
Inventory.draggingItem = null;
ContentRunning = true; ContentRunning = true;
LoadVideo(segment); LoadVideo(segment);
//videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, callback: () => ContentRunning = false); //videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, callback: () => ContentRunning = false);
@@ -527,7 +526,7 @@ namespace Barotrauma.Tutorials
titleBlock.RectTransform.IsFixedSize = true; titleBlock.RectTransform.IsFixedSize = true;
} }
var textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), " " + text, wrap: true); var textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), infoContent.RectTransform), text, wrap: true);
textBlock.RectTransform.IsFixedSize = true; textBlock.RectTransform.IsFixedSize = true;
infoBoxClosedCallback = callback; infoBoxClosedCallback = callback;
@@ -85,13 +85,6 @@ namespace Barotrauma
TextManager.Get("Settings"), textAlignment: Alignment.TopLeft, font: GUI.LargeFont) TextManager.Get("Settings"), textAlignment: Alignment.TopLeft, font: GUI.LargeFont)
{ ForceUpperCase = true }; { ForceUpperCase = true };
//TODO: enable when new texts can be added
/*new GUIButton(new RectTransform(new Vector2(1.0f, 0.75f), settingsTitle.RectTransform, Anchor.CenterRight), style: "GUIBugButton")
{
ToolTip = "Bug Reporter",
OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; }
};*/
var generalLayoutGroup = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), leftPanel.RectTransform, Anchor.TopLeft)); var generalLayoutGroup = new GUILayoutGroup(new RectTransform(new Vector2(1.0f, 1.0f), leftPanel.RectTransform, Anchor.TopLeft));
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), generalLayoutGroup.RectTransform), TextManager.Get("ContentPackages")); new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), generalLayoutGroup.RectTransform), TextManager.Get("ContentPackages"));
@@ -178,6 +171,12 @@ namespace Barotrauma
}; };
} }
new GUIButton(new RectTransform(new Vector2(0.05f, 0.75f), tabButtonHolder.RectTransform, Anchor.BottomRight) { RelativeOffset = new Vector2(0.0f, 0.2f) }, style: "GUIBugButton")
{
ToolTip = TextManager.Get("bugreportbutton"),
OnClicked = (btn, userdata) => { GameMain.Instance.ShowBugReporter(); return true; }
};
var buttonArea = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.08f), paddedFrame.RectTransform, Anchor.BottomCenter), style: null); var buttonArea = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.08f), paddedFrame.RectTransform, Anchor.BottomCenter), style: null);
/// Graphics tab -------------------------------------------------------------- /// Graphics tab --------------------------------------------------------------
@@ -464,10 +463,6 @@ namespace Barotrauma
{ {
DebugConsole.NewMessage(name + " " + name.Length.ToString(), Color.Lime); DebugConsole.NewMessage(name + " " + name.Length.ToString(), Color.Lime);
} }
deviceList.OnSelected = (GUIComponent selected, object obj) =>
{
string name = obj as string;
if (VoiceCaptureDevice == name) { return true; }
GUITickBox directionalVoiceChat = new GUITickBox(new RectTransform(new Point(32, 32), audioSliders.RectTransform), TextManager.Get("DirectionalVoiceChat")); GUITickBox directionalVoiceChat = new GUITickBox(new RectTransform(new Point(32, 32), audioSliders.RectTransform), TextManager.Get("DirectionalVoiceChat"));
directionalVoiceChat.Selected = UseDirectionalVoiceChat; directionalVoiceChat.Selected = UseDirectionalVoiceChat;
@@ -755,7 +750,7 @@ namespace Barotrauma
OnClicked = (button, data) => OnClicked = (button, data) =>
{ {
// TODO: add a prompt // TODO: add a prompt
LoadDefaultConfig(setLanguage: false); LoadDefaultConfig();
CheckBindings(true); CheckBindings(true);
RefreshItemMessages(); RefreshItemMessages();
ApplySettings(); ApplySettings();
@@ -543,10 +543,7 @@ namespace Barotrauma
//equipped item that can't be put in the inventory, use delayed dropping //equipped item that can't be put in the inventory, use delayed dropping
if (quickUseAction == QuickUseAction.Drop) if (quickUseAction == QuickUseAction.Drop)
{ {
slots[i].QuickUseButtonToolTip = slots[i].QuickUseButtonToolTip = "Hold to unequip";
TextManager.Get("QuickUseAction.HoldToUnequip", returnNull: true) ??
(GameMain.Config.Language == "English" ? "Hold to unequip" : TextManager.Get("QuickUseAction.Unequip"));
if (PlayerInput.LeftButtonHeld()) if (PlayerInput.LeftButtonHeld())
{ {
slots[i].QuickUseTimer = Math.Max(0.1f, slots[i].QuickUseTimer + deltaTime); slots[i].QuickUseTimer = Math.Max(0.1f, slots[i].QuickUseTimer + deltaTime);
@@ -105,8 +105,7 @@ namespace Barotrauma.Items.Components
textBlock = new GUITextBlock(new RectTransform(item.Rect.Size), "", textBlock = new GUITextBlock(new RectTransform(item.Rect.Size), "",
textColor: textColor, font: GUI.UnscaledSmallFont, textAlignment: Alignment.Center, wrap: true, style: null) textColor: textColor, font: GUI.UnscaledSmallFont, textAlignment: Alignment.Center, wrap: true, style: null)
{ {
TextDepth = item.SpriteDepth - 0.00001f, TextDepth = item.SpriteDepth - 0.0001f,
RoundToNearestPixel = false,
TextScale = TextScale TextScale = TextScale
}; };
} }
@@ -36,9 +36,7 @@ namespace Barotrauma.Items.Components
RelativeSpacing = 0.05f RelativeSpacing = 0.05f
}; };
int indicatorSize = (int)(30 * GUI.Scale); powerIndicator = new GUITickBox(new RectTransform(new Point(30, 30), content.RectTransform),
powerIndicator = new GUITickBox(new RectTransform(new Point(indicatorSize, indicatorSize), content.RectTransform),
TextManager.Get("EnginePowered"), style: "IndicatorLightGreen") TextManager.Get("EnginePowered"), style: "IndicatorLightGreen")
{ {
CanBeFocused = false CanBeFocused = false
@@ -108,7 +108,7 @@ namespace Barotrauma.Items.Components
foreach (FabricationRecipe fi in fabricationRecipes) foreach (FabricationRecipe fi in fabricationRecipes)
{ {
GUIFrame frame = new GUIFrame(new RectTransform(new Point(itemList.Rect.Width, (int)(30 * GUI.yScale)), itemList.Content.RectTransform), style: null) GUIFrame frame = new GUIFrame(new RectTransform(new Point(itemList.Rect.Width, 30), itemList.Content.RectTransform), style: null)
{ {
UserData = fi, UserData = fi,
HoverColor = Color.Gold * 0.2f, HoverColor = Color.Gold * 0.2f,
@@ -116,7 +116,7 @@ namespace Barotrauma.Items.Components
ToolTip = fi.TargetItem.Description ToolTip = fi.TargetItem.Description
}; };
GUITextBlock textBlock = new GUITextBlock(new RectTransform(Vector2.Zero, frame.RectTransform, Anchor.CenterLeft) { AbsoluteOffset = new Point((int)(50 * GUI.xScale), 0) }, GUITextBlock textBlock = new GUITextBlock(new RectTransform(Vector2.Zero, frame.RectTransform, Anchor.CenterLeft) { AbsoluteOffset = new Point(50, 0) },
fi.DisplayName) fi.DisplayName)
{ {
ToolTip = fi.TargetItem.Description ToolTip = fi.TargetItem.Description
@@ -125,7 +125,7 @@ namespace Barotrauma.Items.Components
var itemIcon = fi.TargetItem.InventoryIcon ?? fi.TargetItem.sprite; var itemIcon = fi.TargetItem.InventoryIcon ?? fi.TargetItem.sprite;
if (itemIcon != null) if (itemIcon != null)
{ {
GUIImage img = new GUIImage(new RectTransform(new Point((int)(30 * GUI.Scale)), frame.RectTransform, Anchor.CenterLeft) { AbsoluteOffset = new Point((int)(3 * GUI.xScale), 0) }, GUIImage img = new GUIImage(new RectTransform(new Point(30, 30), frame.RectTransform, Anchor.CenterLeft) { AbsoluteOffset = new Point(3, 0) },
itemIcon, scaleToFit: true) itemIcon, scaleToFit: true)
{ {
Color = fi.TargetItem.InventoryIconColor, Color = fi.TargetItem.InventoryIconColor,
@@ -114,9 +114,9 @@ namespace Barotrauma.Items.Components
Vector2 textSize = GUI.Font.MeasureString(text); Vector2 textSize = GUI.Font.MeasureString(text);
Vector2 textPos = child.Center; Vector2 textPos = child.Center;
if (textPos.X + textSize.X / 2 > submarineContainer.Rect.Right) if (textPos.X + textSize.X / 2 > submarineContainer.Rect.Right)
textPos.X -= ((textPos.X + textSize.X / 2) - submarineContainer.Rect.Right) + 10 * GUI.xScale; textPos.X -= ((textPos.X + textSize.X / 2) - submarineContainer.Rect.Right) + 10;
if (textPos.X - textSize.X / 2 < submarineContainer.Rect.X) if (textPos.X - textSize.X / 2 < submarineContainer.Rect.X)
textPos.X += (submarineContainer.Rect.X - (textPos.X - textSize.X / 2)) + 10 * GUI.xScale; textPos.X += (submarineContainer.Rect.X - (textPos.X - textSize.X / 2)) + 10;
GUI.DrawString(spriteBatch, textPos - textSize / 2, text, GUI.DrawString(spriteBatch, textPos - textSize / 2, text,
Color.Orange * (float)Math.Abs(Math.Sin(Timing.TotalTime)), Color.Black * 0.8f); Color.Orange * (float)Math.Abs(Math.Sin(Timing.TotalTime)), Color.Black * 0.8f);
break; break;
@@ -269,7 +269,7 @@ namespace Barotrauma.Items.Components
start.Y = -start.Y; start.Y = -start.Y;
Vector2 end = (sub.HullVertices[(i + 1) % sub.HullVertices.Count] + offset) * displayScale; Vector2 end = (sub.HullVertices[(i + 1) % sub.HullVertices.Count] + offset) * displayScale;
end.Y = -end.Y; end.Y = -end.Y;
GUI.DrawLine(spriteBatch, center + start, center + end, Color.DarkCyan * Rand.Range(0.3f, 0.35f), width: (int)(10 * GUI.Scale)); GUI.DrawLine(spriteBatch, center + start, center + end, Color.DarkCyan * Rand.Range(0.3f, 0.35f), width: 10);
} }
} }
@@ -44,7 +44,7 @@ namespace Barotrauma.Items.Components
GUIFrame paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.8f), GuiFrame.RectTransform, Anchor.Center), style: null); GUIFrame paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.8f), GuiFrame.RectTransform, Anchor.Center), style: null);
isActiveSlider = new GUIScrollBar(new RectTransform(new Point((int)(50 * GUI.Scale), (int)(100 * GUI.Scale)), paddedFrame.RectTransform, Anchor.CenterLeft), isActiveSlider = new GUIScrollBar(new RectTransform(new Point(50, 100), paddedFrame.RectTransform, Anchor.CenterLeft),
barSize: 0.2f, style: "OnOffLever") barSize: 0.2f, style: "OnOffLever")
{ {
IsBooleanSwitch = true, IsBooleanSwitch = true,
@@ -52,7 +52,7 @@ namespace Barotrauma.Items.Components
MaxValue = 0.75f MaxValue = 0.75f
}; };
var sliderHandle = isActiveSlider.GetChild<GUIButton>(); var sliderHandle = isActiveSlider.GetChild<GUIButton>();
sliderHandle.RectTransform.NonScaledSize = new Point((int)(84 * GUI.Scale), sliderHandle.Rect.Height); sliderHandle.RectTransform.NonScaledSize = new Point(84, sliderHandle.Rect.Height);
isActiveSlider.OnMoved = (GUIScrollBar scrollBar, float barScroll) => isActiveSlider.OnMoved = (GUIScrollBar scrollBar, float barScroll) =>
{ {
bool active = scrollBar.BarScroll < 0.5f; bool active = scrollBar.BarScroll < 0.5f;
@@ -73,7 +73,7 @@ namespace Barotrauma.Items.Components
var rightArea = new GUILayoutGroup(new RectTransform(new Vector2(0.75f, 1.0f), paddedFrame.RectTransform, Anchor.CenterRight)) { RelativeSpacing = 0.1f }; var rightArea = new GUILayoutGroup(new RectTransform(new Vector2(0.75f, 1.0f), paddedFrame.RectTransform, Anchor.CenterRight)) { RelativeSpacing = 0.1f };
powerIndicator = new GUITickBox(new RectTransform(new Point((int)(30 * GUI.Scale)), rightArea.RectTransform), TextManager.Get("PumpPowered"), style: "IndicatorLightGreen") powerIndicator = new GUITickBox(new RectTransform(new Point(30, 30), rightArea.RectTransform), TextManager.Get("PumpPowered"), style: "IndicatorLightGreen")
{ {
CanBeFocused = false CanBeFocused = false
}; };
@@ -89,7 +89,7 @@ namespace Barotrauma.Items.Components
RelativeSpacing = 0.05f RelativeSpacing = 0.05f
}; };
var outLabel = new GUITextBlock(new RectTransform(new Vector2(0.3f, 1.0f), sliderArea.RectTransform), new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
TextManager.Get("PumpOut"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont); TextManager.Get("PumpOut"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont);
pumpSpeedSlider = new GUIScrollBar(new RectTransform(new Vector2(0.8f, 1.0f), sliderArea.RectTransform), barSize: 0.25f, style: "GUISlider") pumpSpeedSlider = new GUIScrollBar(new RectTransform(new Vector2(0.8f, 1.0f), sliderArea.RectTransform), barSize: 0.25f, style: "GUISlider")
{ {
@@ -109,10 +109,9 @@ namespace Barotrauma.Items.Components
return true; return true;
} }
}; };
var inLabel = new GUITextBlock(new RectTransform(new Vector2(0.3f, 1.0f), sliderArea.RectTransform),
TextManager.Get("PumpIn"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont);
GUITextBlock.AutoScaleAndNormalize(outLabel, inLabel); new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
TextManager.Get("PumpIn"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont);
} }
public override void OnItemLoaded() public override void OnItemLoaded()
@@ -441,8 +441,8 @@ namespace Barotrauma.Items.Components
{ {
Vector2 sector1 = MathUtils.RotatePointAroundTarget(pingDirection * DisplayRadius, Vector2.Zero, DirectionalPingSector * 0.5f); Vector2 sector1 = MathUtils.RotatePointAroundTarget(pingDirection * DisplayRadius, Vector2.Zero, DirectionalPingSector * 0.5f);
Vector2 sector2 = MathUtils.RotatePointAroundTarget(pingDirection * DisplayRadius, Vector2.Zero, -DirectionalPingSector * 0.5f); Vector2 sector2 = MathUtils.RotatePointAroundTarget(pingDirection * DisplayRadius, Vector2.Zero, -DirectionalPingSector * 0.5f);
DrawLine(spriteBatch, Vector2.Zero, sector1, Color.LightCyan * 0.2f * directionalPingVisibility, width: 3); DrawLine(spriteBatch, center, center + sector1, Color.LightCyan * 0.2f * directionalPingVisibility, width: 3);
DrawLine(spriteBatch, Vector2.Zero, sector2, Color.LightCyan * 0.2f * directionalPingVisibility, width: 3); DrawLine(spriteBatch, center, center + sector2, Color.LightCyan * 0.2f * directionalPingVisibility, width: 3);
} }
if (GameMain.DebugDraw) if (GameMain.DebugDraw)
@@ -14,21 +14,19 @@ namespace Barotrauma.Items.Components
{ {
if (GuiFrame == null) return; if (GuiFrame == null) return;
Point indicatorSize = new Point((int)(30 * GUI.Scale));
var paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.7f), GuiFrame.RectTransform, Anchor.Center), style: null); var paddedFrame = new GUIFrame(new RectTransform(new Vector2(0.9f, 0.7f), GuiFrame.RectTransform, Anchor.Center), style: null);
powerIndicator = new GUITickBox(new RectTransform(indicatorSize, paddedFrame.RectTransform), powerIndicator = new GUITickBox(new RectTransform(new Point(30, 30), paddedFrame.RectTransform),
TextManager.Get("PowerTransferPowered"), style: "IndicatorLightGreen") TextManager.Get("PowerTransferPowered"), style: "IndicatorLightGreen")
{ {
Enabled = false Enabled = false
}; };
highVoltageIndicator = new GUITickBox(new RectTransform(indicatorSize, paddedFrame.RectTransform) { AbsoluteOffset = new Point(0, (int)(40 * GUI.yScale)) }, highVoltageIndicator = new GUITickBox(new RectTransform(new Point(30, 30), paddedFrame.RectTransform) { AbsoluteOffset = new Point(0, 40) },
TextManager.Get("PowerTransferHighVoltage"), style: "IndicatorLightRed") TextManager.Get("PowerTransferHighVoltage"), style: "IndicatorLightRed")
{ {
ToolTip = TextManager.Get("PowerTransferTipOvervoltage"), ToolTip = TextManager.Get("PowerTransferTipOvervoltage"),
Enabled = false Enabled = false
}; };
lowVoltageIndicator = new GUITickBox(new RectTransform(indicatorSize, paddedFrame.RectTransform) { AbsoluteOffset = new Point(0, (int)(80 * GUI.yScale)) }, lowVoltageIndicator = new GUITickBox(new RectTransform(new Point(30, 30), paddedFrame.RectTransform) { AbsoluteOffset = new Point(0, 80) },
TextManager.Get("PowerTransferLowVoltage"), style: "IndicatorLightRed") TextManager.Get("PowerTransferLowVoltage"), style: "IndicatorLightRed")
{ {
ToolTip = TextManager.Get("PowerTransferTipLowvoltage"), ToolTip = TextManager.Get("PowerTransferTipLowvoltage"),
@@ -57,15 +57,15 @@ namespace Barotrauma.Items.Components
} }
} }
Vector2 rightPos = new Vector2(x + width - 130 * GUI.xScale, y + 80 * GUI.yScale); Vector2 rightPos = new Vector2(x + width - 130, y + 80);
Vector2 leftPos = new Vector2(x + 130 * GUI.xScale, y + 80 * GUI.yScale); Vector2 leftPos = new Vector2(x + 130, y + 80);
Vector2 rightWirePos = new Vector2(x + width - 5 * GUI.xScale, y + 30 * GUI.yScale); Vector2 rightWirePos = new Vector2(x + width - 5, y + 30);
Vector2 leftWirePos = new Vector2(x + 5 * GUI.xScale, y + 30 * GUI.yScale); Vector2 leftWirePos = new Vector2(x + 5, y + 30);
int wireInterval = (height - (int)(20 * GUI.yScale)) / Math.Max(totalWireCount, 1); int wireInterval = (height - 20) / Math.Max(totalWireCount, 1);
int connectorIntervalLeft = (height - (int)(100 * GUI.yScale)) / Math.Max(panel.Connections.Count(c => c.IsOutput), 1); int connectorIntervalLeft = (height - 100) / Math.Max(panel.Connections.Count(c => c.IsOutput), 1);
int connectorIntervalRight = (height - (int)(100 * GUI.yScale)) / Math.Max(panel.Connections.Count(c => !c.IsOutput), 1); int connectorIntervalRight = (height - 100) / Math.Max(panel.Connections.Count(c => !c.IsOutput), 1);
foreach (Connection c in panel.Connections) foreach (Connection c in panel.Connections)
{ {
@@ -84,7 +84,7 @@ namespace Barotrauma.Items.Components
if (c.IsOutput) if (c.IsOutput)
{ {
c.Draw(spriteBatch, panel, rightPos, c.Draw(spriteBatch, panel, rightPos,
new Vector2(rightPos.X - GUI.SmallFont.MeasureString(c.DisplayName).X - 20 * GUI.xScale, rightPos.Y + 3 * GUI.yScale), new Vector2(rightPos.X - GUI.SmallFont.MeasureString(c.DisplayName).X - 20, rightPos.Y + 3),
rightWirePos, rightWirePos,
mouseInRect, equippedWire, mouseInRect, equippedWire,
wireInterval); wireInterval);
@@ -143,7 +143,7 @@ namespace Barotrauma.Items.Components
private void Draw(SpriteBatch spriteBatch, ConnectionPanel panel, Vector2 position, Vector2 labelPos, Vector2 wirePosition, bool mouseIn, Wire equippedWire, float wireInterval) private void Draw(SpriteBatch spriteBatch, ConnectionPanel panel, Vector2 position, Vector2 labelPos, Vector2 wirePosition, bool mouseIn, Wire equippedWire, float wireInterval)
{ {
//spriteBatch.DrawString(GUI.SmallFont, Name, new Vector2(labelPos.X, labelPos.Y-10), Color.White); //spriteBatch.DrawString(GUI.SmallFont, Name, new Vector2(labelPos.X, labelPos.Y-10), Color.White);
GUI.DrawString(spriteBatch, labelPos, DisplayName, IsPower ? Color.Red : Color.White, Color.Black, 0, GUI.SmallFont); GUI.DrawString(spriteBatch, labelPos, Name, IsPower ? Color.Red : Color.White, Color.Black, 0, GUI.SmallFont);
connectionSprite.Draw(spriteBatch, position); connectionSprite.Draw(spriteBatch, position);
@@ -281,8 +281,7 @@ namespace Barotrauma
new Vector2(rect.Width, rect.Height), new Vector2(rect.Width, rect.Height),
color: color, color: color,
textureScale: TextureScale * Scale, textureScale: TextureScale * Scale,
startOffset: backGroundOffset, startOffset: backGroundOffset);
depth: Math.Max(Prefab.BackgroundSprite.Depth, depth + 0.000001f));
if (UseDropShadow) if (UseDropShadow)
{ {
@@ -66,13 +66,13 @@ namespace Barotrauma.Networking
if (order.TargetAllCharacters) if (order.TargetAllCharacters)
{ {
GameMain.GameSession?.CrewManager?.AddOrder( GameMain.GameSession?.CrewManager?.AddOrder(
new Order(order.Prefab, targetEntity, (targetEntity as Item)?.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType), orderGiver: senderCharacter), new Order(order.Prefab, targetEntity, (targetEntity as Item)?.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)),
order.Prefab.FadeOutTime); order.Prefab.FadeOutTime);
} }
else if (targetCharacter != null) else if (targetCharacter != null)
{ {
targetCharacter.SetOrder( targetCharacter.SetOrder(
new Order(order.Prefab, targetEntity, (targetEntity as Item)?.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType), orderGiver: senderCharacter), new Order(order.Prefab, targetEntity, (targetEntity as Item)?.Components.FirstOrDefault(ic => ic.GetType() == order.ItemComponentType)),
orderOption, senderCharacter); orderOption, senderCharacter);
} }
@@ -903,7 +903,7 @@ namespace Barotrauma.Networking
connected = false; connected = false;
ConnectToServer(serverIP); ConnectToServer(serverIP);
} }
if (clientID == myID) else
{ {
string msg = ""; string msg = "";
if (disconnectReason == DisconnectReason.Unknown) if (disconnectReason == DisconnectReason.Unknown)
@@ -921,18 +921,8 @@ namespace Barotrauma.Networking
msg += TextManager.GetServerMessage(splitMsg[i]); msg += TextManager.GetServerMessage(splitMsg[i]);
} }
} }
var msgBox = new GUIMessageBox(TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer"), msg);
if (msg == NetConnection.NoResponseMessage) msgBox.Buttons[0].OnClicked += ReturnToServerList;
{
//display a generic "could not connect" popup if the message is Lidgren's "failed to establish connection"
var msgBox = new GUIMessageBox(TextManager.Get("ConnectionFailed"), TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer"));
msgBox.Buttons[0].OnClicked += ReturnToServerList;
}
else
{
var msgBox = new GUIMessageBox(TextManager.Get(allowReconnect ? "ConnectionLost" : "CouldNotConnectToServer"), msg);
msgBox.Buttons[0].OnClicked += ReturnToServerList;
}
} }
} }
@@ -27,9 +27,6 @@ namespace Barotrauma
case "text": case "text":
AddTextElement(subElement, listBox.Content.RectTransform); AddTextElement(subElement, listBox.Content.RectTransform);
break; break;
case "gridtext":
AddGridTextElement(subElement, listBox.Content.RectTransform);
break;
case "spacing": case "spacing":
AddSpacingElement(subElement, listBox.Content.RectTransform); AddSpacingElement(subElement, listBox.Content.RectTransform);
break; break;
@@ -41,9 +38,9 @@ namespace Barotrauma
listBox.UpdateScrollBarSize(); listBox.UpdateScrollBarSize();
} }
private GUIComponent AddTextElement(XElement element, RectTransform parent, string overrideText = null, Anchor anchor = Anchor.Center) private void AddTextElement(XElement element, RectTransform parent)
{ {
var text = overrideText ?? element.ElementInnerText().Replace(@"\n", "\n"); var text = element.ElementInnerText().Replace(@"\n", "\n");
Color color = element.GetAttributeColor("color", Color.White); Color color = element.GetAttributeColor("color", Color.White);
float scale = element.GetAttributeFloat("scale", 1.0f); float scale = element.GetAttributeFloat("scale", 1.0f);
Alignment alignment = Alignment.Center; Alignment alignment = Alignment.Center;
@@ -72,7 +69,7 @@ namespace Barotrauma
} }
var textHolder = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.0f), parent), style: null); var textHolder = new GUIFrame(new RectTransform(new Vector2(1.0f, 0.0f), parent), style: null);
var textBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), textHolder.RectTransform, anchor), var textBlock = new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), textHolder.RectTransform, Anchor.Center),
text, text,
color, color,
font, font,
@@ -84,32 +81,6 @@ namespace Barotrauma
textBlock.RectTransform.IsFixedSize = textHolder.RectTransform.IsFixedSize = true; textBlock.RectTransform.IsFixedSize = textHolder.RectTransform.IsFixedSize = true;
textBlock.RectTransform.NonScaledSize = new Point(textBlock.Rect.Width, textBlock.Rect.Height); textBlock.RectTransform.NonScaledSize = new Point(textBlock.Rect.Width, textBlock.Rect.Height);
textHolder.RectTransform.NonScaledSize = new Point(textHolder.Rect.Width, textBlock.Rect.Height); textHolder.RectTransform.NonScaledSize = new Point(textHolder.Rect.Width, textBlock.Rect.Height);
return textHolder;
}
private void AddGridTextElement(XElement element, RectTransform parent)
{
var text = element.ElementInnerText().Replace(@"\n", "\n");
string[] elements = text.Split(',');
RectTransform lineContainer = null;
for (int i = 0; i < elements.Length; i++)
{
switch (i % 3)
{
case 0:
lineContainer = AddTextElement(element, parent, elements[i], Anchor.CenterLeft).RectTransform;
lineContainer.Anchor = Anchor.TopCenter;
lineContainer.Pivot = Pivot.TopCenter;
lineContainer.NonScaledSize = new Point((int)(parent.NonScaledSize.X * 0.7f), lineContainer.NonScaledSize.Y);
break;
case 1:
AddTextElement(element, lineContainer, elements[i], Anchor.Center).GetChild<GUITextBlock>().TextAlignment = Alignment.Center;
break;
case 2:
AddTextElement(element, lineContainer, elements[i], Anchor.CenterRight).GetChild<GUITextBlock>().TextAlignment = Alignment.CenterRight;
break;
}
}
} }
private void AddSpacingElement(XElement element, RectTransform parent) private void AddSpacingElement(XElement element, RectTransform parent)
@@ -440,21 +440,9 @@ namespace Barotrauma
GameMain.Config.SettingsFrame.RectTransform.RelativeSize = Vector2.One; GameMain.Config.SettingsFrame.RectTransform.RelativeSize = Vector2.One;
break; break;
case Tab.JoinServer: case Tab.JoinServer:
if (!GameMain.Config.CampaignDisclaimerShown)
{
selectedTab = 0;
GameMain.Instance.ShowCampaignDisclaimer(() => { SelectTab(null, Tab.JoinServer); });
return true;
}
GameMain.ServerListScreen.Select(); GameMain.ServerListScreen.Select();
break; break;
case Tab.HostServer: case Tab.HostServer:
if (!GameMain.Config.CampaignDisclaimerShown)
{
selectedTab = 0;
GameMain.Instance.ShowCampaignDisclaimer(() => { SelectTab(null, Tab.HostServer); });
return true;
}
break; break;
case Tab.Tutorials: case Tab.Tutorials:
if (!GameMain.Config.CampaignDisclaimerShown) if (!GameMain.Config.CampaignDisclaimerShown)
@@ -802,7 +790,6 @@ namespace Barotrauma
for (int i = legalCrap.Length - 1; i >= 0; i--) for (int i = legalCrap.Length - 1; i >= 0; i--)
{ {
Vector2 textSize = GUI.SmallFont.MeasureString(legalCrap[i]); Vector2 textSize = GUI.SmallFont.MeasureString(legalCrap[i]);
textSize = new Vector2((int)textSize.X, (int)textSize.Y);
bool mouseOn = i == 0 && bool mouseOn = i == 0 &&
PlayerInput.MousePosition.X > textPos.X - textSize.X && PlayerInput.MousePosition.X < textPos.X && PlayerInput.MousePosition.X > textPos.X - textSize.X && PlayerInput.MousePosition.X < textPos.X &&
PlayerInput.MousePosition.Y > textPos.Y - textSize.Y && PlayerInput.MousePosition.Y < textPos.Y; PlayerInput.MousePosition.Y > textPos.Y - textSize.Y && PlayerInput.MousePosition.Y < textPos.Y;
@@ -31,8 +31,6 @@ namespace Barotrauma
private bool masterServerResponded; private bool masterServerResponded;
private IRestResponse masterServerResponse; private IRestResponse masterServerResponse;
private GUIButton refreshButton;
private float[] columnRelativeWidth; private float[] columnRelativeWidth;
//filters //filters
@@ -142,7 +140,7 @@ namespace Barotrauma
OnClicked = GameMain.MainMenuScreen.ReturnToMainMenu OnClicked = GameMain.MainMenuScreen.ReturnToMainMenu
}; };
refreshButton = new GUIButton(new RectTransform(new Vector2(buttonContainer.Rect.Height / (float)buttonContainer.Rect.Width, 0.9f), buttonContainer.RectTransform, Anchor.Center), var refreshButton = new GUIButton(new RectTransform(new Vector2(buttonContainer.Rect.Height / (float)buttonContainer.Rect.Width, 0.9f), buttonContainer.RectTransform, Anchor.Center),
"", style: "GUIButtonRefresh") { "", style: "GUIButtonRefresh") {
ToolTip = TextManager.Get("ServerListRefresh"), ToolTip = TextManager.Get("ServerListRefresh"),
@@ -204,7 +202,7 @@ namespace Barotrauma
private bool RefreshJoinButtonState(GUIComponent component, object obj) private bool RefreshJoinButtonState(GUIComponent component, object obj)
{ {
if (obj == null || waitingForRefresh) { return false; } if (obj == null || waitingForRefresh) return false;
if (!string.IsNullOrWhiteSpace(clientNameBox.Text) && !string.IsNullOrWhiteSpace(ipBox.Text)) if (!string.IsNullOrWhiteSpace(clientNameBox.Text) && !string.IsNullOrWhiteSpace(ipBox.Text))
{ {
@@ -268,6 +266,16 @@ namespace Barotrauma
joinButton.Enabled = false; joinButton.Enabled = false;
} }
if (!string.IsNullOrWhiteSpace(clientNameBox.Text))
{
joinButton.Enabled = true;
}
else
{
clientNameBox.Flash();
joinButton.Enabled = false;
}
ServerInfo serverInfo; ServerInfo serverInfo;
try try
{ {
@@ -292,11 +300,8 @@ namespace Barotrauma
ipBox.Text = null; ipBox.Text = null;
joinButton.Enabled = false; joinButton.Enabled = false;
new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform),
TextManager.Get("RefreshingServerList"), textAlignment: Alignment.Center) TextManager.Get("RefreshingServerList"));
{
CanBeFocused = false
};
CoroutineManager.StartCoroutine(WaitForRefresh()); CoroutineManager.StartCoroutine(WaitForRefresh());
@@ -317,19 +322,17 @@ namespace Barotrauma
if (!SteamManager.GetServers(AddToServerList, UpdateServerInfo, ServerQueryFinished)) if (!SteamManager.GetServers(AddToServerList, UpdateServerInfo, ServerQueryFinished))
{ {
serverList.ClearChildren(); serverList.ClearChildren();
new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform),
TextManager.Get("ServerListNoSteamConnection"), textAlignment: Alignment.Center) TextManager.Get("ServerListNoSteamConnection"));
{
CanBeFocused = false
};
} }
} }
else else
{ {
CoroutineManager.StartCoroutine(SendMasterServerRequest()); CoroutineManager.StartCoroutine(SendMasterServerRequest());
waitingForRefresh = false;
} }
waitingForRefresh = false;
refreshDisableTimer = DateTime.Now + AllowedRefreshInterval; refreshDisableTimer = DateTime.Now + AllowedRefreshInterval;
yield return CoroutineStatus.Success; yield return CoroutineStatus.Success;
@@ -394,11 +397,8 @@ namespace Barotrauma
serverList.Content.ClearChildren(); serverList.Content.ClearChildren();
if (serverInfos.Count() == 0) if (serverInfos.Count() == 0)
{ {
new GUITextBlock(new RectTransform(new Vector2(1.0f, 1.0f), serverList.Content.RectTransform), new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.05f), serverList.Content.RectTransform),
TextManager.Get("NoServers"), textAlignment: Alignment.Center) TextManager.Get("NoServers"));
{
CanBeFocused = false
};
return; return;
} }
foreach (ServerInfo serverInfo in serverInfos) foreach (ServerInfo serverInfo in serverInfos)
@@ -538,7 +538,6 @@ namespace Barotrauma
UserData = "noresults" UserData = "noresults"
}; };
} }
waitingForRefresh = false;
} }
private IEnumerable<object> SendMasterServerRequest() private IEnumerable<object> SendMasterServerRequest()
@@ -478,7 +478,7 @@ namespace Barotrauma
} }
else else
{ {
var downloadBtn = new GUIButton(new RectTransform(new Point((int)(32 * GUI.Scale)), rightColumn.RectTransform), "+", style: null) var downloadBtn = new GUIButton(new RectTransform(new Point(32, 32), rightColumn.RectTransform), "+", style: null)
{ {
Font = GUI.LargeFont, Font = GUI.LargeFont,
Color = new Color(38, 65, 86, 255), Color = new Color(38, 65, 86, 255),
@@ -294,8 +294,7 @@ namespace Barotrauma
{ {
value = ""; value = "";
} }
string propertyName = (entity.GetType().Name + "." + property.PropertyInfo.Name).ToLowerInvariant(); string displayName = property.GetAttribute<Editable>().DisplayName;
string displayName = TextManager.Get(propertyName, returnNull: true) ?? property.GetAttribute<Editable>().DisplayName;
if (displayName == null) if (displayName == null)
{ {
displayName = property.Name.FormatCamelCaseWithSpaces(); displayName = property.Name.FormatCamelCaseWithSpaces();
@@ -2408,10 +2408,7 @@ namespace Barotrauma.Networking
if (senderCharacter != null && if (senderCharacter != null &&
client.Character != null && !client.Character.IsDead) client.Character != null && !client.Character.IsDead)
{ {
if (senderCharacter != client.Character) modifiedMessage = ChatMessage.ApplyDistanceEffect(message, (ChatMessageType)type, senderCharacter, client.Character);
{
modifiedMessage = ChatMessage.ApplyDistanceEffect(message, (ChatMessageType)type, senderCharacter, client.Character);
}
//too far to hear the msg -> don't send //too far to hear the msg -> don't send
if (string.IsNullOrWhiteSpace(modifiedMessage)) continue; if (string.IsNullOrWhiteSpace(modifiedMessage)) continue;
@@ -2460,16 +2457,13 @@ namespace Barotrauma.Networking
if (message.Sender != null && if (message.Sender != null &&
client.Character != null && !client.Character.IsDead) client.Character != null && !client.Character.IsDead)
{ {
if (message.Sender != client.Character) modifiedMessage = ChatMessage.ApplyDistanceEffect(message.Text, messageType, message.Sender, client.Character);
{
modifiedMessage = ChatMessage.ApplyDistanceEffect(message.Text, messageType, message.Sender, client.Character);
}
//too far to hear the msg -> don't send //too far to hear the msg -> don't send
if (string.IsNullOrWhiteSpace(modifiedMessage)) continue; if (string.IsNullOrWhiteSpace(modifiedMessage)) continue;
} }
SendDirectChatMessage(new OrderChatMessage(message.Order, message.OrderOption, message.TargetEntity, message.TargetCharacter, message.Sender), client); SendDirectChatMessage(message, client);
} }
string myReceivedMessage = message.Text; string myReceivedMessage = message.Text;
@@ -361,9 +361,6 @@
<Content Include="$(MSBuildThisFileDirectory)Content\Effects\waterbump.png"> <Content Include="$(MSBuildThisFileDirectory)Content\Effects\waterbump.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="$(MSBuildThisFileDirectory)Content\Fonts\Exo2-SemiBold.otf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="$(MSBuildThisFileDirectory)Content\Fonts\NotoSans\NotoSansCJKsc-Bold.otf"> <Content Include="$(MSBuildThisFileDirectory)Content\Fonts\NotoSans\NotoSansCJKsc-Bold.otf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
@@ -543,14 +543,6 @@ namespace Barotrauma
{ {
attackSimPos -= Character.Submarine.SimPosition; attackSimPos -= Character.Submarine.SimPosition;
} }
else if (Character.Submarine != SelectedAiTarget.Entity.Submarine)
{
if (Character.Submarine != null && SelectedAiTarget.Entity.Submarine != null)
{
Vector2 diff = Character.Submarine.SimPosition - SelectedAiTarget.Entity.Submarine.SimPosition;
attackSimPos -= diff;
}
}
} }
if (Math.Abs(Character.AnimController.movement.X) > 0.1f && !Character.AnimController.InWater && if (Math.Abs(Character.AnimController.movement.X) > 0.1f && !Character.AnimController.InWater &&
@@ -805,6 +797,7 @@ namespace Barotrauma
{ {
UpdateLimbAttack(deltaTime, AttackingLimb, attackSimPos, distance); UpdateLimbAttack(deltaTime, AttackingLimb, attackSimPos, distance);
} }
return false;
} }
public bool IsSteeringThroughGap { get; private set; } public bool IsSteeringThroughGap { get; private set; }
@@ -85,18 +85,12 @@ namespace Barotrauma
if (Character.Submarine != null || SelectedAiTarget?.Entity?.Submarine != null) if (Character.Submarine != null || SelectedAiTarget?.Entity?.Submarine != null)
{ {
if (steeringManager != insideSteering) if (steeringManager != insideSteering) insideSteering.Reset();
{
insideSteering.Reset();
}
steeringManager = insideSteering; steeringManager = insideSteering;
} }
else else
{ {
if (steeringManager != outsideSteering) if (steeringManager != outsideSteering) outsideSteering.Reset();
{
outsideSteering.Reset();
}
steeringManager = outsideSteering; steeringManager = outsideSteering;
} }
@@ -301,7 +295,7 @@ namespace Barotrauma
if (newOrder == null) if (newOrder == null)
{ {
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportintruders"); var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportintruders");
newOrder = new Order(orderPrefab, c.CurrentHull, null, orderGiver: Character); newOrder = new Order(orderPrefab, c.CurrentHull, null);
} }
} }
} }
@@ -311,7 +305,7 @@ namespace Barotrauma
if (newOrder == null) if (newOrder == null)
{ {
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportfire"); var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportfire");
newOrder = new Order(orderPrefab, hull, null, orderGiver: Character); newOrder = new Order(orderPrefab, hull, null);
} }
} }
foreach (Character c in Character.CharacterList) foreach (Character c in Character.CharacterList)
@@ -323,7 +317,7 @@ namespace Barotrauma
if (newOrder == null) if (newOrder == null)
{ {
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "requestfirstaid"); var orderPrefab = Order.PrefabList.Find(o => o.AITag == "requestfirstaid");
newOrder = new Order(orderPrefab, c.CurrentHull, null, orderGiver: Character); newOrder = new Order(orderPrefab, c.CurrentHull, null);
} }
} }
} }
@@ -335,7 +329,7 @@ namespace Barotrauma
if (newOrder == null) if (newOrder == null)
{ {
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportbreach"); var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportbreach");
newOrder = new Order(orderPrefab, hull, null, orderGiver: Character); newOrder = new Order(orderPrefab, hull, null);
} }
} }
} }
@@ -349,7 +343,7 @@ namespace Barotrauma
if (newOrder == null) if (newOrder == null)
{ {
var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportbrokendevices"); var orderPrefab = Order.PrefabList.Find(o => o.AITag == "reportbrokendevices");
newOrder = new Order(orderPrefab, item.CurrentHull, item.Repairables?.FirstOrDefault(), orderGiver: Character); newOrder = new Order(orderPrefab, item.CurrentHull, item.Repairables?.FirstOrDefault());
} }
} }
} }
@@ -360,9 +354,6 @@ namespace Barotrauma
if (GameMain.GameSession?.CrewManager != null && GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime)) if (GameMain.GameSession?.CrewManager != null && GameMain.GameSession.CrewManager.AddOrder(newOrder, newOrder.FadeOutTime))
{ {
Character.Speak(newOrder.GetChatMessage("", Character.CurrentHull?.DisplayName, givingOrderToSelf: false), ChatMessageType.Order); Character.Speak(newOrder.GetChatMessage("", Character.CurrentHull?.DisplayName, givingOrderToSelf: false), ChatMessageType.Order);
#if SERVER
GameMain.Server.SendOrderChatMessage(new OrderChatMessage(newOrder, "", Character.CurrentHull, null, Character));
#endif
} }
} }
} }
@@ -666,7 +657,7 @@ namespace Barotrauma
{ {
CurrentHullSafety = 0; CurrentHullSafety = 0;
} }
return CurrentHullSafety; return 0;
} }
if (character == Character) if (character == Character)
{ {
@@ -146,7 +146,7 @@ namespace Barotrauma
{ {
bool needsNewPath = currentPath != null && currentPath.Unreachable || Vector2.DistanceSquared(target, currentTarget) > 1; bool needsNewPath = currentPath != null && currentPath.Unreachable || Vector2.DistanceSquared(target, currentTarget) > 1;
//find a new path if one hasn't been found yet or the target is different from the current target //find a new path if one hasn't been found yet or the target is different from the current target
if (currentPath == null || needsNewPath || findPathTimer < -1.0f) if (currentPath == null || Vector2.DistanceSquared(target, currentTarget) > 1.0f || findPathTimer < -1.0f)
{ {
IsPathDirty = true; IsPathDirty = true;
@@ -163,11 +163,7 @@ namespace Barotrauma
} }
} }
var newPath = pathFinder.FindPath(pos, target, "(Character: " + character.Name + ")"); currentPath = pathFinder.FindPath(pos, target, "(Character: " + character.Name + ")");
if (currentPath == null || needsNewPath || !newPath.Unreachable && newPath.Cost < currentPath.Cost)
{
currentPath = newPath;
}
findPathTimer = Rand.Range(1.0f, 1.2f); findPathTimer = Rand.Range(1.0f, 1.2f);
@@ -424,7 +420,7 @@ namespace Barotrauma
// It's possible that we could reach another buttons. // It's possible that we could reach another buttons.
// If this becomes an issue, we could go through them here and check if any of them are reachable // If this becomes an issue, we could go through them here and check if any of them are reachable
// (would have to cache a collection of buttons instead of a single reference in the CanAccess filter method above) // (would have to cache a collection of buttons instead of a single reference in the CanAccess filter method above)
//currentPath.Unreachable = true; currentPath.Unreachable = true;
return; return;
} }
} }
@@ -46,7 +46,7 @@ namespace Barotrauma
if (character.CurrentHull == null) if (character.CurrentHull == null)
{ {
currenthullSafety = 0; currenthullSafety = 0;
Priority = objectiveManager.CurrentOrder is AIObjectiveGoTo ? 0 : 100; Priority = 100;
return; return;
} }
if (character.OxygenAvailable < CharacterHealth.LowOxygenThreshold) { Priority = 100; } if (character.OxygenAvailable < CharacterHealth.LowOxygenThreshold) { Priority = 100; }
@@ -68,8 +68,6 @@ namespace Barotrauma
} }
} }
private Hull currentSafeHull;
private Hull previousSafeHull;
protected override void Act(float deltaTime) protected override void Act(float deltaTime)
{ {
var currentHull = character.AnimController.CurrentHull; var currentHull = character.AnimController.CurrentHull;
@@ -109,20 +107,15 @@ namespace Barotrauma
else else
{ {
searchHullTimer = SearchHullInterval; searchHullTimer = SearchHullInterval;
previousSafeHull = currentSafeHull; var bestHull = FindBestHull();
currentSafeHull = FindBestHull(); if (bestHull != null && bestHull != currentHull)
if (currentSafeHull == null)
{ {
currentSafeHull = previousSafeHull; if (goToObjective?.Target != bestHull)
}
if (currentSafeHull != null && currentSafeHull != currentHull)
{
if (goToObjective?.Target != currentSafeHull)
{ {
goToObjective = null; goToObjective = null;
} }
TryAddSubObjective(ref goToObjective, TryAddSubObjective(ref goToObjective,
constructor: () => new AIObjectiveGoTo(currentSafeHull, character, objectiveManager, getDivingGearIfNeeded: false) constructor: () => new AIObjectiveGoTo(bestHull, character, objectiveManager, getDivingGearIfNeeded: false)
{ {
// If we need diving gear, we should already have it, if possible. // If we need diving gear, we should already have it, if possible.
AllowGoingOutside = HumanAIController.HasDivingSuit(character) AllowGoingOutside = HumanAIController.HasDivingSuit(character)
@@ -134,15 +127,7 @@ namespace Barotrauma
goToObjective = null; goToObjective = null;
} }
} }
if (goToObjective != null) if (goToObjective != null) { return; }
{
if (goToObjective.IsCompleted())
{
objectiveManager.GetObjective<AIObjectiveIdle>()?.Wander(deltaTime);
}
Priority = 0;
return;
}
if (currentHull == null) { return; } if (currentHull == null) { return; }
//goto objective doesn't exist (a safe hull not found, or a path to a safe hull not found) //goto objective doesn't exist (a safe hull not found, or a path to a safe hull not found)
// -> attempt to manually steer away from hazards // -> attempt to manually steer away from hazards
@@ -181,8 +166,7 @@ namespace Barotrauma
} }
else else
{ {
Priority = 0; character.AIController.SteeringManager.Reset();
objectiveManager.GetObjective<AIObjectiveIdle>()?.Wander(deltaTime);
} }
} }
} }
@@ -195,11 +179,11 @@ namespace Barotrauma
{ {
if (hull.Submarine == null) { continue; } if (hull.Submarine == null) { continue; }
if (ignoredHulls != null && ignoredHulls.Contains(hull)) { continue; } if (ignoredHulls != null && ignoredHulls.Contains(hull)) { continue; }
if (unreachable.Contains(hull)) { continue; }
float hullSafety = 0; float hullSafety = 0;
if (character.CurrentHull != null) if (character.Submarine != null && SteeringManager == PathSteering)
{ {
// Inside // Inside or outside near the sub
if (unreachable.Contains(hull)) { continue; }
if (!character.Submarine.IsConnectedTo(hull.Submarine)) { continue; } if (!character.Submarine.IsConnectedTo(hull.Submarine)) { continue; }
hullSafety = HumanAIController.GetHullSafety(hull, character); hullSafety = HumanAIController.GetHullSafety(hull, character);
// Vertical distance matters more than horizontal (climbing up/down is harder than moving horizontally) // Vertical distance matters more than horizontal (climbing up/down is harder than moving horizontally)
@@ -228,7 +212,7 @@ namespace Barotrauma
else else
{ {
// Outside // Outside
if (hull.RoomName != null && hull.RoomName.ToLowerInvariant().Contains("airlock")) if (hull.RoomName?.ToLowerInvariant() == "airlock")
{ {
hullSafety = 100; hullSafety = 100;
} }
@@ -237,14 +221,13 @@ namespace Barotrauma
// TODO: could also target gaps that get us inside? // TODO: could also target gaps that get us inside?
foreach (Item item in Item.ItemList) foreach (Item item in Item.ItemList)
{ {
if (item.CurrentHull != hull && item.HasTag("airlock")) if (item.CurrentHull == hull && item.HasTag("airlock"))
{ {
hullSafety = 100; hullSafety = 100;
break; break;
} }
} }
} }
// TODO: could we get a closest door to the outside and target the flowing hull if no airlock is found?
// Huge preference for closer targets // Huge preference for closer targets
float distance = Vector2.DistanceSquared(character.WorldPosition, hull.WorldPosition); float distance = Vector2.DistanceSquared(character.WorldPosition, hull.WorldPosition);
float distanceFactor = MathHelper.Lerp(1, 0.2f, MathUtils.InverseLerp(0, MathUtils.Pow(100000, 2), distance)); float distanceFactor = MathHelper.Lerp(1, 0.2f, MathUtils.InverseLerp(0, MathUtils.Pow(100000, 2), distance));
@@ -114,23 +114,11 @@ namespace Barotrauma
{ {
Vector2 currTargetSimPos = Vector2.Zero; Vector2 currTargetSimPos = Vector2.Zero;
currTargetSimPos = Target.SimPosition; currTargetSimPos = Target.SimPosition;
// Take the sub position into account in the sim pos //if character is inside the sub and target isn't, transform the position
if (character.Submarine == null && Target.Submarine != null) if (character.Submarine != null && Target.Submarine == null)
{
//currTargetSimPos += Target.Submarine.SimPosition;
}
else if (character.Submarine != null && Target.Submarine == null)
{ {
currTargetSimPos -= character.Submarine.SimPosition; currTargetSimPos -= character.Submarine.SimPosition;
} }
else if (character.Submarine != Target.Submarine)
{
if (character.Submarine != null && Target.Submarine != null)
{
Vector2 diff = character.Submarine.SimPosition - Target.Submarine.SimPosition;
currTargetSimPos -= diff;
}
}
character.AIController.SteeringManager.SteeringSeek(currTargetSimPos); character.AIController.SteeringManager.SteeringSeek(currTargetSimPos);
if (getDivingGearIfNeeded) if (getDivingGearIfNeeded)
{ {
@@ -159,6 +147,7 @@ namespace Barotrauma
// First check the distance // First check the distance
// Then the custom condition // Then the custom condition
// And finally check if can interact (heaviest) // And finally check if can interact (heaviest)
if (repeat) { return false; }
if (isCompleted) { return true; } if (isCompleted) { return true; }
if (Target == null) if (Target == null)
{ {
@@ -166,16 +155,7 @@ namespace Barotrauma
return false; return false;
} }
bool closeEnough = Vector2.DistanceSquared(Target.WorldPosition, character.WorldPosition) < CloseEnough * CloseEnough; bool closeEnough = Vector2.DistanceSquared(Target.WorldPosition, character.WorldPosition) < CloseEnough * CloseEnough;
if (repeat) if (closeEnough)
{
if (closeEnough)
{
character.AIController.SteeringManager.Reset();
character.AnimController.TargetDir = Target.WorldPosition.X > character.WorldPosition.X ? Direction.Right : Direction.Left;
}
return false;
}
else if (closeEnough)
{ {
if (customCondition == null || customCondition()) if (customCondition == null || customCondition())
{ {
@@ -81,11 +81,7 @@ namespace Barotrauma
Item.ItemList.FindAll(it => it.Components.Any(ic => ic.GetType() == orderPrefab.ItemComponentType)); Item.ItemList.FindAll(it => it.Components.Any(ic => ic.GetType() == orderPrefab.ItemComponentType));
matchingItems.RemoveAll(it => it.Submarine != character.Submarine); matchingItems.RemoveAll(it => it.Submarine != character.Submarine);
var item = matchingItems.GetRandom(); var item = matchingItems.GetRandom();
var order = new Order( var order = new Order(orderPrefab, item ?? character.CurrentHull as Entity, item?.Components.FirstOrDefault(ic => ic.GetType() == orderPrefab.ItemComponentType));
orderPrefab,
item ?? character.CurrentHull as Entity,
item?.Components.FirstOrDefault(ic => ic.GetType() == orderPrefab.ItemComponentType),
orderGiver: character);
if (order == null) { continue; } if (order == null) { continue; }
var objective = CreateObjective(order, automaticOrder.option, character, automaticOrder.priorityModifier); var objective = CreateObjective(order, automaticOrder.option, character, automaticOrder.priorityModifier);
if (objective != null) if (objective != null)
@@ -202,10 +198,6 @@ namespace Barotrauma
{ {
CurrentObjective?.TryComplete(deltaTime); CurrentObjective?.TryComplete(deltaTime);
} }
else
{
character.AIController.SteeringManager.Reset();
}
} }
public void SetOrder(AIObjective objective) public void SetOrder(AIObjective objective)
@@ -39,9 +39,7 @@ namespace Barotrauma
public Entity TargetEntity; public Entity TargetEntity;
public ItemComponent TargetItemComponent; public ItemComponent TargetItemComponent;
public readonly bool UseController; public readonly bool UseController;
public Controller ConnectedController; public Controller ConnectedController;
public Character OrderGiver;
public readonly string[] AppropriateJobs; public readonly string[] AppropriateJobs;
public readonly string[] Options; public readonly string[] Options;
@@ -122,7 +120,7 @@ namespace Barotrauma
} }
} }
public Order(Order prefab, Entity targetEntity, ItemComponent targetItem, Character orderGiver = null) public Order(Order prefab, Entity targetEntity, ItemComponent targetItem)
{ {
Prefab = prefab; Prefab = prefab;
@@ -136,7 +134,6 @@ namespace Barotrauma
TargetAllCharacters = prefab.TargetAllCharacters; TargetAllCharacters = prefab.TargetAllCharacters;
AppropriateJobs = prefab.AppropriateJobs; AppropriateJobs = prefab.AppropriateJobs;
FadeOutTime = prefab.FadeOutTime; FadeOutTime = prefab.FadeOutTime;
OrderGiver = orderGiver;
TargetEntity = targetEntity; TargetEntity = targetEntity;
if (targetItem != null) if (targetItem != null)
@@ -165,8 +165,8 @@ namespace Barotrauma
{ {
Vector2 nodePos = node.Position; Vector2 nodePos = node.Position;
float xDiff = Math.Abs(start.X - nodePos.X); float xDiff = System.Math.Abs(start.X - nodePos.X);
float yDiff = Math.Abs(start.Y - nodePos.Y); float yDiff = System.Math.Abs(start.Y - nodePos.Y);
if (yDiff > 1.0f && node.Waypoint.Ladders == null && node.Waypoint.Stairs == null) if (yDiff > 1.0f && node.Waypoint.Ladders == null && node.Waypoint.Stairs == null)
{ {
@@ -190,7 +190,7 @@ namespace Barotrauma
if (body != null) if (body != null)
{ {
//if (body.UserData is Submarine) continue; if (body.UserData is Submarine) continue;
if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue; if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue;
if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue; if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue;
} }
@@ -216,7 +216,7 @@ namespace Barotrauma
{ {
Vector2 nodePos = node.Position; Vector2 nodePos = node.Position;
float dist = Vector2.DistanceSquared(end, nodePos); float dist = Vector2.Distance(end, nodePos);
if (insideSubmarine) if (insideSubmarine)
{ {
//much higher cost to waypoints that are outside //much higher cost to waypoints that are outside
@@ -229,12 +229,19 @@ namespace Barotrauma
//if searching for a path inside the sub, make sure the waypoint is visible //if searching for a path inside the sub, make sure the waypoint is visible
if (insideSubmarine) if (insideSubmarine)
{ {
// Doesn't seem to work
//var body = Submarine.CheckVisibility(end, node.Waypoint.SimPosition);
//if (body != null && body.UserData is Structure)
//{
// continue;
//}
var body = Submarine.PickBody(end, node.Waypoint.SimPosition, null, var body = Submarine.PickBody(end, node.Waypoint.SimPosition, null,
Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionStairs ); Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionStairs );
if (body != null) if (body != null)
{ {
//if (body.UserData is Submarine) continue; if (body.UserData is Submarine) continue;
if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue; if (body.UserData is Structure && !((Structure)body.UserData).IsPlatform) continue;
if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue; if (body.UserData is Item && body.FixtureList[0].CollisionCategories.HasFlag(Physics.CollisionWall)) continue;
@@ -192,6 +192,14 @@ namespace Barotrauma
if (dist > maxDistance) return Vector2.Zero; if (dist > maxDistance) return Vector2.Zero;
return -diff * (1.0f - dist / maxDistance) * weight;
}
Vector2 diff = avoidObstaclePos.Value - host.SimPosition;
float dist = diff.Length();
if (dist > maxDistance) return Vector2.Zero;
return -diff * (1.0f - dist / maxDistance) * weight; return -diff * (1.0f - dist / maxDistance) * weight;
} }
} }
+104 -111
View File
@@ -45,7 +45,7 @@ namespace Barotrauma
public bool PauseOnFocusLost { get; set; } = true; public bool PauseOnFocusLost { get; set; } = true;
public bool MuteOnFocusLost { get; set; } public bool MuteOnFocusLost { get; set; }
public bool UseDirectionalVoiceChat { get; set; } = true; public bool UseDirectionalVoiceChat { get; set; }
public enum VoiceMode public enum VoiceMode
{ {
@@ -206,7 +206,7 @@ namespace Barotrauma
{ {
voiceChatVolume = MathHelper.Clamp(value, 0.0f, 1.0f); voiceChatVolume = MathHelper.Clamp(value, 0.0f, 1.0f);
#if CLIENT #if CLIENT
GameMain.SoundManager?.SetCategoryGainMultiplier("voip", voiceChatVolume * 5.0f); GameMain.SoundManager?.SetCategoryGainMultiplier("voip", voiceChatVolume);
#endif #endif
} }
} }
@@ -302,6 +302,10 @@ namespace Barotrauma
public void SetDefaultBindings(XDocument doc = null, bool legacy = false) public void SetDefaultBindings(XDocument doc = null, bool legacy = false)
{ {
keyMapping = new KeyOrMouse[Enum.GetNames(typeof(InputType)).Length]; keyMapping = new KeyOrMouse[Enum.GetNames(typeof(InputType)).Length];
keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.W);
keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S);
keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.A);
keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D);
keyMapping[(int)InputType.Run] = new KeyOrMouse(Keys.LeftShift); keyMapping[(int)InputType.Run] = new KeyOrMouse(Keys.LeftShift);
keyMapping[(int)InputType.Attack] = new KeyOrMouse(2); keyMapping[(int)InputType.Attack] = new KeyOrMouse(2);
keyMapping[(int)InputType.Crouch] = new KeyOrMouse(Keys.LeftControl); keyMapping[(int)InputType.Crouch] = new KeyOrMouse(Keys.LeftControl);
@@ -315,29 +319,11 @@ namespace Barotrauma
keyMapping[(int)InputType.RadioChat] = new KeyOrMouse(Keys.R); keyMapping[(int)InputType.RadioChat] = new KeyOrMouse(Keys.R);
keyMapping[(int)InputType.CrewOrders] = new KeyOrMouse(Keys.C); keyMapping[(int)InputType.CrewOrders] = new KeyOrMouse(Keys.C);
keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z);
keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X);
keyMapping[(int)InputType.Voice] = new KeyOrMouse(Keys.V); keyMapping[(int)InputType.Voice] = new KeyOrMouse(Keys.V);
if (Language == "French")
{
keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.Z);
keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S);
keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.Q);
keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D);
keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.X);
keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.W);
}
else
{
keyMapping[(int)InputType.Up] = new KeyOrMouse(Keys.W);
keyMapping[(int)InputType.Down] = new KeyOrMouse(Keys.S);
keyMapping[(int)InputType.Left] = new KeyOrMouse(Keys.A);
keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D);
keyMapping[(int)InputType.SelectNextCharacter] = new KeyOrMouse(Keys.Z);
keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.X);
}
if (legacy) if (legacy)
{ {
keyMapping[(int)InputType.Use] = new KeyOrMouse(0); keyMapping[(int)InputType.Use] = new KeyOrMouse(0);
@@ -355,15 +341,33 @@ namespace Barotrauma
{ {
foreach (XElement subElement in doc.Root.Elements()) foreach (XElement subElement in doc.Root.Elements())
{ {
if (subElement.Name.ToString().ToLowerInvariant() == "keymapping") switch (subElement.Name.ToString().ToLowerInvariant())
{ {
LoadKeyBinds(subElement); case "keymapping":
foreach (XAttribute attribute in subElement.Attributes())
{
if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType))
{
if (int.TryParse(attribute.Value.ToString(), out int mouseButton))
{
keyMapping[(int)inputType] = new KeyOrMouse(mouseButton);
}
else
{
if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key))
{
keyMapping[(int)inputType] = new KeyOrMouse(key);
}
}
}
}
break;
} }
} }
} }
} }
public void CheckBindings(bool useDefaults) private void CheckBindings(bool useDefaults)
{ {
foreach (InputType inputType in Enum.GetValues(typeof(InputType))) foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
{ {
@@ -416,77 +420,21 @@ namespace Barotrauma
} }
#region Load DefaultConfig #region Load DefaultConfig
private void LoadDefaultConfig(bool setLanguage = true) private void LoadDefaultConfig()
{ {
XDocument doc = XMLExtensions.TryLoadXml(savePath); XDocument doc = XMLExtensions.TryLoadXml(savePath);
if (setLanguage || string.IsNullOrEmpty(Language)) Language = doc.Root.GetAttributeString("language", "English");
{
Language = doc.Root.GetAttributeString("language", "English");
}
}
public void CheckBindings(bool useDefaults) MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", "");
{
foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
{
var binding = keyMapping[(int)inputType];
if (binding == null)
{
switch (inputType)
{
case InputType.Deselect:
if (useDefaults)
{
binding = new KeyOrMouse(1);
}
else
{
// Legacy support
var selectKey = keyMapping[(int)InputType.Select];
if (selectKey != null && selectKey.Key != Keys.None)
{
binding = new KeyOrMouse(selectKey.Key);
}
}
break;
case InputType.Shoot:
if (useDefaults)
{
binding = new KeyOrMouse(0);
}
else
{
// Legacy support
var useKey = keyMapping[(int)InputType.Use];
if (useKey != null && useKey.MouseButton.HasValue)
{
binding = new KeyOrMouse(useKey.MouseButton.Value);
}
}
break;
default:
break;
}
if (binding == null)
{
DebugConsole.ThrowError("Key binding for the input type \"" + inputType + " not set!");
binding = new KeyOrMouse(Keys.D1);
}
keyMapping[(int)inputType] = binding;
}
}
}
#region Load DefaultConfig AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", true);
private void LoadDefaultConfig(bool setLanguage = true) WasGameUpdated = doc.Root.GetAttributeBool("wasgameupdated", false);
{
XDocument doc = XMLExtensions.TryLoadXml(savePath);
if (setLanguage || string.IsNullOrEmpty(Language)) VerboseLogging = doc.Root.GetAttributeBool("verboselogging", false);
{ SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false);
Language = doc.Root.GetAttributeString("language", "English");
} QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", "");
MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", ""); MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", "");
@@ -910,6 +858,71 @@ namespace Barotrauma
CampaignDisclaimerShown = doc.Root.GetAttributeBool("campaigndisclaimershown", false); CampaignDisclaimerShown = doc.Root.GetAttributeBool("campaigndisclaimershown", false);
EditorDisclaimerShown = doc.Root.GetAttributeBool("editordisclaimershown", false); EditorDisclaimerShown = doc.Root.GetAttributeBool("editordisclaimershown", false);
foreach (XElement subElement in doc.Root.Elements())
{
switch (subElement.Name.ToString().ToLowerInvariant())
{
case "keymapping":
foreach (XAttribute attribute in subElement.Attributes())
{
if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType))
{
if (int.TryParse(attribute.Value.ToString(), out int mouseButton))
{
keyMapping[(int)inputType] = new KeyOrMouse(mouseButton);
}
else
{
if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key))
{
keyMapping[(int)inputType] = new KeyOrMouse(key);
}
}
}
}
break;
case "gameplay":
jobPreferences = new List<string>();
foreach (XElement ele in subElement.Element("jobpreferences").Elements("job"))
{
string jobIdentifier = ele.GetAttributeString("identifier", "");
if (string.IsNullOrEmpty(jobIdentifier)) continue;
jobPreferences.Add(jobIdentifier);
}
break;
case "player":
defaultPlayerName = subElement.GetAttributeString("name", defaultPlayerName);
CharacterHeadIndex = subElement.GetAttributeInt("headindex", CharacterHeadIndex);
if (Enum.TryParse(subElement.GetAttributeString("gender", "none"), true, out Gender g))
{
CharacterGender = g;
}
if (Enum.TryParse(subElement.GetAttributeString("race", "white"), true, out Race r))
{
CharacterRace = r;
}
else
{
CharacterRace = Race.White;
}
CharacterHairIndex = subElement.GetAttributeInt("hairindex", CharacterHairIndex);
CharacterBeardIndex = subElement.GetAttributeInt("beardindex", CharacterBeardIndex);
CharacterMoustacheIndex = subElement.GetAttributeInt("moustacheindex", CharacterMoustacheIndex);
CharacterFaceAttachmentIndex = subElement.GetAttributeInt("faceattachmentindex", CharacterFaceAttachmentIndex);
break;
case "tutorials":
foreach (XElement tutorialElement in subElement.Elements())
{
CompletedTutorialNames.Add(tutorialElement.GetAttributeString("name", ""));
}
break;
}
}
UnsavedSettings = false;
selectedContentPackagePaths = new HashSet<string>();
foreach (XElement subElement in doc.Root.Elements()) foreach (XElement subElement in doc.Root.Elements())
{ {
switch (subElement.Name.ToString().ToLowerInvariant()) switch (subElement.Name.ToString().ToLowerInvariant())
@@ -1245,26 +1258,6 @@ namespace Barotrauma
} }
#endregion #endregion
private void LoadKeyBinds(XElement element)
{
foreach (XAttribute attribute in element.Attributes())
{
if (!Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType)) { continue; }
if (int.TryParse(attribute.Value.ToString(), out int mouseButton))
{
keyMapping[(int)inputType] = new KeyOrMouse(mouseButton);
}
else
{
if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key))
{
keyMapping[(int)inputType] = new KeyOrMouse(key);
}
}
}
}
public void ResetToDefault() public void ResetToDefault()
{ {
LoadDefaultConfig(); LoadDefaultConfig();
@@ -168,11 +168,7 @@ namespace Barotrauma.Items.Components
} }
else else
{ {
FixBody(user, deltaTime, degreeOfSuccess, FixBody(user, deltaTime, degreeOfSuccess, Submarine.PickBody(rayStart, rayEnd, ignoredBodies, collisionCategories, ignoreSensors: false, allowInsideFixture: true));
Submarine.PickBody(rayStart, rayEnd,
ignoredBodies, collisionCategories, ignoreSensors: false,
customPredicate: (Fixture f) => { return f?.Body?.UserData != null; },
allowInsideFixture: true));
} }
if (ExtinguishAmount > 0.0f && item.CurrentHull != null) if (ExtinguishAmount > 0.0f && item.CurrentHull != null)
@@ -609,7 +609,8 @@ namespace Barotrauma
foreach (InterestingPosition pos in positionsOfInterest) foreach (InterestingPosition pos in positionsOfInterest)
{ {
if (pos.PositionType != PositionType.MainPath || pos.Position.X < 5000 || pos.Position.X > Size.X - 5000) continue; if (pos.PositionType != PositionType.MainPath || pos.Position.X < 5000 || pos.Position.X > Size.X - 5000) continue;
if (Math.Abs(pos.Position.X - StartPosition.X) < minWidth * 2 || Math.Abs(pos.Position.X - EndPosition.X) < minWidth * 2) continue; if (Math.Abs(pos.Position.X - StartPosition.X) < 10000) continue;
if (Math.Abs(pos.Position.Y - StartPosition.Y) < 10000) continue;
if (GetTooCloseCells(pos.Position.ToVector2(), minWidth * 0.7f).Count > 0) continue; if (GetTooCloseCells(pos.Position.ToVector2(), minWidth * 0.7f).Count > 0) continue;
iceChunkPositions.Add(pos.Position); iceChunkPositions.Add(pos.Position);
} }
@@ -301,10 +301,6 @@ namespace Barotrauma
#endif #endif
spriteColor = prefab.SpriteColor; spriteColor = prefab.SpriteColor;
if (sp.IsHorizontal.HasValue) if (sp.IsHorizontal.HasValue)
{
IsHorizontal = sp.IsHorizontal.Value;
}
else if (ResizeHorizontal && !ResizeVertical)
{ {
IsHorizontal = true; IsHorizontal = true;
} }
@@ -349,7 +345,7 @@ namespace Barotrauma
} }
// Only add ai targets automatically to submarine/outpost walls // Only add ai targets automatically to submarine/outpost walls
if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null && !Prefab.NoAITarget) if (aiTarget == null && HasBody && Tags.Contains("wall") && submarine != null)
{ {
aiTarget = new AITarget(this); aiTarget = new AITarget(this);
} }
@@ -184,11 +184,6 @@ namespace Barotrauma
sp.Tags.Add(tag.Trim().ToLowerInvariant()); sp.Tags.Add(tag.Trim().ToLowerInvariant());
} }
if (element.Attribute("ishorizontal") != null)
{
sp.IsHorizontal = element.GetAttributeBool("ishorizontal", false);
}
foreach (XElement subElement in element.Elements()) foreach (XElement subElement in element.Elements())
{ {
switch (subElement.Name.ToString()) switch (subElement.Name.ToString())
@@ -602,7 +602,7 @@ namespace Barotrauma
if (ladderItem != null) Ladders = ladderItem.GetComponent<Ladder>(); if (ladderItem != null) Ladders = ladderItem.GetComponent<Ladder>();
} }
Body pickedBody = Submarine.PickBody(SimPosition, SimPosition - Vector2.UnitY * 2.0f, null, Physics.CollisionStairs); Body pickedBody = Submarine.PickBody(SimPosition, SimPosition - Vector2.UnitY * 2.0f, null, Physics.CollisionWall | Physics.CollisionStairs);
if (pickedBody != null && pickedBody.UserData is Structure) if (pickedBody != null && pickedBody.UserData is Structure)
{ {
Structure structure = (Structure)pickedBody.UserData; Structure structure = (Structure)pickedBody.UserData;
@@ -98,11 +98,6 @@ namespace Barotrauma
public readonly AttributeCollection Attributes; public readonly AttributeCollection Attributes;
public readonly Type PropertyType; public readonly Type PropertyType;
public PropertyInfo PropertyInfo
{
get { return propertyInfo; }
}
public SerializableProperty(PropertyDescriptor property, object obj) public SerializableProperty(PropertyDescriptor property, object obj)
{ {
Name = property.Name; Name = property.Name;
Binary file not shown.
Binary file not shown.
-15
View File
@@ -1,18 +1,3 @@
---------------------------------------------------------------------------------------------------------
v0.9.0.2
---------------------------------------------------------------------------------------------------------
- Fixed a bug that caused frequent desync kicks when playing a multiplayer monster mission.
- Fixed an index out of range error in DoctorTutorial if proceeding too fast to the submarine.
- Fixes to missing translations and UI layout problems when using languages other than English.
- More readable font and a fix to some texts appearing slightly "clipped".
- Additions to the credits.
- Fixed bots loading only half of the target items in the contain item objective.
- Minor tweaks to subs and shuttles.
- Fixed find safety AI objective not working properly.
- Miscellaneous crew AI fixes and improvements.
- Fixed incorrect reward amount in the "Chemical shipment" description.
--------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------
v0.9.0.1 v0.9.0.1
--------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------