(cc26984a5) Merge remote-tracking branch 'origin/dev' into human-ai
This commit is contained in:
@@ -188,6 +188,7 @@
|
|||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CampaignSetupUI.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CampaignSetupUI.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CampaignUI.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CampaignUI.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CharacterEditorScreen.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CharacterEditorScreen.cs" />
|
||||||
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\CreditsPlayer.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\GameScreen.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\GameScreen.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\LevelEditorScreen.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\LevelEditorScreen.cs" />
|
||||||
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\LobbyScreen.cs" />
|
<Compile Include="$(MSBuildThisFileDirectory)Source\Screens\LobbyScreen.cs" />
|
||||||
|
|||||||
@@ -152,6 +152,32 @@ namespace Barotrauma
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (character.MemLocalState.Count > 120) character.MemLocalState.RemoveRange(0, character.MemLocalState.Count - 120);
|
||||||
|
character.MemState.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void ImpactProjSpecific(float impact, Body body)
|
||||||
|
{
|
||||||
|
float volume = MathHelper.Clamp(impact - 3.0f, 0.5f, 1.0f);
|
||||||
|
|
||||||
|
if (body.UserData is Limb limb && character.Stun <= 0f)
|
||||||
|
{
|
||||||
|
if (impact > 3.0f) { PlayImpactSound(limb); }
|
||||||
|
}
|
||||||
|
else if (body.UserData is Limb || body == Collider.FarseerBody)
|
||||||
|
{
|
||||||
|
if (!character.IsRemotePlayer && impact > ImpactTolerance)
|
||||||
|
{
|
||||||
|
SoundPlayer.PlayDamageSound("LimbBlunt", strongestImpact, Collider);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Character.Controlled == character)
|
||||||
|
{
|
||||||
|
GameMain.GameScreen.Cam.Shake = Math.Min(Math.Max(strongestImpact, GameMain.GameScreen.Cam.Shake), 3.0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (character.MemState.Count < 1) return;
|
if (character.MemState.Count < 1) return;
|
||||||
|
|
||||||
overrideTargetMovement = Vector2.Zero;
|
overrideTargetMovement = Vector2.Zero;
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ namespace Barotrauma
|
|||||||
if (character.Inventory != null)
|
if (character.Inventory != null)
|
||||||
{
|
{
|
||||||
if (!character.LockHands && character.Stun < 0.1f &&
|
if (!character.LockHands && character.Stun < 0.1f &&
|
||||||
(character.SelectedConstruction == null || character.SelectedConstruction.GetComponent<Controller>() == null))
|
(character.SelectedConstruction == null || character.SelectedConstruction?.GetComponent<Controller>()?.User != character))
|
||||||
{
|
{
|
||||||
character.Inventory.Update(deltaTime, cam);
|
character.Inventory.Update(deltaTime, cam);
|
||||||
}
|
}
|
||||||
@@ -321,7 +321,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
if (character.Inventory != null && !character.LockHands)
|
if (character.Inventory != null && !character.LockHands)
|
||||||
{
|
{
|
||||||
character.Inventory.Locked = (character.SelectedConstruction != null && character.SelectedConstruction.GetComponent<Controller>() != null);
|
character.Inventory.Locked = (character.SelectedConstruction?.GetComponent<Controller>()?.User == character);
|
||||||
character.Inventory.DrawOwn(spriteBatch);
|
character.Inventory.DrawOwn(spriteBatch);
|
||||||
character.Inventory.CurrentLayout = CharacterHealth.OpenHealthWindow == null && character.SelectedCharacter == null ?
|
character.Inventory.CurrentLayout = CharacterHealth.OpenHealthWindow == null && character.SelectedCharacter == null ?
|
||||||
CharacterInventory.Layout.Default :
|
CharacterInventory.Layout.Default :
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ namespace Barotrauma
|
|||||||
Job.Name, textColor: Job.Prefab.UIColor, font: font);
|
Job.Name, textColor: Job.Prefab.UIColor, font: font);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (personalityTrait != null)
|
if (personalityTrait != null && TextManager.Language == "English")
|
||||||
{
|
{
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), headerTextArea.RectTransform),
|
||||||
TextManager.Get("PersonalityTrait") + ": " + personalityTrait.Name, font: font);
|
TextManager.Get("PersonalityTrait") + ": " + personalityTrait.Name, font: font);
|
||||||
|
|||||||
@@ -733,7 +733,9 @@ namespace Barotrauma
|
|||||||
Rectangle.Union(HUDLayoutSettings.AfflictionAreaLeft, HUDLayoutSettings.HealthBarAreaLeft) :
|
Rectangle.Union(HUDLayoutSettings.AfflictionAreaLeft, HUDLayoutSettings.HealthBarAreaLeft) :
|
||||||
Rectangle.Union(HUDLayoutSettings.AfflictionAreaRight, HUDLayoutSettings.HealthBarAreaRight);
|
Rectangle.Union(HUDLayoutSettings.AfflictionAreaRight, HUDLayoutSettings.HealthBarAreaRight);
|
||||||
|
|
||||||
if (Character.AllowInput && UseHealthWindow && hoverArea.Contains(PlayerInput.MousePosition) && Inventory.SelectedSlot == null)
|
if (Character.AllowInput && UseHealthWindow &&
|
||||||
|
Character.SelectedConstruction?.GetComponent<Controller>()?.User != Character &&
|
||||||
|
hoverArea.Contains(PlayerInput.MousePosition) && Inventory.SelectedSlot == null)
|
||||||
{
|
{
|
||||||
healthBar.State = GUIComponent.ComponentState.Hover;
|
healthBar.State = GUIComponent.ComponentState.Hover;
|
||||||
if (PlayerInput.LeftButtonClicked())
|
if (PlayerInput.LeftButtonClicked())
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace Barotrauma
|
|||||||
var skillContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 0.5f), paddedFrame.RectTransform)
|
var skillContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 0.5f), paddedFrame.RectTransform)
|
||||||
{ RelativeOffset = new Vector2(0.0f, 0.2f + descriptionBlock.RectTransform.RelativeSize.Y) });
|
{ RelativeOffset = new Vector2(0.0f, 0.2f + descriptionBlock.RectTransform.RelativeSize.Y) });
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillContainer.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillContainer.RectTransform),
|
||||||
TextManager.Get("Skills") + ": ", font: GUI.LargeFont);
|
TextManager.Get("Skills"), font: GUI.LargeFont);
|
||||||
foreach (SkillPrefab skill in Skills)
|
foreach (SkillPrefab skill in Skills)
|
||||||
{
|
{
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillContainer.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), skillContainer.RectTransform),
|
||||||
@@ -30,7 +30,7 @@ namespace Barotrauma
|
|||||||
var itemContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 0.5f), paddedFrame.RectTransform, Anchor.TopRight)
|
var itemContainer = new GUILayoutGroup(new RectTransform(new Vector2(0.45f, 0.5f), paddedFrame.RectTransform, Anchor.TopRight)
|
||||||
{ RelativeOffset = new Vector2(0.0f, 0.2f + descriptionBlock.RectTransform.RelativeSize.Y) });
|
{ RelativeOffset = new Vector2(0.0f, 0.2f + descriptionBlock.RectTransform.RelativeSize.Y) });
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), itemContainer.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), itemContainer.RectTransform),
|
||||||
TextManager.Get("Items") + ": ", font: GUI.LargeFont);
|
TextManager.Get("Items", fallBackTag: "mapentitycategory.equipment"), font: GUI.LargeFont);
|
||||||
foreach (string itemName in ItemNames)
|
foreach (string itemName in ItemNames)
|
||||||
{
|
{
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), itemContainer.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.0f), itemContainer.RectTransform),
|
||||||
|
|||||||
@@ -56,11 +56,11 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ScalableFont(XElement element, GraphicsDevice gd = null)
|
public ScalableFont(XElement element, GraphicsDevice gd = null)
|
||||||
: this (element.GetAttributeString("file", ""), (uint)element.GetAttributeInt("size", 14), gd)
|
: this (element.GetAttributeString("file", ""), (uint)element.GetAttributeInt("size", 14), gd, element.GetAttributeBool("dynamicloading", false))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public ScalableFont(string filename, uint size, GraphicsDevice gd = null)
|
public ScalableFont(string filename, uint size, GraphicsDevice gd = null, bool dynamicLoading = false)
|
||||||
{
|
{
|
||||||
if (Lib == null) Lib = new Library();
|
if (Lib == null) Lib = new Library();
|
||||||
this.filename = filename;
|
this.filename = filename;
|
||||||
@@ -310,6 +310,11 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint charIndex = text[i];
|
uint charIndex = text[i];
|
||||||
|
if (DynamicLoading && !texCoords.ContainsKey(charIndex))
|
||||||
|
{
|
||||||
|
DynamicRenderAtlas(graphicsDevice, charIndex);
|
||||||
|
}
|
||||||
|
|
||||||
if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square
|
if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square
|
||||||
{
|
{
|
||||||
if (gd.texIndex >= 0)
|
if (gd.texIndex >= 0)
|
||||||
@@ -344,7 +349,13 @@ namespace Barotrauma
|
|||||||
currentPos.Y += baseHeight * 1.8f;
|
currentPos.Y += baseHeight * 1.8f;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint charIndex = text[i];
|
uint charIndex = text[i];
|
||||||
|
if (DynamicLoading && !texCoords.ContainsKey(charIndex))
|
||||||
|
{
|
||||||
|
DynamicRenderAtlas(graphicsDevice, charIndex);
|
||||||
|
}
|
||||||
|
|
||||||
if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square
|
if (texCoords.TryGetValue(charIndex, out GlyphData gd) || texCoords.TryGetValue(9633, out gd)) //9633 = white square
|
||||||
{
|
{
|
||||||
if (gd.texIndex >= 0)
|
if (gd.texIndex >= 0)
|
||||||
@@ -376,6 +387,10 @@ namespace Barotrauma
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
uint charIndex = text[i];
|
uint charIndex = text[i];
|
||||||
|
if (DynamicLoading && !texCoords.ContainsKey(charIndex))
|
||||||
|
{
|
||||||
|
DynamicRenderAtlas(graphicsDevice, charIndex);
|
||||||
|
}
|
||||||
if (texCoords.TryGetValue(charIndex, out GlyphData gd))
|
if (texCoords.TryGetValue(charIndex, out GlyphData gd))
|
||||||
{
|
{
|
||||||
currentLineX += gd.advance;
|
currentLineX += gd.advance;
|
||||||
@@ -389,6 +404,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
Vector2 retVal = Vector2.Zero;
|
Vector2 retVal = Vector2.Zero;
|
||||||
retVal.Y = baseHeight * 1.8f;
|
retVal.Y = baseHeight * 1.8f;
|
||||||
|
if (DynamicLoading && !texCoords.ContainsKey(c))
|
||||||
|
{
|
||||||
|
DynamicRenderAtlas(graphicsDevice, c);
|
||||||
|
}
|
||||||
if (texCoords.TryGetValue(c, out GlyphData gd))
|
if (texCoords.TryGetValue(c, out GlyphData gd))
|
||||||
{
|
{
|
||||||
retVal.X = gd.advance;
|
retVal.X = gd.advance;
|
||||||
|
|||||||
@@ -167,8 +167,6 @@ namespace Barotrauma
|
|||||||
set { enabled = value; }
|
set { enabled = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TileSprites;
|
|
||||||
|
|
||||||
private static GUITextBlock toolTipBlock;
|
private static GUITextBlock toolTipBlock;
|
||||||
|
|
||||||
public Vector2 Center
|
public Vector2 Center
|
||||||
|
|||||||
@@ -12,6 +12,10 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private XElement configElement;
|
private XElement configElement;
|
||||||
|
|
||||||
|
private GraphicsDevice graphicsDevice;
|
||||||
|
|
||||||
|
private ScalableFont defaultFont;
|
||||||
|
|
||||||
public ScalableFont Font { get; private set; }
|
public ScalableFont Font { get; private set; }
|
||||||
public ScalableFont SmallFont { get; private set; }
|
public ScalableFont SmallFont { get; private set; }
|
||||||
public ScalableFont LargeFont { get; private set; }
|
public ScalableFont LargeFont { get; private set; }
|
||||||
@@ -83,6 +87,26 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns the default font of the currently selected language
|
||||||
|
/// </summary>
|
||||||
|
public ScalableFont LoadCurrentDefaultFont()
|
||||||
|
{
|
||||||
|
defaultFont?.Dispose();
|
||||||
|
defaultFont = null;
|
||||||
|
foreach (XElement subElement in configElement.Elements())
|
||||||
|
{
|
||||||
|
switch (subElement.Name.ToString().ToLowerInvariant())
|
||||||
|
{
|
||||||
|
case "font":
|
||||||
|
defaultFont = LoadFont(subElement, graphicsDevice);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultFont;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void RescaleFonts()
|
private void RescaleFonts()
|
||||||
{
|
{
|
||||||
foreach (XElement subElement in configElement.Elements())
|
foreach (XElement subElement in configElement.Elements())
|
||||||
@@ -113,9 +137,10 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private ScalableFont LoadFont(XElement element, GraphicsDevice graphicsDevice)
|
private ScalableFont LoadFont(XElement element, GraphicsDevice graphicsDevice)
|
||||||
{
|
{
|
||||||
string file = GetFontFilePath(element);
|
string file = GetFontFilePath(element);
|
||||||
uint size = GetFontSize(element);
|
uint size = GetFontSize(element);
|
||||||
return new ScalableFont(file, size, graphicsDevice);
|
bool dynamicLoading = GetFontDynamicLoading(element);
|
||||||
|
return new ScalableFont(file, size, graphicsDevice, dynamicLoading);
|
||||||
}
|
}
|
||||||
|
|
||||||
private uint GetFontSize(XElement element)
|
private uint GetFontSize(XElement element)
|
||||||
@@ -146,6 +171,20 @@ namespace Barotrauma
|
|||||||
return element.GetAttributeString("file", "");
|
return element.GetAttributeString("file", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool GetFontDynamicLoading(XElement element)
|
||||||
|
{
|
||||||
|
foreach (XElement subElement in element.Elements())
|
||||||
|
{
|
||||||
|
if (subElement.Name.ToString().ToLowerInvariant() != "override") { continue; }
|
||||||
|
string language = subElement.GetAttributeString("language", "").ToLowerInvariant();
|
||||||
|
if (GameMain.Config.Language.ToLowerInvariant() == language)
|
||||||
|
{
|
||||||
|
return subElement.GetAttributeBool("dynamicloading", false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return element.GetAttributeBool("dynamicloading", false);
|
||||||
|
}
|
||||||
|
|
||||||
public GUIComponentStyle GetComponentStyle(string name)
|
public GUIComponentStyle GetComponentStyle(string name)
|
||||||
{
|
{
|
||||||
componentStyles.TryGetValue(name.ToLowerInvariant(), out GUIComponentStyle style);
|
componentStyles.TryGetValue(name.ToLowerInvariant(), out GUIComponentStyle style);
|
||||||
|
|||||||
@@ -5,15 +5,19 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Barotrauma.Media;
|
using Barotrauma.Media;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace Barotrauma
|
namespace Barotrauma
|
||||||
{
|
{
|
||||||
class LoadingScreen
|
class LoadingScreen
|
||||||
{
|
{
|
||||||
private Texture2D backgroundTexture, monsterTexture, titleTexture;
|
private Texture2D backgroundTexture;
|
||||||
|
|
||||||
private RenderTarget2D renderTarget;
|
private RenderTarget2D renderTarget;
|
||||||
|
|
||||||
|
private Sprite languageSelectionCursor;
|
||||||
|
private ScalableFont languageSelectionFont;
|
||||||
|
|
||||||
private Video splashScreen;
|
private Video splashScreen;
|
||||||
public Video SplashScreen
|
public Video SplashScreen
|
||||||
{
|
{
|
||||||
@@ -37,35 +41,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private string selectedTip;
|
private string selectedTip;
|
||||||
|
|
||||||
public Vector2 CenterPosition;
|
|
||||||
|
|
||||||
public Vector2 TitlePosition;
|
|
||||||
|
|
||||||
private object loadMutex = new object();
|
|
||||||
private float? loadState;
|
|
||||||
|
|
||||||
public Vector2 TitleSize
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (loadMutex)
|
|
||||||
{
|
|
||||||
return splashScreen;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (loadMutex)
|
|
||||||
{
|
|
||||||
splashScreen = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private float state;
|
|
||||||
|
|
||||||
private string selectedTip;
|
|
||||||
|
|
||||||
public Vector2 BackgroundPosition;
|
public Vector2 BackgroundPosition;
|
||||||
|
|
||||||
public Vector2 TitlePosition;
|
public Vector2 TitlePosition;
|
||||||
@@ -99,6 +74,12 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool WaitForLanguageSelection
|
public bool WaitForLanguageSelection
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
set;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoadingScreen(GraphicsDevice graphics)
|
||||||
{
|
{
|
||||||
backgroundTexture = TextureLoader.FromFile("Content/UI/titleBackground.png");
|
backgroundTexture = TextureLoader.FromFile("Content/UI/titleBackground.png");
|
||||||
|
|
||||||
@@ -120,7 +101,7 @@ namespace Barotrauma
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
DrawSplashScreen(spriteBatch);
|
DrawSplashScreen(spriteBatch);
|
||||||
if (SplashScreen!=null && SplashScreen.IsPlaying) return;
|
if (SplashScreen != null && SplashScreen.IsPlaying) return;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@@ -129,19 +110,26 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var titleStyle = GUI.Style?.GetComponentStyle("TitleText");
|
||||||
|
Sprite titleSprite = null;
|
||||||
|
if (!WaitForLanguageSelection && titleStyle != null && titleStyle.Sprites.ContainsKey(GUIComponent.ComponentState.None))
|
||||||
|
{
|
||||||
|
titleSprite = titleStyle.Sprites[GUIComponent.ComponentState.None].First()?.Sprite;
|
||||||
|
}
|
||||||
|
|
||||||
drawn = true;
|
drawn = true;
|
||||||
|
|
||||||
graphics.SetRenderTarget(renderTarget);
|
graphics.SetRenderTarget(renderTarget);
|
||||||
|
|
||||||
Scale = GameMain.GraphicsHeight / 1500.0f;
|
float backgroundScale = GameMain.GraphicsHeight / 1500.0f;
|
||||||
|
float titleScale = MathHelper.SmoothStep(0.8f, 1.0f, state / 10.0f) * GameMain.GraphicsHeight / 1000.0f;
|
||||||
|
|
||||||
state += deltaTime;
|
state += deltaTime;
|
||||||
|
|
||||||
if (DrawLoadingText)
|
if (DrawLoadingText)
|
||||||
{
|
{
|
||||||
CenterPosition = new Vector2(GameMain.GraphicsWidth * 0.3f, GameMain.GraphicsHeight / 2.0f);
|
BackgroundPosition = new Vector2(GameMain.GraphicsWidth * 0.3f, GameMain.GraphicsHeight * 0.45f);
|
||||||
TitlePosition = CenterPosition + new Vector2(-0.0f + (float)Math.Sqrt(state) * 220.0f, 0.0f) * Scale;
|
TitlePosition = new Vector2(GameMain.GraphicsWidth * 0.5f, GameMain.GraphicsHeight * 0.45f);
|
||||||
TitlePosition.X = Math.Min(TitlePosition.X, (float)GameMain.GraphicsWidth / 2.0f);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
|
||||||
@@ -149,15 +137,9 @@ namespace Barotrauma
|
|||||||
|
|
||||||
spriteBatch.Draw(backgroundTexture, BackgroundPosition, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f,
|
spriteBatch.Draw(backgroundTexture, BackgroundPosition, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f,
|
||||||
new Vector2(backgroundTexture.Width / 2.0f, backgroundTexture.Height / 2.0f),
|
new Vector2(backgroundTexture.Width / 2.0f, backgroundTexture.Height / 2.0f),
|
||||||
Scale * 1.5f, SpriteEffects.None, 0.2f);
|
backgroundScale * 1.5f, SpriteEffects.None, 0.2f);
|
||||||
|
|
||||||
spriteBatch.Draw(monsterTexture,
|
titleSprite?.Draw(spriteBatch, TitlePosition, Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), scale: titleScale);
|
||||||
CenterPosition + new Vector2((state % 40) * 100.0f - 1800.0f, (state % 40) * 30.0f - 200.0f) * Scale, null,
|
|
||||||
Color.White, 0.0f, Vector2.Zero, Scale, SpriteEffects.None, 0.1f);
|
|
||||||
|
|
||||||
spriteBatch.Draw(titleTexture,
|
|
||||||
TitlePosition, null,
|
|
||||||
Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f);
|
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|
||||||
@@ -171,10 +153,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
|
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
|
||||||
|
|
||||||
spriteBatch.Draw(titleTexture,
|
|
||||||
TitlePosition, null,
|
|
||||||
Color.White * Math.Min((state - 3.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f);
|
|
||||||
|
|
||||||
titleSprite?.Draw(spriteBatch, TitlePosition, Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), scale: titleScale);
|
titleSprite?.Draw(spriteBatch, TitlePosition, Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), scale: titleScale);
|
||||||
|
|
||||||
if (WaitForLanguageSelection)
|
if (WaitForLanguageSelection)
|
||||||
@@ -219,6 +197,28 @@ namespace Barotrauma
|
|||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DrawLanguageSelectionPrompt(SpriteBatch spriteBatch, GraphicsDevice graphicsDevice)
|
||||||
|
{
|
||||||
|
if (languageSelectionFont == null)
|
||||||
|
{
|
||||||
|
languageSelectionFont = new ScalableFont("Content/Fonts/BebasNeue-Regular.otf", 28, graphicsDevice);
|
||||||
|
}
|
||||||
|
if (languageSelectionCursor == null)
|
||||||
|
{
|
||||||
|
languageSelectionCursor = new Sprite("Content/UI/cursor.png", Vector2.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 textPos = new Vector2(GameMain.GraphicsWidth / 2, GameMain.GraphicsHeight * 0.25f);
|
||||||
|
Vector2 textSpacing = new Vector2(0.0f, (GameMain.GraphicsHeight * 0.5f) / TextManager.AvailableLanguages.Count());
|
||||||
|
foreach (string language in TextManager.AvailableLanguages)
|
||||||
|
{
|
||||||
|
languageSelectionFont.DrawString(spriteBatch, language, textPos - languageSelectionFont.MeasureString(language) / 2, Color.White * 0.8f);
|
||||||
|
textPos += textSpacing;
|
||||||
|
}
|
||||||
|
|
||||||
|
languageSelectionCursor.Draw(spriteBatch, PlayerInput.LatestMousePosition);
|
||||||
|
}
|
||||||
|
|
||||||
private void DrawSplashScreen(SpriteBatch spriteBatch)
|
private void DrawSplashScreen(SpriteBatch spriteBatch)
|
||||||
{
|
{
|
||||||
if (SplashScreen != null)
|
if (SplashScreen != null)
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentVideo = CreateVideo(scaledVideoResolution);
|
currentVideo = CreateVideo(scaledVideoResolution);
|
||||||
title.Text = TextManager.Get(contentId);
|
title.Text = textSettings != null ? TextManager.Get(contentId) : string.Empty;
|
||||||
textContent.Text = textSettings != null ? textSettings.Text : string.Empty;
|
textContent.Text = textSettings != null ? textSettings.Text : string.Empty;
|
||||||
objectiveText.Text = objective;
|
objectiveText.Text = objective;
|
||||||
|
|
||||||
|
|||||||
@@ -178,7 +178,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
GUI.KeyboardDispatcher = new EventInput.KeyboardDispatcher(Window);
|
GUI.KeyboardDispatcher = new EventInput.KeyboardDispatcher(Window);
|
||||||
|
|
||||||
|
|
||||||
PerformanceCounter = new PerformanceCounter();
|
PerformanceCounter = new PerformanceCounter();
|
||||||
|
|
||||||
IsFixedTimeStep = false;
|
IsFixedTimeStep = false;
|
||||||
@@ -322,6 +321,11 @@ namespace Barotrauma
|
|||||||
DebugConsole.NewMessage("LOADING COROUTINE", Color.Lime);
|
DebugConsole.NewMessage("LOADING COROUTINE", Color.Lime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (TitleScreen.WaitForLanguageSelection)
|
||||||
|
{
|
||||||
|
yield return CoroutineStatus.Running;
|
||||||
|
}
|
||||||
|
|
||||||
SoundManager = new Sounds.SoundManager();
|
SoundManager = new Sounds.SoundManager();
|
||||||
SoundManager.SetCategoryGainMultiplier("default", Config.SoundVolume);
|
SoundManager.SetCategoryGainMultiplier("default", Config.SoundVolume);
|
||||||
SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume);
|
SoundManager.SetCategoryGainMultiplier("ui", Config.SoundVolume);
|
||||||
@@ -371,10 +375,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
yield return CoroutineStatus.Running;
|
yield return CoroutineStatus.Running;
|
||||||
|
|
||||||
|
|
||||||
LightManager = new Lights.LightManager(base.GraphicsDevice, Content);
|
LightManager = new Lights.LightManager(base.GraphicsDevice, Content);
|
||||||
|
|
||||||
WaterRenderer.Instance = new WaterRenderer(base.GraphicsDevice, Content);
|
|
||||||
TitleScreen.LoadState = 1.0f;
|
TitleScreen.LoadState = 1.0f;
|
||||||
yield return CoroutineStatus.Running;
|
yield return CoroutineStatus.Running;
|
||||||
|
|
||||||
@@ -525,7 +527,7 @@ namespace Barotrauma
|
|||||||
protected override void UnloadContent()
|
protected override void UnloadContent()
|
||||||
{
|
{
|
||||||
Video.Close();
|
Video.Close();
|
||||||
SoundManager.Dispose();
|
SoundManager?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -74,12 +74,17 @@ namespace Barotrauma
|
|||||||
public CrewManager(XElement element, bool isSinglePlayer)
|
public CrewManager(XElement element, bool isSinglePlayer)
|
||||||
: this(isSinglePlayer)
|
: this(isSinglePlayer)
|
||||||
{
|
{
|
||||||
if (!isSinglePlayer)
|
if (GameMain.Client != null)
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError("Cannot add messages to single player chat box in multiplayer mode!\n" + Environment.StackTrace);
|
//let the server create random conversations in MP
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(text)) { return; }
|
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
|
||||||
|
c.AIController is HumanAIController &&
|
||||||
|
!c.IsDead &&
|
||||||
|
c.SpeechImpediment <= 100.0f);
|
||||||
|
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
|
||||||
|
}
|
||||||
|
|
||||||
var characterInfo = new CharacterInfo(subElement);
|
var characterInfo = new CharacterInfo(subElement);
|
||||||
characterInfos.Add(characterInfo);
|
characterInfos.Add(characterInfo);
|
||||||
@@ -90,7 +95,6 @@ namespace Barotrauma
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ChatBox.AddMessage(ChatMessage.Create(senderName, text, messageType, sender));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
partial void InitProjectSpecific()
|
partial void InitProjectSpecific()
|
||||||
@@ -239,27 +243,24 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public IEnumerable<Character> GetCharacters()
|
public IEnumerable<Character> GetCharacters()
|
||||||
{
|
{
|
||||||
if (character?.Inventory == null) return null;
|
if (characterInfos.Contains(characterInfo))
|
||||||
|
{
|
||||||
|
DebugConsole.ThrowError("Tried to add the same character info to CrewManager twice.\n" + Environment.StackTrace);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var radioItem = character.Inventory.Items.FirstOrDefault(it => it != null && it.GetComponent<WifiComponent>() != null);
|
characterInfos.Add(characterInfo);
|
||||||
if (radioItem == null) return null;
|
|
||||||
if (requireEquipped && !character.HasEquippedItem(radioItem)) return null;
|
|
||||||
|
|
||||||
return radioItem.GetComponent<WifiComponent>();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<CharacterInfo> GetCharacterInfos()
|
public IEnumerable<CharacterInfo> GetCharacterInfos()
|
||||||
{
|
{
|
||||||
if (GameMain.Client != null)
|
if (character == null)
|
||||||
{
|
{
|
||||||
//let the server create random conversations in MP
|
DebugConsole.ThrowError("Tried to remove a null character from CrewManager.\n" + Environment.StackTrace);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
|
characters.Remove(character);
|
||||||
c.AIController is HumanAIController &&
|
if (removeInfo) characterInfos.Remove(character.Info);
|
||||||
!c.IsDead &&
|
|
||||||
c.SpeechImpediment <= 100.0f);
|
|
||||||
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddCharacter(Character character)
|
public void AddCharacter(Character character)
|
||||||
@@ -633,9 +634,183 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
characterListBox.BarScroll = roundedPos;
|
characterListBox.BarScroll = roundedPos;
|
||||||
}
|
}
|
||||||
soundIcon.Visible = !muted && !mutedLocally;
|
var characterArea = new GUIButton(new RectTransform(new Point(characterInfoWidth, frame.Rect.Height), frame.RectTransform, Anchor.CenterLeft), style: "GUITextBox")
|
||||||
soundIconDisabled.Visible = muted || mutedLocally;
|
{
|
||||||
soundIconDisabled.ToolTip = TextManager.Get(mutedLocally ? "MutedLocally" : "MutedGlobally");
|
UserData = character,
|
||||||
|
Color = frame.Color,
|
||||||
|
SelectedColor = frame.SelectedColor,
|
||||||
|
HoverColor = frame.HoverColor,
|
||||||
|
ToolTip = characterToolTip
|
||||||
|
};
|
||||||
|
|
||||||
|
var soundIcon = new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) },
|
||||||
|
"GUISoundIcon")
|
||||||
|
{
|
||||||
|
UserData = "soundicon",
|
||||||
|
CanBeFocused = false,
|
||||||
|
Visible = true
|
||||||
|
};
|
||||||
|
soundIcon.Color = new Color(soundIcon.Color, 0.0f);
|
||||||
|
new GUIImage(new RectTransform(new Point((int)(characterArea.Rect.Height * 0.5f)), characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(5, 0) },
|
||||||
|
"GUISoundIconDisabled")
|
||||||
|
{
|
||||||
|
UserData = "soundicondisabled",
|
||||||
|
CanBeFocused = true,
|
||||||
|
Visible = false
|
||||||
|
};
|
||||||
|
|
||||||
|
if (isSinglePlayer)
|
||||||
|
{
|
||||||
|
characterArea.OnClicked = CharacterClicked;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
characterArea.CanBeFocused = false;
|
||||||
|
characterArea.CanBeSelected = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var characterImage = new GUICustomComponent(new RectTransform(new Point(characterArea.Rect.Height), characterArea.RectTransform, Anchor.CenterLeft),
|
||||||
|
onDraw: (sb, component) => character.Info.DrawIcon(sb, component.Rect.Center.ToVector2(), targetAreaSize: component.Rect.Size.ToVector2()))
|
||||||
|
{
|
||||||
|
CanBeFocused = false,
|
||||||
|
HoverColor = Color.White,
|
||||||
|
SelectedColor = Color.White,
|
||||||
|
ToolTip = characterToolTip
|
||||||
|
};
|
||||||
|
|
||||||
|
var characterName = new GUITextBlock(new RectTransform(new Point(characterArea.Rect.Width - characterImage.Rect.Width - soundIcon.Rect.Width - 10, characterArea.Rect.Height),
|
||||||
|
characterArea.RectTransform, Anchor.CenterRight) { AbsoluteOffset = new Point(soundIcon.Rect.Width + 10, 0) },
|
||||||
|
character.Name, textColor: frame.Color, font: GUI.SmallFont, wrap: true)
|
||||||
|
{
|
||||||
|
Color = frame.Color,
|
||||||
|
HoverColor = Color.Transparent,
|
||||||
|
SelectedColor = Color.Transparent,
|
||||||
|
CanBeFocused = false,
|
||||||
|
ToolTip = characterToolTip,
|
||||||
|
AutoScale = true
|
||||||
|
};
|
||||||
|
|
||||||
|
//---------------- order buttons ----------------
|
||||||
|
|
||||||
|
var orderButtonFrame = new GUILayoutGroup(new RectTransform(new Point(100, frame.Rect.Height), frame.RectTransform)
|
||||||
|
{ AbsoluteOffset = new Point(characterInfoWidth + spacing, 0) },
|
||||||
|
isHorizontal: true, childAnchor: Anchor.CenterLeft)
|
||||||
|
{
|
||||||
|
AbsoluteSpacing = (int)(10 * GUI.Scale),
|
||||||
|
UserData = "orderbuttons",
|
||||||
|
CanBeFocused = false
|
||||||
|
};
|
||||||
|
|
||||||
|
//listbox for holding the orders inappropriate for this character
|
||||||
|
//(so we can easily toggle their visibility)
|
||||||
|
var wrongOrderList = new GUIListBox(new RectTransform(new Point(50, orderButtonFrame.Rect.Height), orderButtonFrame.RectTransform), isHorizontal: true, style: null)
|
||||||
|
{
|
||||||
|
ScrollBarEnabled = false,
|
||||||
|
ScrollBarVisible = false,
|
||||||
|
Enabled = false,
|
||||||
|
Spacing = spacing,
|
||||||
|
ClampMouseRectToParent = false
|
||||||
|
};
|
||||||
|
wrongOrderList.Content.ClampMouseRectToParent = false;
|
||||||
|
|
||||||
|
for (int i = 0; i < orders.Count; i++)
|
||||||
|
{
|
||||||
|
var order = orders[i];
|
||||||
|
if (order.TargetAllCharacters) continue;
|
||||||
|
|
||||||
|
RectTransform btnParent = (i >= correctOrderCount + neutralOrderCount) ?
|
||||||
|
wrongOrderList.Content.RectTransform :
|
||||||
|
orderButtonFrame.RectTransform;
|
||||||
|
|
||||||
|
var btn = new GUIButton(new RectTransform(new Point(iconSize, iconSize), btnParent, Anchor.CenterLeft),
|
||||||
|
style: null)
|
||||||
|
{
|
||||||
|
UserData = order
|
||||||
|
};
|
||||||
|
|
||||||
|
new GUIFrame(new RectTransform(new Vector2(1.5f), btn.RectTransform, Anchor.Center), "OuterGlow")
|
||||||
|
{
|
||||||
|
Color = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.8f,
|
||||||
|
HoverColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 1.0f,
|
||||||
|
PressedColor = Color.Lerp(order.Color, frame.Color, 0.5f) * 0.6f,
|
||||||
|
UserData = "selected",
|
||||||
|
CanBeFocused = false,
|
||||||
|
Visible = false
|
||||||
|
};
|
||||||
|
|
||||||
|
var img = new GUIImage(new RectTransform(Vector2.One, btn.RectTransform), order.Prefab.SymbolSprite);
|
||||||
|
img.Scale = iconSize / (float)img.SourceRect.Width;
|
||||||
|
img.Color = Color.Lerp(order.Color, frame.Color, 0.5f);
|
||||||
|
img.ToolTip = order.Name;
|
||||||
|
img.HoverColor = Color.Lerp(img.Color, Color.White, 0.5f);
|
||||||
|
|
||||||
|
btn.OnClicked += (GUIButton button, object userData) =>
|
||||||
|
{
|
||||||
|
if (Character.Controlled == null || Character.Controlled.SpeechImpediment >= 100.0f) return false;
|
||||||
|
|
||||||
|
if (btn.GetChildByUserData("selected").Visible)
|
||||||
|
{
|
||||||
|
SetCharacterOrder(character, Order.PrefabList.Find(o => o.AITag == "dismissed"), null, Character.Controlled);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (order.ItemComponentType != null || order.ItemIdentifiers.Length > 0 || order.Options.Length > 1)
|
||||||
|
{
|
||||||
|
CreateOrderTargetFrame(button, character, order);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetCharacterOrder(character, order, null, Character.Controlled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
btn.UserData = order;
|
||||||
|
btn.ToolTip = order.Name;
|
||||||
|
|
||||||
|
//divider between different groups of orders
|
||||||
|
if (i == correctOrderCount - 1 || i == correctOrderCount + neutralOrderCount - 1)
|
||||||
|
{
|
||||||
|
//TODO: divider sprite
|
||||||
|
new GUIFrame(new RectTransform(new Point(8, iconSize), orderButtonFrame.RectTransform), style: "GUIButton");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var toggleWrongOrderBtn = new GUIButton(new RectTransform(new Point((int)(30 * GUI.Scale), wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
|
||||||
|
"", style: "UIToggleButton")
|
||||||
|
{
|
||||||
|
UserData = "togglewrongorder",
|
||||||
|
CanBeFocused = false
|
||||||
|
};
|
||||||
|
|
||||||
|
wrongOrderList.RectTransform.NonScaledSize = new Point(
|
||||||
|
wrongOrderList.Content.Children.Sum(c => c.Rect.Width + wrongOrderList.Spacing),
|
||||||
|
wrongOrderList.RectTransform.NonScaledSize.Y);
|
||||||
|
wrongOrderList.RectTransform.SetAsLastChild();
|
||||||
|
|
||||||
|
new GUIFrame(new RectTransform(new Point(
|
||||||
|
wrongOrderList.Rect.Width - toggleWrongOrderBtn.Rect.Width - wrongOrderList.Spacing * 2,
|
||||||
|
wrongOrderList.Rect.Height), wrongOrderList.Content.RectTransform),
|
||||||
|
style: null)
|
||||||
|
{
|
||||||
|
CanBeFocused = false
|
||||||
|
};
|
||||||
|
|
||||||
|
//scale to fit the content
|
||||||
|
orderButtonFrame.RectTransform.NonScaledSize = new Point(
|
||||||
|
orderButtonFrame.Children.Sum(c => c.Rect.Width + orderButtonFrame.AbsoluteSpacing),
|
||||||
|
orderButtonFrame.RectTransform.NonScaledSize.Y);
|
||||||
|
|
||||||
|
frame.RectTransform.NonScaledSize = new Point(
|
||||||
|
characterInfoWidth + spacing + (orderButtonFrame.Rect.Width - wrongOrderList.Rect.Width),
|
||||||
|
frame.RectTransform.NonScaledSize.Y);
|
||||||
|
|
||||||
|
characterListBox.RectTransform.NonScaledSize = new Point(
|
||||||
|
characterListBox.Content.Children.Max(c => c.Rect.Width) + wrongOrderList.Rect.Width,
|
||||||
|
characterListBox.RectTransform.NonScaledSize.Y);
|
||||||
|
characterListBox.Content.RectTransform.NonScaledSize = characterListBox.RectTransform.NonScaledSize;
|
||||||
|
characterListBox.UpdateScrollBarSize();
|
||||||
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<object> KillCharacterAnim(GUIComponent component)
|
private IEnumerable<object> KillCharacterAnim(GUIComponent component)
|
||||||
@@ -779,6 +954,12 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
List<Character> availableSpeakers = Character.CharacterList.FindAll(c =>
|
||||||
|
c.AIController is HumanAIController &&
|
||||||
|
!c.IsDead &&
|
||||||
|
c.SpeechImpediment <= 100.0f);
|
||||||
|
pendingConversationLines.AddRange(NPCConversation.CreateRandom(availableSpeakers));
|
||||||
|
}
|
||||||
|
|
||||||
character.SetOrder(order, option, orderGiver, speak: orderGiver != character);
|
character.SetOrder(order, option, orderGiver, speak: orderGiver != character);
|
||||||
if (IsSinglePlayer)
|
if (IsSinglePlayer)
|
||||||
@@ -836,19 +1017,23 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//only one target (or an order with no particular targets), just show options
|
|
||||||
else
|
character.SetOrder(order, option, orderGiver, speak: orderGiver != character);
|
||||||
|
if (IsSinglePlayer)
|
||||||
{
|
{
|
||||||
orderTargetFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.2f + order.Options.Length * 0.1f, 0.18f), GUI.Canvas)
|
orderGiver?.Speak(
|
||||||
{ AbsoluteOffset = new Point(orderButton.Rect.Center.X, orderButton.Rect.Bottom) },
|
order.GetChatMessage(character.Name, orderGiver.CurrentHull?.DisplayName, givingOrderToSelf: character == orderGiver, orderOption: option), null);
|
||||||
isHorizontal: true, childAnchor: Anchor.BottomLeft)
|
}
|
||||||
|
else if (orderGiver != null)
|
||||||
|
{
|
||||||
|
OrderChatMessage msg = new OrderChatMessage(order, option, order.TargetItemComponent?.Item, character, orderGiver);
|
||||||
|
if (GameMain.Client != null)
|
||||||
{
|
{
|
||||||
UserData = character,
|
GameMain.Client.SendChatMessage(msg);
|
||||||
Stretch = true
|
}
|
||||||
};
|
}
|
||||||
//line connecting the order button to the option buttons
|
DisplayCharacterOrder(character, order);
|
||||||
//TODO: sprite
|
}
|
||||||
new GUIFrame(new RectTransform(new Vector2(0.5f, 1.0f), orderTargetFrame.RectTransform), style: null);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Create the UI panel that's used to select the target and options for a given order
|
/// Create the UI panel that's used to select the target and options for a given order
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ namespace Barotrauma.Tutorials
|
|||||||
infoBox = CreateInfoFrame(TextManager.Get(activeContentSegment.Id), tutorialText,
|
infoBox = CreateInfoFrame(TextManager.Get(activeContentSegment.Id), tutorialText,
|
||||||
activeContentSegment.TextContent.GetAttributeInt("width", 300),
|
activeContentSegment.TextContent.GetAttributeInt("width", 300),
|
||||||
activeContentSegment.TextContent.GetAttributeInt("height", 80),
|
activeContentSegment.TextContent.GetAttributeInt("height", 80),
|
||||||
activeContentSegment.TextContent.GetAttributeString("anchor", "Center"), true, StopCurrentContentSegment, () => LoadVideo(activeContentSegment, false));
|
activeContentSegment.TextContent.GetAttributeString("anchor", "Center"), true, StopCurrentContentSegment, () => LoadVideo(activeContentSegment));
|
||||||
break;
|
break;
|
||||||
case TutorialContentTypes.TextOnly:
|
case TutorialContentTypes.TextOnly:
|
||||||
infoBox = CreateInfoFrame(TextManager.Get(activeContentSegment.Id), tutorialText,
|
infoBox = CreateInfoFrame(TextManager.Get(activeContentSegment.Id), tutorialText,
|
||||||
@@ -404,7 +404,8 @@ namespace Barotrauma.Tutorials
|
|||||||
{
|
{
|
||||||
if (ContentRunning) return;
|
if (ContentRunning) return;
|
||||||
ContentRunning = true;
|
ContentRunning = true;
|
||||||
videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, callback: () => ContentRunning = false);
|
LoadVideo(segment);
|
||||||
|
//videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, callback: () => ContentRunning = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ShowSegmentText(TutorialSegment segment)
|
private void ShowSegmentText(TutorialSegment segment)
|
||||||
@@ -419,7 +420,7 @@ namespace Barotrauma.Tutorials
|
|||||||
|
|
||||||
if (segment.ContentType != TutorialContentTypes.TextOnly)
|
if (segment.ContentType != TutorialContentTypes.TextOnly)
|
||||||
{
|
{
|
||||||
videoAction = () => LoadVideo(segment, false);
|
videoAction = () => LoadVideo(segment);
|
||||||
}
|
}
|
||||||
|
|
||||||
infoBox = CreateInfoFrame(TextManager.Get(segment.Id), tutorialText,
|
infoBox = CreateInfoFrame(TextManager.Get(segment.Id), tutorialText,
|
||||||
@@ -566,16 +567,16 @@ namespace Barotrauma.Tutorials
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Video
|
#region Video
|
||||||
protected void LoadVideo(TutorialSegment segment, bool showText = true)
|
protected void LoadVideo(TutorialSegment segment)
|
||||||
{
|
{
|
||||||
if (videoPlayer == null) videoPlayer = new VideoPlayer();
|
if (videoPlayer == null) videoPlayer = new VideoPlayer();
|
||||||
if (showText)
|
if (segment.ContentType != TutorialContentTypes.ManualVideo)
|
||||||
{
|
{
|
||||||
videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, segment.Objective, StopCurrentContentSegment);
|
videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), new VideoPlayer.TextSettings(segment.VideoContent), segment.Id, true, segment.Objective, StopCurrentContentSegment);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), null, segment.Id, true, segment.Objective, null);
|
videoPlayer.LoadContent(playableContentPath, new VideoPlayer.VideoSettings(segment.VideoContent), null, segment.Id, true, string.Empty, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
@@ -132,7 +132,8 @@ namespace Barotrauma
|
|||||||
var languageDD = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.045f), generalLayoutGroup.RectTransform));
|
var languageDD = new GUIDropDown(new RectTransform(new Vector2(1.0f, 0.045f), generalLayoutGroup.RectTransform));
|
||||||
foreach (string language in TextManager.AvailableLanguages)
|
foreach (string language in TextManager.AvailableLanguages)
|
||||||
{
|
{
|
||||||
languageDD.AddItem(TextManager.Get("Language." + language, returnNull: true) ?? language, language);
|
//TODO: display the name of the language in the target language?
|
||||||
|
languageDD.AddItem(language, language);
|
||||||
}
|
}
|
||||||
languageDD.SelectItem(TextManager.Language);
|
languageDD.SelectItem(TextManager.Language);
|
||||||
languageDD.OnSelected = (guiComponent, obj) =>
|
languageDD.OnSelected = (guiComponent, obj) =>
|
||||||
@@ -140,11 +141,15 @@ namespace Barotrauma
|
|||||||
string newLanguage = obj as string;
|
string newLanguage = obj as string;
|
||||||
if (newLanguage == Language) return true;
|
if (newLanguage == Language) return true;
|
||||||
|
|
||||||
UnsavedSettings = true;
|
|
||||||
Language = newLanguage;
|
Language = newLanguage;
|
||||||
ApplySettings();
|
ApplySettings();
|
||||||
|
|
||||||
new GUIMessageBox(TextManager.Get("RestartRequiredLabel"), TextManager.Get("RestartRequiredLanguage"));
|
var msgBox = new GUIMessageBox(TextManager.Get("RestartRequiredLabel"), TextManager.Get("RestartRequiredLanguage"));
|
||||||
|
//change fonts to the default font of the new language to make sure
|
||||||
|
//they can be displayed when for example changing from English to Chinese
|
||||||
|
var defaultFont = GUI.Style.LoadCurrentDefaultFont();
|
||||||
|
msgBox.Header.Font = defaultFont;
|
||||||
|
msgBox.Text.Font = defaultFont;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -78,8 +78,8 @@ namespace Barotrauma.Items.Components
|
|||||||
CanBeFocused = false
|
CanBeFocused = false
|
||||||
};
|
};
|
||||||
|
|
||||||
var pumpSpeedText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), rightArea.RectTransform) { RelativeOffset = new Vector2(0.25f, 0.0f) },
|
var pumpSpeedText = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), rightArea.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.0f) },
|
||||||
"", textAlignment: Alignment.BottomLeft);
|
"", textAlignment: Alignment.BottomLeft, wrap: true);
|
||||||
string pumpSpeedStr = TextManager.Get("PumpSpeed");
|
string pumpSpeedStr = TextManager.Get("PumpSpeed");
|
||||||
pumpSpeedText.TextGetter = () => { return pumpSpeedStr + ": " + (int)flowPercentage + " %"; };
|
pumpSpeedText.TextGetter = () => { return pumpSpeedStr + ": " + (int)flowPercentage + " %"; };
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ namespace Barotrauma.Items.Components
|
|||||||
};
|
};
|
||||||
|
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
|
||||||
TextManager.Get("PumpOut"), textAlignment: Alignment.Center);
|
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")
|
||||||
{
|
{
|
||||||
Step = 0.05f,
|
Step = 0.05f,
|
||||||
@@ -111,7 +111,7 @@ namespace Barotrauma.Items.Components
|
|||||||
};
|
};
|
||||||
|
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
|
new GUITextBlock(new RectTransform(new Vector2(0.15f, 1.0f), sliderArea.RectTransform),
|
||||||
TextManager.Get("PumpIn"), textAlignment: Alignment.Center);
|
TextManager.Get("PumpIn"), textAlignment: Alignment.Center, wrap: true, font: GUI.SmallFont);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnItemLoaded()
|
public override void OnItemLoaded()
|
||||||
|
|||||||
@@ -104,13 +104,13 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.85f), GuiFrame.RectTransform, Anchor.Center), isHorizontal: true)
|
var paddedFrame = new GUILayoutGroup(new RectTransform(new Vector2(0.95f, 0.85f), GuiFrame.RectTransform, Anchor.Center), isHorizontal: true)
|
||||||
{
|
{
|
||||||
RelativeSpacing = 0.015f,
|
RelativeSpacing = 0.012f,
|
||||||
Stretch = true
|
Stretch = true
|
||||||
};
|
};
|
||||||
|
|
||||||
GUIFrame columnLeft = new GUIFrame(new RectTransform(new Vector2(0.2f, 1.0f), paddedFrame.RectTransform), style: null);
|
GUIFrame columnLeft = new GUIFrame(new RectTransform(new Vector2(0.25f, 1.0f), paddedFrame.RectTransform), style: null);
|
||||||
leftHUDColumn = columnLeft;
|
leftHUDColumn = columnLeft;
|
||||||
GUIFrame columnMid = new GUIFrame(new RectTransform(new Vector2(0.5f, 1.0f), paddedFrame.RectTransform), style: null);
|
GUIFrame columnMid = new GUIFrame(new RectTransform(new Vector2(0.45f, 1.0f), paddedFrame.RectTransform), style: null);
|
||||||
GUIFrame columnRight = new GUIFrame(new RectTransform(new Vector2(0.3f, 1.0f), paddedFrame.RectTransform), style: null);
|
GUIFrame columnRight = new GUIFrame(new RectTransform(new Vector2(0.3f, 1.0f), paddedFrame.RectTransform), style: null);
|
||||||
|
|
||||||
//----------------------------------------------------------
|
//----------------------------------------------------------
|
||||||
@@ -131,7 +131,7 @@ namespace Barotrauma.Items.Components
|
|||||||
};
|
};
|
||||||
|
|
||||||
var btnText = warningBtn.GetChild<GUITextBlock>();
|
var btnText = warningBtn.GetChild<GUITextBlock>();
|
||||||
btnText.Font = GUI.SmallFont;
|
btnText.Font = GUI.Font;
|
||||||
btnText.Wrap = true;
|
btnText.Wrap = true;
|
||||||
btnText.SetTextPos();
|
btnText.SetTextPos();
|
||||||
warningButtons.Add(warningTexts[i], warningBtn);
|
warningButtons.Add(warningTexts[i], warningBtn);
|
||||||
|
|||||||
@@ -117,11 +117,11 @@ namespace Barotrauma.Items.Components
|
|||||||
{
|
{
|
||||||
if (uiElements[i] is GUIButton button)
|
if (uiElements[i] is GUIButton button)
|
||||||
{
|
{
|
||||||
button.Text = labels[i];
|
button.Text = customInterfaceElementList[i].Label;
|
||||||
}
|
}
|
||||||
else if (uiElements[i] is GUITickBox tickBox)
|
else if (uiElements[i] is GUITickBox tickBox)
|
||||||
{
|
{
|
||||||
tickBox.Text = labels[i];
|
tickBox.Text = customInterfaceElementList[i].Label;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (!string.IsNullOrEmpty(uiLabel) && !subInventory)
|
if (!string.IsNullOrEmpty(uiLabel) && !subInventory)
|
||||||
{
|
{
|
||||||
|
uiLabel = ToolBox.WrapText(uiLabel, BackgroundFrame.Width, GUI.Font, 1);
|
||||||
GUI.DrawString(spriteBatch,
|
GUI.DrawString(spriteBatch,
|
||||||
new Vector2((int)(BackgroundFrame.Center.X - GUI.Font.MeasureString(uiLabel).X / 2), (int)BackgroundFrame.Y + 5),
|
new Vector2((int)(BackgroundFrame.Center.X - GUI.Font.MeasureString(uiLabel).X / 2), (int)BackgroundFrame.Y + 5),
|
||||||
uiLabel, Color.White * 0.9f);
|
uiLabel, Color.White * 0.9f);
|
||||||
|
|||||||
@@ -638,7 +638,9 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (mouseOn && PlayerInput.LeftButtonClicked() && !messageBoxOpen)
|
if (mouseOn && PlayerInput.LeftButtonClicked() && !messageBoxOpen)
|
||||||
{
|
{
|
||||||
|
//TODO: translate or replace
|
||||||
var messageBox = new GUIMessageBox("Mysteries lie ahead...", "This area is unreachable in this version of Barotrauma. Please wait for future updates!");
|
var messageBox = new GUIMessageBox("Mysteries lie ahead...", "This area is unreachable in this version of Barotrauma. Please wait for future updates!");
|
||||||
|
messageBoxOpen = true;
|
||||||
CoroutineManager.StartCoroutine(WaitForMessageBoxClosed(messageBox));
|
CoroutineManager.StartCoroutine(WaitForMessageBoxClosed(messageBox));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -315,7 +315,7 @@ namespace Barotrauma
|
|||||||
var dimensionsText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
var dimensionsText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
||||||
TextManager.Get("Dimensions"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
TextManager.Get("Dimensions"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), dimensionsText.RectTransform, Anchor.TopRight),
|
new GUITextBlock(new RectTransform(new Vector2(0.45f, 0.0f), dimensionsText.RectTransform, Anchor.TopRight),
|
||||||
dimensionsStr, textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
dimensionsStr, textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
dimensionsText.RectTransform.MinSize = new Point(0, dimensionsText.Children.First().Rect.Height);
|
dimensionsText.RectTransform.MinSize = new Point(0, dimensionsText.Children.First().Rect.Height);
|
||||||
@@ -326,7 +326,7 @@ namespace Barotrauma
|
|||||||
var crewSizeText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
var crewSizeText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
||||||
TextManager.Get("RecommendedCrewSize"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
TextManager.Get("RecommendedCrewSize"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), crewSizeText.RectTransform, Anchor.TopRight),
|
new GUITextBlock(new RectTransform(new Vector2(0.45f, 0.0f), crewSizeText.RectTransform, Anchor.TopRight),
|
||||||
RecommendedCrewSizeMin + " - " + RecommendedCrewSizeMax, textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
RecommendedCrewSizeMin + " - " + RecommendedCrewSizeMax, textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
crewSizeText.RectTransform.MinSize = new Point(0, crewSizeText.Children.First().Rect.Height);
|
crewSizeText.RectTransform.MinSize = new Point(0, crewSizeText.Children.First().Rect.Height);
|
||||||
@@ -337,7 +337,7 @@ namespace Barotrauma
|
|||||||
var crewExperienceText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
var crewExperienceText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
||||||
TextManager.Get("RecommendedCrewExperience"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
TextManager.Get("RecommendedCrewExperience"), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), crewExperienceText.RectTransform, Anchor.TopRight),
|
new GUITextBlock(new RectTransform(new Vector2(0.45f, 0.0f), crewExperienceText.RectTransform, Anchor.TopRight),
|
||||||
TextManager.Get(RecommendedCrewExperience), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
TextManager.Get(RecommendedCrewExperience), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
crewExperienceText.RectTransform.MinSize = new Point(0, crewExperienceText.Children.First().Rect.Height);
|
crewExperienceText.RectTransform.MinSize = new Point(0, crewExperienceText.Children.First().Rect.Height);
|
||||||
@@ -348,18 +348,21 @@ namespace Barotrauma
|
|||||||
var contentPackagesText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
var contentPackagesText = new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
||||||
TextManager.Get("RequiredContentPackages"), textAlignment: Alignment.TopLeft, font: GUI.Font)
|
TextManager.Get("RequiredContentPackages"), textAlignment: Alignment.TopLeft, font: GUI.Font)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.5f, 0.0f), contentPackagesText.RectTransform, Anchor.TopRight),
|
new GUITextBlock(new RectTransform(new Vector2(0.45f, 0.0f), contentPackagesText.RectTransform, Anchor.TopRight),
|
||||||
string.Join(", ", RequiredContentPackages), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
string.Join(", ", RequiredContentPackages), textAlignment: Alignment.TopLeft, font: GUI.Font, wrap: true)
|
||||||
{ CanBeFocused = false };
|
{ CanBeFocused = false };
|
||||||
contentPackagesText.RectTransform.MinSize = new Point(0, contentPackagesText.Children.First().Rect.Height);
|
contentPackagesText.RectTransform.MinSize = new Point(0, contentPackagesText.Children.First().Rect.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GUITextBlock.AutoScaleAndNormalize(descriptionBox.Content.Children.Where(c => c is GUITextBlock).Cast<GUITextBlock>());
|
||||||
|
|
||||||
//space
|
//space
|
||||||
new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), descriptionBox.Content.RectTransform), style: null);
|
new GUIFrame(new RectTransform(new Vector2(1.0f, 0.05f), descriptionBox.Content.RectTransform), style: null);
|
||||||
|
|
||||||
if (Description.Length != 0)
|
if (Description.Length != 0)
|
||||||
{
|
{
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform), TextManager.Get("SaveSubDialogDescription") + ":", font: GUI.Font, wrap: true) { CanBeFocused = false, ForceUpperCase = true };
|
new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform),
|
||||||
|
TextManager.Get("SaveSubDialogDescription", fallBackTag: "WorkshopItemDescription"), font: GUI.Font, wrap: true) { CanBeFocused = false, ForceUpperCase = true };
|
||||||
}
|
}
|
||||||
|
|
||||||
new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform), Description, font: GUI.Font, wrap: true)
|
new GUITextBlock(new RectTransform(new Vector2(1, 0), descriptionBox.Content.RectTransform), Description, font: GUI.Font, wrap: true)
|
||||||
|
|||||||
@@ -214,6 +214,10 @@ namespace Barotrauma
|
|||||||
sb.AppendLine("Level seed: " + ((Level.Loaded == null) ? "no level loaded" : Level.Loaded.Seed));
|
sb.AppendLine("Level seed: " + ((Level.Loaded == null) ? "no level loaded" : Level.Loaded.Seed));
|
||||||
sb.AppendLine("Loaded submarine: " + ((Submarine.MainSub == null) ? "None" : Submarine.MainSub.Name + " (" + Submarine.MainSub.MD5Hash + ")"));
|
sb.AppendLine("Loaded submarine: " + ((Submarine.MainSub == null) ? "None" : Submarine.MainSub.Name + " (" + Submarine.MainSub.MD5Hash + ")"));
|
||||||
sb.AppendLine("Selected screen: " + (Screen.Selected == null ? "None" : Screen.Selected.ToString()));
|
sb.AppendLine("Selected screen: " + (Screen.Selected == null ? "None" : Screen.Selected.ToString()));
|
||||||
|
if (SteamManager.IsInitialized)
|
||||||
|
{
|
||||||
|
sb.AppendLine("SteamManager initialized");
|
||||||
|
}
|
||||||
|
|
||||||
if (GameMain.Client != null)
|
if (GameMain.Client != null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -240,6 +240,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private GUILayoutGroup subPreviewContainer;
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
|
private GUILayoutGroup subPreviewContainer;
|
||||||
|
|
||||||
private GUIButton loadGameButton;
|
private GUIButton loadGameButton;
|
||||||
|
|
||||||
public Action<Submarine, string, string> StartNewGame;
|
public Action<Submarine, string, string> StartNewGame;
|
||||||
@@ -509,7 +511,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
IsFixedSize = false
|
IsFixedSize = false
|
||||||
},
|
},
|
||||||
TextManager.Get("Shuttle"), textAlignment: Alignment.Right, font: GUI.SmallFont)
|
TextManager.Get("Shuttle", fallBackTag: "RespawnShuttle"), textAlignment: Alignment.Right, font: GUI.SmallFont)
|
||||||
{
|
{
|
||||||
TextColor = textBlock.TextColor * 0.8f,
|
TextColor = textBlock.TextColor * 0.8f,
|
||||||
ToolTip = textBlock.ToolTip
|
ToolTip = textBlock.ToolTip
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
class MainMenuScreen : Screen
|
class MainMenuScreen : Screen
|
||||||
{
|
{
|
||||||
public enum Tab { NewGame = 1, LoadGame = 2, HostServer = 3, Settings = 4, Tutorials = 5, JoinServer = 6, CharacterEditor = 7, SubmarineEditor = 8, QuickStartDev = 9, SteamWorkshop = 10 }
|
public enum Tab { NewGame = 1, LoadGame = 2, HostServer = 3, Settings = 4, Tutorials = 5, JoinServer = 6, CharacterEditor = 7, SubmarineEditor = 8, QuickStartDev = 9, SteamWorkshop = 10, Credits = 11 }
|
||||||
|
|
||||||
private GUIComponent buttonsParent;
|
private GUIComponent buttonsParent;
|
||||||
|
|
||||||
@@ -35,22 +35,27 @@ namespace Barotrauma
|
|||||||
private Sprite backgroundSprite;
|
private Sprite backgroundSprite;
|
||||||
private Sprite backgroundVignette;
|
private Sprite backgroundVignette;
|
||||||
|
|
||||||
|
private GUIComponent titleText;
|
||||||
|
|
||||||
|
private CreditsPlayer creditsPlayer;
|
||||||
|
|
||||||
#region Creation
|
#region Creation
|
||||||
public MainMenuScreen(GameMain game)
|
public MainMenuScreen(GameMain game)
|
||||||
{
|
{
|
||||||
backgroundVignette = new Sprite("Content/UI/MainMenuVignette.png", Vector2.Zero);
|
backgroundVignette = new Sprite("Content/UI/MainMenuVignette.png", Vector2.Zero);
|
||||||
|
|
||||||
new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight)
|
new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight)
|
||||||
{ RelativeOffset = new Vector2(0.05f, 0.05f), AbsoluteOffset = new Point(-5, -5) },
|
{ RelativeOffset = new Vector2(0.05f, 0.1f), AbsoluteOffset = new Point(-8, -8) },
|
||||||
style: "TitleText")
|
style: "TitleText")
|
||||||
{
|
{
|
||||||
Color = Color.Black * 0.5f,
|
Color = Color.Black * 0.5f,
|
||||||
CanBeFocused = false
|
CanBeFocused = false
|
||||||
};
|
};
|
||||||
new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight) { RelativeOffset = new Vector2(0.05f, 0.05f) },
|
titleText = new GUIImage(new RectTransform(new Vector2(0.35f, 0.2f), Frame.RectTransform, Anchor.BottomRight)
|
||||||
|
{ RelativeOffset = new Vector2(0.05f, 0.1f) },
|
||||||
style: "TitleText");
|
style: "TitleText");
|
||||||
|
|
||||||
buttonsParent = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 0.85f), parent: Frame.RectTransform, anchor: Anchor.BottomLeft, pivot: Pivot.BottomLeft)
|
buttonsParent = new GUILayoutGroup(new RectTransform(new Vector2(0.3f, 0.85f), parent: Frame.RectTransform, anchor: Anchor.CenterLeft)
|
||||||
{
|
{
|
||||||
AbsoluteOffset = new Point(50, 0)
|
AbsoluteOffset = new Point(50, 0)
|
||||||
})
|
})
|
||||||
@@ -223,7 +228,7 @@ namespace Barotrauma
|
|||||||
};
|
};
|
||||||
|
|
||||||
// === OPTION
|
// === OPTION
|
||||||
var optionHolder = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.5f), parent: buttonsParent.RectTransform), isHorizontal: true);
|
var optionHolder = new GUILayoutGroup(new RectTransform(new Vector2(0.9f, 0.8f), parent: buttonsParent.RectTransform), isHorizontal: true);
|
||||||
|
|
||||||
new GUIImage(new RectTransform(new Vector2(0.15f, 0.6f), optionHolder.RectTransform), "MainMenuOptionIcon")
|
new GUIImage(new RectTransform(new Vector2(0.15f, 0.6f), optionHolder.RectTransform), "MainMenuOptionIcon")
|
||||||
{
|
{
|
||||||
@@ -233,9 +238,9 @@ namespace Barotrauma
|
|||||||
//spacing
|
//spacing
|
||||||
new GUIFrame(new RectTransform(new Vector2(0.01f, 0.0f), optionHolder.RectTransform), style: null);
|
new GUIFrame(new RectTransform(new Vector2(0.01f, 0.0f), optionHolder.RectTransform), style: null);
|
||||||
|
|
||||||
var optionButtons = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 1.0f), parent: optionHolder.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.05f) });
|
var optionButtons = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 1.0f), parent: optionHolder.RectTransform) { RelativeOffset = new Vector2(0.0f, 0.0f) });
|
||||||
|
|
||||||
var optionList = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 0.3f), parent: optionButtons.RectTransform))
|
var optionList = new GUILayoutGroup(new RectTransform(new Vector2(0.8f, 0.25f), parent: optionButtons.RectTransform))
|
||||||
{
|
{
|
||||||
Stretch = false,
|
Stretch = false,
|
||||||
RelativeSpacing = 0.035f
|
RelativeSpacing = 0.035f
|
||||||
@@ -247,6 +252,13 @@ namespace Barotrauma
|
|||||||
UserData = Tab.Settings,
|
UserData = Tab.Settings,
|
||||||
OnClicked = SelectTab
|
OnClicked = SelectTab
|
||||||
};
|
};
|
||||||
|
//TODO: translate
|
||||||
|
new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), optionList.RectTransform), TextManager.Get("CreditsButton"), textAlignment: Alignment.Left, style: "MainMenuGUIButton")
|
||||||
|
{
|
||||||
|
ForceUpperCase = true,
|
||||||
|
UserData = Tab.Credits,
|
||||||
|
OnClicked = SelectTab
|
||||||
|
};
|
||||||
new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), optionList.RectTransform), TextManager.Get("QuitButton"), textAlignment: Alignment.Left, style: "MainMenuGUIButton")
|
new GUIButton(new RectTransform(new Vector2(1.0f, 1.0f), optionList.RectTransform), TextManager.Get("QuitButton"), textAlignment: Alignment.Left, style: "MainMenuGUIButton")
|
||||||
{
|
{
|
||||||
ForceUpperCase = true,
|
ForceUpperCase = true,
|
||||||
@@ -255,7 +267,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
//debug button for quickly starting a new round
|
//debug button for quickly starting a new round
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
new GUIButton(new RectTransform(new Vector2(0.8f, 0.1f), buttonsParent.RectTransform, Anchor.TopLeft, Pivot.BottomLeft) { AbsoluteOffset = new Point(0, -40) },
|
new GUIButton(new RectTransform(new Point(300, 30), Frame.RectTransform, Anchor.TopRight) { AbsoluteOffset = new Point(40, 40) },
|
||||||
"Quickstart (dev)", style: "GUIButtonLarge", color: Color.Red)
|
"Quickstart (dev)", style: "GUIButtonLarge", color: Color.Red)
|
||||||
{
|
{
|
||||||
IgnoreLayoutGroups = true,
|
IgnoreLayoutGroups = true,
|
||||||
@@ -373,6 +385,8 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (obj is Tab)
|
if (obj is Tab)
|
||||||
{
|
{
|
||||||
|
titleText.Visible = true;
|
||||||
|
|
||||||
if (GameMain.Config.UnsavedSettings)
|
if (GameMain.Config.UnsavedSettings)
|
||||||
{
|
{
|
||||||
var applyBox = new GUIMessageBox(
|
var applyBox = new GUIMessageBox(
|
||||||
@@ -449,6 +463,9 @@ namespace Barotrauma
|
|||||||
if (!Steam.SteamManager.IsInitialized) return false;
|
if (!Steam.SteamManager.IsInitialized) return false;
|
||||||
GameMain.SteamWorkshopScreen.Select();
|
GameMain.SteamWorkshopScreen.Select();
|
||||||
break;
|
break;
|
||||||
|
case Tab.Credits:
|
||||||
|
titleText.Visible = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -702,11 +719,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
public override void Update(double deltaTime)
|
public override void Update(double deltaTime)
|
||||||
{
|
{
|
||||||
GameMain.TitleScreen.TitlePosition =
|
|
||||||
Vector2.Lerp(GameMain.TitleScreen.TitlePosition, new Vector2(
|
|
||||||
GameMain.TitleScreen.TitleSize.X / 2.0f * GameMain.TitleScreen.Scale + 30.0f,
|
|
||||||
GameMain.TitleScreen.TitleSize.Y / 2.0f * GameMain.TitleScreen.Scale + 30.0f),
|
|
||||||
0.1f);
|
|
||||||
#if !DEBUG
|
#if !DEBUG
|
||||||
#if !OSX
|
#if !OSX
|
||||||
if (Steam.SteamManager.USE_STEAM)
|
if (Steam.SteamManager.USE_STEAM)
|
||||||
@@ -780,27 +792,30 @@ namespace Barotrauma
|
|||||||
GUI.Font.DrawString(spriteBatch, "Barotrauma v" + GameMain.Version, new Vector2(10, GameMain.GraphicsHeight - 20), Color.White * 0.7f);
|
GUI.Font.DrawString(spriteBatch, "Barotrauma v" + GameMain.Version, new Vector2(10, GameMain.GraphicsHeight - 20), Color.White * 0.7f);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Vector2 textPos = new Vector2(GameMain.GraphicsWidth - 10, GameMain.GraphicsHeight - 10);
|
if (selectedTab != Tab.Credits)
|
||||||
for (int i = legalCrap.Length - 1; i >= 0; i--)
|
|
||||||
{
|
{
|
||||||
Vector2 textSize = GUI.SmallFont.MeasureString(legalCrap[i]);
|
Vector2 textPos = new Vector2(GameMain.GraphicsWidth - 10, GameMain.GraphicsHeight - 10);
|
||||||
bool mouseOn = i == 0 &&
|
for (int i = legalCrap.Length - 1; i >= 0; i--)
|
||||||
PlayerInput.MousePosition.X > textPos.X - textSize.X && PlayerInput.MousePosition.X < textPos.X &&
|
|
||||||
PlayerInput.MousePosition.Y > textPos.Y - textSize.Y && PlayerInput.MousePosition.Y < textPos.Y;
|
|
||||||
|
|
||||||
GUI.SmallFont.DrawString(spriteBatch,
|
|
||||||
legalCrap[i], textPos - textSize,
|
|
||||||
mouseOn ? Color.White : Color.White * 0.7f);
|
|
||||||
|
|
||||||
if (i == 0)
|
|
||||||
{
|
{
|
||||||
GUI.DrawLine(spriteBatch, textPos, textPos - Vector2.UnitX * textSize.X, mouseOn ? Color.White : Color.White * 0.7f);
|
Vector2 textSize = GUI.SmallFont.MeasureString(legalCrap[i]);
|
||||||
if (mouseOn && PlayerInput.LeftButtonClicked())
|
bool mouseOn = i == 0 &&
|
||||||
|
PlayerInput.MousePosition.X > textPos.X - textSize.X && PlayerInput.MousePosition.X < textPos.X &&
|
||||||
|
PlayerInput.MousePosition.Y > textPos.Y - textSize.Y && PlayerInput.MousePosition.Y < textPos.Y;
|
||||||
|
|
||||||
|
GUI.SmallFont.DrawString(spriteBatch,
|
||||||
|
legalCrap[i], textPos - textSize,
|
||||||
|
mouseOn ? Color.White : Color.White * 0.7f);
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
{
|
{
|
||||||
Process.Start("http://privacypolicy.daedalic.com");
|
GUI.DrawLine(spriteBatch, textPos, textPos - Vector2.UnitX * textSize.X, mouseOn ? Color.White : Color.White * 0.7f);
|
||||||
|
if (mouseOn && PlayerInput.LeftButtonClicked())
|
||||||
|
{
|
||||||
|
Process.Start("http://privacypolicy.daedalic.com");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
textPos.Y -= textSize.Y;
|
||||||
}
|
}
|
||||||
textPos.Y -= textSize.Y;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
spriteBatch.End();
|
spriteBatch.End();
|
||||||
|
|||||||
@@ -437,9 +437,13 @@ namespace Barotrauma
|
|||||||
GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), modeList.Content.RectTransform),
|
GUITextBlock textBlock = new GUITextBlock(new RectTransform(new Vector2(1.0f, 0.2f), modeList.Content.RectTransform),
|
||||||
mode.Name, style: "ListBoxElement", textAlignment: Alignment.CenterLeft)
|
mode.Name, style: "ListBoxElement", textAlignment: Alignment.CenterLeft)
|
||||||
{
|
{
|
||||||
ToolTip = mode.Description,
|
|
||||||
UserData = mode
|
UserData = mode
|
||||||
};
|
};
|
||||||
|
//TODO: translate mission descriptions
|
||||||
|
if (TextManager.Language == "English")
|
||||||
|
{
|
||||||
|
textBlock.ToolTip = mode.Description;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//mission type ------------------------------------------------------------------
|
//mission type ------------------------------------------------------------------
|
||||||
@@ -1216,7 +1220,7 @@ namespace Barotrauma
|
|||||||
if (sub.HasTag(SubmarineTag.Shuttle))
|
if (sub.HasTag(SubmarineTag.Shuttle))
|
||||||
{
|
{
|
||||||
new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), frame.RectTransform, Anchor.CenterRight) { RelativeOffset = new Vector2(0.1f, 0.0f) },
|
new GUITextBlock(new RectTransform(new Vector2(0.5f, 1.0f), frame.RectTransform, Anchor.CenterRight) { RelativeOffset = new Vector2(0.1f, 0.0f) },
|
||||||
TextManager.Get("Shuttle"), textAlignment: Alignment.CenterRight, font: GUI.SmallFont)
|
TextManager.Get("Shuttle", fallBackTag: "RespawnShuttle"), textAlignment: Alignment.CenterRight, font: GUI.SmallFont)
|
||||||
{
|
{
|
||||||
TextColor = subTextBlock.TextColor * 0.8f,
|
TextColor = subTextBlock.TextColor * 0.8f,
|
||||||
ToolTip = subTextBlock.ToolTip,
|
ToolTip = subTextBlock.ToolTip,
|
||||||
|
|||||||
@@ -1184,7 +1184,6 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
OnClicked = SaveSub
|
OnClicked = SaveSub
|
||||||
};
|
};
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1357,7 +1356,7 @@ namespace Barotrauma
|
|||||||
if (sub.HasTag(SubmarineTag.Shuttle))
|
if (sub.HasTag(SubmarineTag.Shuttle))
|
||||||
{
|
{
|
||||||
var shuttleText = new GUITextBlock(new RectTransform(new Vector2(0.2f, 1.0f), textBlock.RectTransform, Anchor.CenterRight),
|
var shuttleText = new GUITextBlock(new RectTransform(new Vector2(0.2f, 1.0f), textBlock.RectTransform, Anchor.CenterRight),
|
||||||
TextManager.Get("Shuttle"), font: GUI.SmallFont)
|
TextManager.Get("Shuttle", fallBackTag: "RespawnShuttle"), font: GUI.SmallFont)
|
||||||
{
|
{
|
||||||
TextColor = textBlock.TextColor * 0.8f,
|
TextColor = textBlock.TextColor * 0.8f,
|
||||||
ToolTip = textBlock.ToolTip
|
ToolTip = textBlock.ToolTip
|
||||||
|
|||||||
@@ -927,6 +927,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
textTag = textTag.ToLowerInvariant();
|
textTag = textTag.ToLowerInvariant();
|
||||||
var tagTextPairs = TextManager.GetAllTagTextPairs();
|
var tagTextPairs = TextManager.GetAllTagTextPairs();
|
||||||
|
tagTextPairs.Sort((t1, t2) => { return t1.Value.CompareTo(t2.Value); });
|
||||||
foreach (KeyValuePair<string, string> tagTextPair in tagTextPairs)
|
foreach (KeyValuePair<string, string> tagTextPair in tagTextPairs)
|
||||||
{
|
{
|
||||||
if (!tagTextPair.Key.StartsWith(textTag)) { continue; }
|
if (!tagTextPair.Key.StartsWith(textTag)) { continue; }
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
private static Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"])*\"|[^,]*)", RegexOptions.Compiled); // Handling commas inside data fields surrounded by ""
|
private static Regex csvSplit = new Regex("(?:^|,)(\"(?:[^\"])*\"|[^,]*)", RegexOptions.Compiled); // Handling commas inside data fields surrounded by ""
|
||||||
private static List<int> conversationClosingIndent = new List<int>();
|
private static List<int> conversationClosingIndent = new List<int>();
|
||||||
private static char[] separator = new char[1] { ',' };
|
private static char[] separator = new char[1] { '|' };
|
||||||
|
|
||||||
private const string conversationsPath = "Content/NPCConversations";
|
private const string conversationsPath = "Content/NPCConversations";
|
||||||
private const string infoTextPath = "Content/Texts";
|
private const string infoTextPath = "Content/Texts";
|
||||||
@@ -48,7 +48,7 @@ namespace Barotrauma
|
|||||||
DebugConsole.ThrowError("NPCConversation Localization .csv to .xml conversion failed for: " + conversationFiles[i]);
|
DebugConsole.ThrowError("NPCConversation Localization .csv to .xml conversion failed for: " + conversationFiles[i]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
string xmlFileFullPath = $"{conversationsPath}/NPCConversations_{language}_NEW.xml";
|
string xmlFileFullPath = $"{conversationsPath}/NpcConversations_{language}_NEW.xml";
|
||||||
File.WriteAllLines(xmlFileFullPath, xmlContent);
|
File.WriteAllLines(xmlFileFullPath, xmlContent);
|
||||||
DebugConsole.NewMessage("Conversation localization .xml file successfully created at: " + xmlFileFullPath);
|
DebugConsole.NewMessage("Conversation localization .xml file successfully created at: " + xmlFileFullPath);
|
||||||
}
|
}
|
||||||
@@ -141,7 +141,8 @@ namespace Barotrauma
|
|||||||
|
|
||||||
for (int i = 0; i < NPCPersonalityTrait.List.Count; i++) // Traits
|
for (int i = 0; i < NPCPersonalityTrait.List.Count; i++) // Traits
|
||||||
{
|
{
|
||||||
string[] split = SplitCSV(csvContent[traitStart + i].Trim(separator));
|
//string[] split = SplitCSV(csvContent[traitStart + i].Trim(separator));
|
||||||
|
string[] split = csvContent[traitStart + i].Split(separator);
|
||||||
xmlContent.Add(
|
xmlContent.Add(
|
||||||
$"<PersonalityTrait " +
|
$"<PersonalityTrait " +
|
||||||
$"{GetVariable("name", split[1])}" +
|
$"{GetVariable("name", split[1])}" +
|
||||||
@@ -151,8 +152,10 @@ namespace Barotrauma
|
|||||||
|
|
||||||
for (int i = traitStart + NPCPersonalityTrait.List.Count; i < csvContent.Length; i++) // Conversations
|
for (int i = traitStart + NPCPersonalityTrait.List.Count; i < csvContent.Length; i++) // Conversations
|
||||||
{
|
{
|
||||||
string[] presplit = csvContent[i].Split(','); // Handling speaker index fetching, somehow doesn't work with the regex
|
//string[] presplit = csvContent[i].Split(separator); // Handling speaker index fetching, somehow doesn't work with the regex
|
||||||
string[] split = SplitCSV(csvContent[i]);
|
//string[] split = SplitCSV(csvContent[i]);
|
||||||
|
|
||||||
|
string[] split = csvContent[i].Split(separator);
|
||||||
|
|
||||||
int emptyFields = 0;
|
int emptyFields = 0;
|
||||||
|
|
||||||
@@ -173,15 +176,15 @@ namespace Barotrauma
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
string speaker = presplit[1];
|
string speaker = split[1];
|
||||||
int depthIndex = int.Parse(presplit[2]);
|
int depthIndex = int.Parse(split[2]);
|
||||||
// 3 = original line
|
// 3 = original line
|
||||||
string line = split[4].Replace("\"", "");
|
string line = split[3].Replace("\"", "");
|
||||||
string flags = split[5].Replace("\"", "");
|
string flags = split[4].Replace("\"", "");
|
||||||
string allowedJobs = split[6].Replace("\"", "");
|
string allowedJobs = split[5].Replace("\"", "");
|
||||||
string speakerTags = split[7].Replace("\"", "");
|
string speakerTags = split[6].Replace("\"", "");
|
||||||
string minIntensity = split[8].Replace("\"", "").Replace(",", ".");
|
string minIntensity = split[7].Replace("\"", "").Replace(",", ".");
|
||||||
string maxIntensity = split[9].Replace("\"", "").Replace(",", ".");
|
string maxIntensity = split[8].Replace("\"", "").Replace(",", ".");
|
||||||
|
|
||||||
string element =
|
string element =
|
||||||
$"{GetIndenting(depthIndex)}" +
|
$"{GetIndenting(depthIndex)}" +
|
||||||
@@ -257,7 +260,7 @@ namespace Barotrauma
|
|||||||
list.Add("");
|
list.Add("");
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Add(curr.TrimStart(','));
|
list.Add(curr.TrimStart(separator));
|
||||||
}
|
}
|
||||||
|
|
||||||
return list.ToArray();
|
return list.ToArray();
|
||||||
|
|||||||
@@ -107,24 +107,42 @@ namespace Barotrauma
|
|||||||
|
|
||||||
text = text.Replace("\n", " \n ");
|
text = text.Replace("\n", " \n ");
|
||||||
|
|
||||||
string[] words;
|
List<string> words = new List<string>();
|
||||||
if (TextManager.NoWhiteSpace)
|
string currWord = "";
|
||||||
|
for (int i = 0; i < text.Length; i++)
|
||||||
{
|
{
|
||||||
words = new string[text.Length];
|
if (isCJK.IsMatch(text[i].ToString()))
|
||||||
for (int i = 0; i < text.Length; i++)
|
|
||||||
{
|
{
|
||||||
words[i] = text[i].ToString();
|
if (currWord.Length > 0)
|
||||||
|
{
|
||||||
|
words.Add(currWord);
|
||||||
|
currWord = "";
|
||||||
|
}
|
||||||
|
words.Add(text[i].ToString());
|
||||||
|
}
|
||||||
|
else if (text[i] == ' ')
|
||||||
|
{
|
||||||
|
if (currWord.Length > 0)
|
||||||
|
{
|
||||||
|
words.Add(currWord);
|
||||||
|
currWord = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
currWord += text[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
if (currWord.Length > 0)
|
||||||
{
|
{
|
||||||
words = text.Split(' ');
|
words.Add(currWord);
|
||||||
|
currWord = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder wrappedText = new StringBuilder();
|
StringBuilder wrappedText = new StringBuilder();
|
||||||
float linePos = 0f;
|
float linePos = 0f;
|
||||||
Vector2 spaceSize = font.MeasureString(" ") * textScale;
|
Vector2 spaceSize = font.MeasureString(" ") * textScale;
|
||||||
for (int i = 0; i < words.Length; ++i)
|
for (int i = 0; i < words.Count; ++i)
|
||||||
{
|
{
|
||||||
if (words[i].Length == 0)
|
if (words[i].Length == 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -73,6 +73,7 @@
|
|||||||
<Character file="Content/Characters/Watcher/Watcher.xml" />
|
<Character file="Content/Characters/Watcher/Watcher.xml" />
|
||||||
<Character file="Content/Characters/Hammerhead/Hammerhead.xml" />
|
<Character file="Content/Characters/Hammerhead/Hammerhead.xml" />
|
||||||
<Outpost file="Content/Map/Outposts/Outpost.sub" />
|
<Outpost file="Content/Map/Outposts/Outpost.sub" />
|
||||||
|
<Outpost file="Content/Map/Outposts/Outpost2.sub" />
|
||||||
<Submarine file="Submarines/Orca.sub" />
|
<Submarine file="Submarines/Orca.sub" />
|
||||||
<Submarine file="Submarines/Typhon.sub" />
|
<Submarine file="Submarines/Typhon.sub" />
|
||||||
<Submarine file="Submarines/Selkie.sub" />
|
<Submarine file="Submarines/Selkie.sub" />
|
||||||
@@ -83,8 +84,12 @@
|
|||||||
<Submarine file="Submarines/Remora.sub" />
|
<Submarine file="Submarines/Remora.sub" />
|
||||||
<Submarine file="Submarines/RemoraDrone.sub" />
|
<Submarine file="Submarines/RemoraDrone.sub" />
|
||||||
<Text file="Content/Texts/EnglishVanilla.xml" />
|
<Text file="Content/Texts/EnglishVanilla.xml" />
|
||||||
<Text file="Content/Texts/RussianVanillaTest.xml" />
|
<Text file="Content/Texts/GermanVanilla.xml" />
|
||||||
<Text file="Content/Texts/ChineseVanillaTest.xml" />
|
<Text file="Content/Texts/FrenchVanilla.xml" />
|
||||||
|
<Text file="Content/Texts/RussianVanilla.xml" />
|
||||||
|
<Text file="Content/Texts/BrazilianPortugueseVanilla.xml" />
|
||||||
|
<Text file="Content/Texts/SimplifiedChineseVanilla.xml" />
|
||||||
|
<Text file="Content/Texts/TraditionalChineseVanilla.xml" />
|
||||||
<UIStyle file="Content/UI/style.xml"/>
|
<UIStyle file="Content/UI/style.xml"/>
|
||||||
<Afflictions file="Content/Afflictions.xml"/>
|
<Afflictions file="Content/Afflictions.xml"/>
|
||||||
<Structure file="Content/Map/StructurePrefabs.xml" />
|
<Structure file="Content/Map/StructurePrefabs.xml" />
|
||||||
@@ -98,7 +103,13 @@
|
|||||||
<MapGenerationParameters file="Content/Map/MapGenerationParameters.xml" />
|
<MapGenerationParameters file="Content/Map/MapGenerationParameters.xml" />
|
||||||
<LevelGenerationParameters file="Content/Map/LevelGenerationParameters.xml" />
|
<LevelGenerationParameters file="Content/Map/LevelGenerationParameters.xml" />
|
||||||
<Missions file="Content/Missions.xml" />
|
<Missions file="Content/Missions.xml" />
|
||||||
<NPCConversations file="Content/NPCConversations/NpcConversations.xml"/>
|
<NPCConversations file="Content/NPCConversations/NpcConversations_English.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_German.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_French.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_Russian.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_BrazilianPortuguese.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_SimplifiedChinese.xml"/>
|
||||||
|
<NPCConversations file="Content/NPCConversations/NpcConversations_TraditionalChinese.xml"/>
|
||||||
<Jobs file="Content/Jobs.xml" />
|
<Jobs file="Content/Jobs.xml" />
|
||||||
<Sounds file="Content/Sounds/sounds.xml" />
|
<Sounds file="Content/Sounds/sounds.xml" />
|
||||||
<Tutorials file="Content/Tutorials/Tutorials.xml" />
|
<Tutorials file="Content/Tutorials/Tutorials.xml" />
|
||||||
|
|||||||
@@ -361,6 +361,12 @@
|
|||||||
<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\NotoSans\NotoSansCJKsc-Bold.otf">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Fonts\NotoSans\NotoSansCJKsc-Medium.otf">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Fonts\NotoSans\NotoSansTC-Bold.otf">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Fonts\NotoSans\NotoSansTC-Bold.otf">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
@@ -499,10 +505,47 @@
|
|||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Map\OutpostWall_C.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Map\OutpostWall_C.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\ChineseVanillaTest.xml">
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_BrazilianPortuguese.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\RussianVanillaTest.xml">
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_English.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_Finnish.xml" />
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_French.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_German.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_Russian.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_SimplifiedChinese.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations_TraditionalChinese.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\BrazilianPortugueseVanilla.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\Credits.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\FrenchVanilla.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\GermanVanilla.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\RussianVanilla.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\SimplifiedChineseVanilla.xml">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="$(MSBuildThisFileDirectory)Content\Texts\TraditionalChineseVanilla.xml">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Tutorials\TutorialVideos\tutorial_command.mp4">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Tutorials\TutorialVideos\tutorial_command.mp4">
|
||||||
@@ -556,6 +599,9 @@
|
|||||||
<Content Include="$(MSBuildThisFileDirectory)Content\UI\tutorialAtlas.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\UI\tutorialAtlas.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<None Include="$(MSBuildThisFileDirectory)Concentus_LICENSE">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
<None Include="$(MSBuildThisFileDirectory)Content\Fonts\BebasNeue-Regular.otf">
|
<None Include="$(MSBuildThisFileDirectory)Content\Fonts\BebasNeue-Regular.otf">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
@@ -1306,11 +1352,6 @@
|
|||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Map\SubFins.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Map\SubFins.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversationsFinnish.xml">
|
|
||||||
</Content>
|
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\NPCConversations\NpcConversations.xml">
|
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
|
||||||
</Content>
|
|
||||||
<Content Include="$(MSBuildThisFileDirectory)Content\Characters\Legacyhusk\DivingSuit.png">
|
<Content Include="$(MSBuildThisFileDirectory)Content\Characters\Legacyhusk\DivingSuit.png">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
@@ -2070,6 +2111,9 @@
|
|||||||
<None Include="$(MSBuildThisFileDirectory)Content\Items\Weapons\ElectricalDischarger.ogg">
|
<None Include="$(MSBuildThisFileDirectory)Content\Items\Weapons\ElectricalDischarger.ogg">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
<None Include="$(MSBuildThisFileDirectory)Content\Map\Outposts\Outpost2.sub">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
<None Include="$(MSBuildThisFileDirectory)Content\Sounds\Damage\Gore1.ogg">
|
<None Include="$(MSBuildThisFileDirectory)Content\Sounds\Damage\Gore1.ogg">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
|||||||
@@ -150,6 +150,31 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
||||||
|
#endif
|
||||||
|
abandon = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Vector2 gapDiff = Leak.WorldPosition - character.WorldPosition;
|
||||||
|
// TODO: use the collider size/reach?
|
||||||
|
if (!character.AnimController.InWater && Math.Abs(gapDiff.X) < 100 && gapDiff.Y < 0.0f && gapDiff.Y > -150)
|
||||||
|
{
|
||||||
|
HumanAIController.AnimController.Crouching = true;
|
||||||
|
}
|
||||||
|
float reach = ConvertUnits.ToSimUnits(repairTool.Range);
|
||||||
|
bool canOperate = ConvertUnits.ToSimUnits(gapDiff.Length()) < reach;
|
||||||
|
if (canOperate)
|
||||||
|
{
|
||||||
|
TryAddSubObjective(ref operateObjective, () => new AIObjectiveOperateItem(repairTool, character, objectiveManager, option: "", requireEquip: true, operateTarget: Leak));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TryAddSubObjective(ref gotoObjective, () => new AIObjectiveGoTo(ConvertUnits.ToSimUnits(GetStandPosition()), character, objectiveManager) { CloseEnough = reach * 0.75f });
|
||||||
|
}
|
||||||
|
var repairTool = weldingTool.GetComponent<RepairTool>();
|
||||||
|
if (repairTool == null)
|
||||||
|
{
|
||||||
|
#if DEBUG
|
||||||
|
DebugConsole.ThrowError("AIObjectiveFixLeak failed - the item \"" + weldingTool + "\" has no RepairTool component but is tagged as a welding tool");
|
||||||
#endif
|
#endif
|
||||||
abandon = true;
|
abandon = true;
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -74,6 +74,21 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void Update(float deltaTime)
|
||||||
|
{
|
||||||
|
if (objectiveManager.CurrentObjective == this)
|
||||||
|
{
|
||||||
|
if (randomTimer > 0)
|
||||||
|
{
|
||||||
|
randomTimer -= deltaTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetRandom();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool IsCompleted() => false;
|
public override bool IsCompleted() => false;
|
||||||
public override bool CanBeCompleted => true;
|
public override bool CanBeCompleted => true;
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
isCompleted = true;
|
isCompleted = true;
|
||||||
}
|
}
|
||||||
|
if (component.AIOperate(deltaTime, character, this))
|
||||||
|
{
|
||||||
|
isCompleted = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -279,6 +279,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
public static bool ShowUserStatisticsPrompt { get; set; }
|
public static bool ShowUserStatisticsPrompt { get; set; }
|
||||||
|
|
||||||
|
public bool ShowLanguageSelectionPrompt { get; set; }
|
||||||
|
|
||||||
public GameSettings()
|
public GameSettings()
|
||||||
{
|
{
|
||||||
SelectedContentPackages = new HashSet<ContentPackage>();
|
SelectedContentPackages = new HashSet<ContentPackage>();
|
||||||
@@ -764,6 +766,7 @@ namespace Barotrauma
|
|||||||
CheckBindings(!fileFound);
|
CheckBindings(!fileFound);
|
||||||
if (!fileFound)
|
if (!fileFound)
|
||||||
{
|
{
|
||||||
|
ShowLanguageSelectionPrompt = true;
|
||||||
SaveNewPlayerConfig();
|
SaveNewPlayerConfig();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -916,6 +919,71 @@ namespace Barotrauma
|
|||||||
|
|
||||||
selectedContentPackagePaths = new HashSet<string>();
|
selectedContentPackagePaths = new HashSet<string>();
|
||||||
|
|
||||||
|
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())
|
||||||
{
|
{
|
||||||
DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath));
|
DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath));
|
||||||
|
|||||||
@@ -43,6 +43,11 @@ namespace Barotrauma.Items.Components
|
|||||||
set { userPos = value; }
|
set { userPos = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Character User
|
||||||
|
{
|
||||||
|
get { return user; }
|
||||||
|
}
|
||||||
|
|
||||||
public Controller(Item item, XElement element)
|
public Controller(Item item, XElement element)
|
||||||
: base(item, element)
|
: base(item, element)
|
||||||
{
|
{
|
||||||
@@ -163,7 +168,7 @@ namespace Barotrauma.Items.Components
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
item.SendSignal(0, "1", "trigger_out", character);
|
item.SendSignal(0, "1", "trigger_out", user);
|
||||||
|
|
||||||
ApplyStatusEffects(ActionType.OnUse, 1.0f, activator);
|
ApplyStatusEffects(ActionType.OnUse, 1.0f, activator);
|
||||||
|
|
||||||
@@ -233,7 +238,7 @@ namespace Barotrauma.Items.Components
|
|||||||
|
|
||||||
private Item GetFocusTarget()
|
private Item GetFocusTarget()
|
||||||
{
|
{
|
||||||
item.SendSignal(0, MathHelper.ToDegrees(targetRotation).ToString("G", CultureInfo.InvariantCulture), "position_out", character);
|
item.SendSignal(0, MathHelper.ToDegrees(targetRotation).ToString("G", CultureInfo.InvariantCulture), "position_out", user);
|
||||||
|
|
||||||
for (int i = item.LastSentSignalRecipients.Count - 1; i >= 0; i--)
|
for (int i = item.LastSentSignalRecipients.Count - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -601,6 +601,25 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
|
{
|
||||||
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
Entity.Spawner.AddToRemoveQueue(targetItem);
|
||||||
|
MoveInputQueue();
|
||||||
|
PutItemsToLinkedContainer();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (outputContainer.Inventory.Items.All(i => i != null))
|
||||||
|
{
|
||||||
|
targetItem.Drop(dropper: null);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
outputContainer.Inventory.TryPutItem(targetItem, user: null, createNetworkEvent: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (targetItem.Prefab.DeconstructItems.Any())
|
if (targetItem.Prefab.DeconstructItems.Any())
|
||||||
{
|
{
|
||||||
inputContainer.Inventory.RemoveItem(targetItem);
|
inputContainer.Inventory.RemoveItem(targetItem);
|
||||||
|
|||||||
@@ -212,33 +212,6 @@ namespace Barotrauma.Items.Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Vector2? PosToMaintain
|
|
||||||
{
|
|
||||||
get { return posToMaintain; }
|
|
||||||
set { posToMaintain = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
struct ObstacleDebugInfo
|
|
||||||
{
|
|
||||||
public Vector2 Point1;
|
|
||||||
public Vector2 Point2;
|
|
||||||
|
|
||||||
public Vector2? Intersection;
|
|
||||||
|
|
||||||
public float Dot;
|
|
||||||
|
|
||||||
public Vector2 AvoidStrength;
|
|
||||||
|
|
||||||
public ObstacleDebugInfo(GraphEdge edge, Vector2? intersection, float dot, Vector2 avoidStrength)
|
|
||||||
{
|
|
||||||
Point1 = edge.Point1;
|
|
||||||
Point2 = edge.Point2;
|
|
||||||
Intersection = intersection;
|
|
||||||
Dot = dot;
|
|
||||||
AvoidStrength = avoidStrength;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//edge point 1, edge point 2, avoid strength
|
//edge point 1, edge point 2, avoid strength
|
||||||
private List<ObstacleDebugInfo> debugDrawObstacles = new List<ObstacleDebugInfo>();
|
private List<ObstacleDebugInfo> debugDrawObstacles = new List<ObstacleDebugInfo>();
|
||||||
|
|
||||||
|
|||||||
@@ -1640,6 +1640,10 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime);
|
ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime);
|
||||||
}
|
}
|
||||||
|
if (!broken)
|
||||||
|
{
|
||||||
|
ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime);
|
||||||
|
}
|
||||||
ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime);
|
ApplyStatusEffects(!waterProof && inWater ? ActionType.InWater : ActionType.NotInWater, deltaTime);
|
||||||
|
|
||||||
if (body == null || !body.Enabled || !inWater || ParentInventory != null || Removed) { return; }
|
if (body == null || !body.Enabled || !inWater || ParentInventory != null || Removed) { return; }
|
||||||
|
|||||||
@@ -227,6 +227,25 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string DisplayName
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string roomName;
|
||||||
|
[Editable, Serialize("", true, translationTextTag: "RoomName.")]
|
||||||
|
public string RoomName
|
||||||
|
{
|
||||||
|
get { return roomName; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (roomName == value) { return; }
|
||||||
|
roomName = value;
|
||||||
|
DisplayName = TextManager.Get(roomName, returnNull: true) ?? roomName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override Rectangle Rect
|
public override Rectangle Rect
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
|
|||||||
@@ -109,6 +109,11 @@ namespace Barotrauma
|
|||||||
if (!ParseTexturePath(path, file)) { return; }
|
if (!ParseTexturePath(path, file)) { return; }
|
||||||
Name = SourceElement.GetAttributeString("name", null);
|
Name = SourceElement.GetAttributeString("name", null);
|
||||||
Vector4 sourceVector = SourceElement.GetAttributeVector4("sourcerect", Vector4.Zero);
|
Vector4 sourceVector = SourceElement.GetAttributeVector4("sourcerect", Vector4.Zero);
|
||||||
|
var overrideElement = GetLocalizationOverrideElement();
|
||||||
|
if (overrideElement != null && overrideElement.Attribute("sourcerect") != null)
|
||||||
|
{
|
||||||
|
sourceVector = overrideElement.GetAttributeVector4("sourcerect", Vector4.Zero);
|
||||||
|
}
|
||||||
preMultipliedAlpha = preMultiplyAlpha ?? SourceElement.GetAttributeBool("premultiplyalpha", true);
|
preMultipliedAlpha = preMultiplyAlpha ?? SourceElement.GetAttributeBool("premultiplyalpha", true);
|
||||||
bool shouldReturn = false;
|
bool shouldReturn = false;
|
||||||
if (!lazyLoad)
|
if (!lazyLoad)
|
||||||
@@ -240,8 +245,12 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
if (SourceElement != null)
|
if (SourceElement != null)
|
||||||
{
|
{
|
||||||
Vector4 sourceVector = SourceElement.GetAttributeVector4("sourcerect", Vector4.Zero);
|
sourceRect = SourceElement.GetAttributeRect("sourcerect", Rectangle.Empty);
|
||||||
sourceRect = new Rectangle((int)sourceVector.X, (int)sourceVector.Y, (int)sourceVector.Z, (int)sourceVector.W);
|
var overrideElement = GetLocalizationOverrideElement();
|
||||||
|
if (overrideElement != null && overrideElement.Attribute("sourcerect") != null)
|
||||||
|
{
|
||||||
|
sourceRect = overrideElement.GetAttributeRect("sourcerect", Rectangle.Empty);
|
||||||
|
}
|
||||||
size = SourceElement.GetAttributeVector2("size", Vector2.One);
|
size = SourceElement.GetAttributeVector2("size", Vector2.One);
|
||||||
size.X *= sourceRect.Width;
|
size.X *= sourceRect.Width;
|
||||||
size.Y *= sourceRect.Height;
|
size.Y *= sourceRect.Height;
|
||||||
@@ -256,6 +265,12 @@ namespace Barotrauma
|
|||||||
if (file == "")
|
if (file == "")
|
||||||
{
|
{
|
||||||
file = SourceElement.GetAttributeString("texture", "");
|
file = SourceElement.GetAttributeString("texture", "");
|
||||||
|
var overrideElement = GetLocalizationOverrideElement();
|
||||||
|
if (overrideElement != null)
|
||||||
|
{
|
||||||
|
string overrideFile = overrideElement.GetAttributeString("texture", "");
|
||||||
|
if (!string.IsNullOrEmpty(overrideFile)) { file = overrideFile; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (file == "")
|
if (file == "")
|
||||||
{
|
{
|
||||||
@@ -273,6 +288,22 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private XElement GetLocalizationOverrideElement()
|
||||||
|
{
|
||||||
|
foreach (XElement subElement in SourceElement.Elements())
|
||||||
|
{
|
||||||
|
if (subElement.Name.ToString().ToLowerInvariant() == "override")
|
||||||
|
{
|
||||||
|
string language = subElement.GetAttributeString("language", "");
|
||||||
|
if (TextManager.Language.ToLower() == language.ToLower())
|
||||||
|
{
|
||||||
|
return subElement;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,14 +16,6 @@ namespace Barotrauma
|
|||||||
private static string[] serverMessageCharacters = new string[] { "~", "[", "]", "=" };
|
private static string[] serverMessageCharacters = new string[] { "~", "[", "]", "=" };
|
||||||
|
|
||||||
public static string Language;
|
public static string Language;
|
||||||
public static bool NoWhiteSpace
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
if (!textPacks.ContainsKey(Language)) { return false; }
|
|
||||||
return textPacks[Language].Any(t => t.NoWhiteSpace);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static HashSet<string> availableLanguages = new HashSet<string>();
|
private static HashSet<string> availableLanguages = new HashSet<string>();
|
||||||
public static IEnumerable<string> AvailableLanguages
|
public static IEnumerable<string> AvailableLanguages
|
||||||
@@ -87,7 +79,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string Get(string textTag, bool returnNull = false)
|
public static string Get(string textTag, bool returnNull = false, string fallBackTag = null)
|
||||||
{
|
{
|
||||||
if (!textPacks.ContainsKey(Language))
|
if (!textPacks.ContainsKey(Language))
|
||||||
{
|
{
|
||||||
@@ -102,7 +94,16 @@ namespace Barotrauma
|
|||||||
foreach (TextPack textPack in textPacks[Language])
|
foreach (TextPack textPack in textPacks[Language])
|
||||||
{
|
{
|
||||||
string text = textPack.Get(textTag);
|
string text = textPack.Get(textTag);
|
||||||
if (text != null) return text;
|
if (text != null) { return text; }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(fallBackTag))
|
||||||
|
{
|
||||||
|
foreach (TextPack textPack in textPacks[Language])
|
||||||
|
{
|
||||||
|
string text = textPack.Get(fallBackTag);
|
||||||
|
if (text != null) { return text; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//if text was not found and we're using a language other than English, see if we can find an English version
|
//if text was not found and we're using a language other than English, see if we can find an English version
|
||||||
|
|||||||
@@ -12,8 +12,6 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private Dictionary<string, List<string>> texts;
|
private Dictionary<string, List<string>> texts;
|
||||||
|
|
||||||
public readonly bool NoWhiteSpace;
|
|
||||||
|
|
||||||
private readonly string filePath;
|
private readonly string filePath;
|
||||||
|
|
||||||
public TextPack(string filePath)
|
public TextPack(string filePath)
|
||||||
@@ -25,7 +23,6 @@ namespace Barotrauma
|
|||||||
if (doc == null || doc.Root == null) return;
|
if (doc == null || doc.Root == null) return;
|
||||||
|
|
||||||
Language = doc.Root.GetAttributeString("language", "Unknown");
|
Language = doc.Root.GetAttributeString("language", "Unknown");
|
||||||
NoWhiteSpace = doc.Root.GetAttributeBool("nowhitespace", false);
|
|
||||||
|
|
||||||
foreach (XElement subElement in doc.Root.Elements())
|
foreach (XElement subElement in doc.Root.Elements())
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -393,7 +393,9 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
using (FileStream inFile = new FileStream(sCompressedFile, FileMode.Open, FileAccess.Read, FileShare.None))
|
using (FileStream inFile = new FileStream(sCompressedFile, FileMode.Open, FileAccess.Read, FileShare.None))
|
||||||
using (GZipStream zipStream = new GZipStream(inFile, CompressionMode.Decompress, true))
|
using (GZipStream zipStream = new GZipStream(inFile, CompressionMode.Decompress, true))
|
||||||
while (DecompressFile(sDir, zipStream, progress)) ;
|
while (DecompressFile(sDir, zipStream, progress)) { };
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user