221 lines
8.4 KiB
C#
221 lines
8.4 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using System;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
partial class WayPoint : MapEntity
|
|
{
|
|
private static Texture2D iconTexture;
|
|
private const int IconSize = 32;
|
|
private static int[] iconIndices = { 3, 0, 1, 2 };
|
|
|
|
public override void Draw(SpriteBatch spriteBatch, bool editing, bool back = true)
|
|
{
|
|
if (!editing && !GameMain.DebugDraw) return;
|
|
|
|
if (IsHidden()) return;
|
|
|
|
//Rectangle drawRect =
|
|
// Submarine == null ? rect : new Rectangle((int)(Submarine.DrawPosition.X + rect.X), (int)(Submarine.DrawPosition.Y + rect.Y), rect.Width, rect.Height);
|
|
|
|
Vector2 drawPos = Position;
|
|
if (Submarine != null) drawPos += Submarine.DrawPosition;
|
|
drawPos.Y = -drawPos.Y;
|
|
|
|
Color clr = currentHull == null ? Color.Blue : Color.White;
|
|
if (IsSelected) clr = Color.Red;
|
|
if (isHighlighted) clr = Color.DarkRed;
|
|
|
|
int iconX = iconIndices[(int)spawnType] * IconSize % iconTexture.Width;
|
|
int iconY = (int)(Math.Floor(iconIndices[(int)spawnType] * IconSize / (float)iconTexture.Width)) * IconSize;
|
|
|
|
int iconSize = ConnectedGap == null && Ladders == null ? IconSize : (int)(IconSize * 1.5f);
|
|
|
|
spriteBatch.Draw(iconTexture,
|
|
new Rectangle((int)(drawPos.X - iconSize / 2), (int)(drawPos.Y - iconSize / 2), iconSize, iconSize),
|
|
new Rectangle(iconX, iconY, IconSize, IconSize), clr);
|
|
|
|
//GUI.DrawRectangle(spriteBatch, new Rectangle(drawRect.X, -drawRect.Y, rect.Width, rect.Height), clr, true);
|
|
|
|
//GUI.SmallFont.DrawString(spriteBatch, Position.ToString(), new Vector2(Position.X, -Position.Y), Color.White);
|
|
|
|
foreach (MapEntity e in linkedTo)
|
|
{
|
|
GUI.DrawLine(spriteBatch,
|
|
drawPos,
|
|
new Vector2(e.DrawPosition.X, -e.DrawPosition.Y),
|
|
Color.Green);
|
|
}
|
|
}
|
|
|
|
private bool IsHidden()
|
|
{
|
|
if (spawnType == SpawnType.Path)
|
|
{
|
|
return (!GameMain.DebugDraw && !ShowWayPoints);
|
|
}
|
|
else
|
|
{
|
|
return (!GameMain.DebugDraw && !ShowSpawnPoints);
|
|
}
|
|
}
|
|
|
|
public override void UpdateEditing(Camera cam)
|
|
{
|
|
if (editingHUD == null || editingHUD.UserData != this)
|
|
{
|
|
editingHUD = CreateEditingHUD();
|
|
}
|
|
|
|
editingHUD.Update((float)Timing.Step);
|
|
|
|
if (PlayerInput.LeftButtonClicked())
|
|
{
|
|
Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition);
|
|
|
|
foreach (MapEntity e in mapEntityList)
|
|
{
|
|
if (e.GetType() != typeof(WayPoint)) continue;
|
|
if (e == this) continue;
|
|
|
|
if (!Submarine.RectContains(e.Rect, position)) continue;
|
|
|
|
linkedTo.Add(e);
|
|
e.linkedTo.Add(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void DrawEditing(SpriteBatch spriteBatch, Camera cam)
|
|
{
|
|
if (editingHUD != null) editingHUD.Draw(spriteBatch);
|
|
}
|
|
|
|
private bool ChangeSpawnType(GUIButton button, object obj)
|
|
{
|
|
GUITextBlock spawnTypeText = button.Parent as GUITextBlock;
|
|
|
|
spawnType += (int)button.UserData;
|
|
|
|
if (spawnType > SpawnType.Cargo) spawnType = SpawnType.Human;
|
|
if (spawnType < SpawnType.Human) spawnType = SpawnType.Cargo;
|
|
|
|
spawnTypeText.Text = spawnType.ToString();
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool EnterIDCardDesc(GUITextBox textBox, string text)
|
|
{
|
|
IdCardDesc = text;
|
|
textBox.Text = text;
|
|
textBox.Color = Color.Green;
|
|
|
|
textBox.Deselect();
|
|
|
|
return true;
|
|
}
|
|
private bool EnterIDCardTags(GUITextBox textBox, string text)
|
|
{
|
|
IdCardTags = text.Split(',');
|
|
textBox.Text = text;
|
|
textBox.Color = Color.Green;
|
|
|
|
textBox.Deselect();
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool EnterAssignedJob(GUITextBox textBox, string text)
|
|
{
|
|
string trimmedName = text.ToLowerInvariant().Trim();
|
|
assignedJob = JobPrefab.List.Find(jp => jp.Name.ToLowerInvariant() == trimmedName);
|
|
|
|
if (assignedJob != null && trimmedName != TextManager.Get("None").ToLowerInvariant())
|
|
{
|
|
textBox.Color = Color.Green;
|
|
textBox.Text = (assignedJob == null) ? TextManager.Get("None") : assignedJob.Name;
|
|
}
|
|
|
|
textBox.Deselect();
|
|
|
|
return true;
|
|
}
|
|
|
|
private bool TextBoxChanged(GUITextBox textBox, string text)
|
|
{
|
|
textBox.Color = Color.Red;
|
|
|
|
return true;
|
|
}
|
|
|
|
private GUIComponent CreateEditingHUD(bool inGame = false)
|
|
{
|
|
int width = 500;
|
|
int height = spawnType == SpawnType.Path ? 100 : 200;
|
|
int x = GameMain.GraphicsWidth / 2 - width / 2, y = 10;
|
|
|
|
editingHUD = new GUIFrame(new Rectangle(x, y, width, height));
|
|
editingHUD.Padding = new Vector4(10, 10, 20, 0);
|
|
editingHUD.UserData = this;
|
|
|
|
if (spawnType == SpawnType.Path)
|
|
{
|
|
new GUITextBlock(new Rectangle(0, 0, 100, 20), TextManager.Get("Editing")+" " +TextManager.Get("Waypoint"), "", editingHUD);
|
|
new GUITextBlock(new Rectangle(0, 20, 100, 20), TextManager.Get("LinkWaypoint"), "", editingHUD);
|
|
}
|
|
else
|
|
{
|
|
new GUITextBlock(new Rectangle(0, 0, 100, 20), TextManager.Get("Editing") + " " + TextManager.Get("Spawnpoint"), "", editingHUD);
|
|
new GUITextBlock(new Rectangle(0, 25, 100, 20), TextManager.Get("SpawnType") + ": ", "", editingHUD);
|
|
|
|
var spawnTypeText = new GUITextBlock(new Rectangle(0, 25, 200, 20), spawnType.ToString(), "", Alignment.Right, Alignment.TopLeft, editingHUD);
|
|
|
|
var button = new GUIButton(new Rectangle(-30, 0, 20, 20), "-", Alignment.Right, "", spawnTypeText);
|
|
button.UserData = -1;
|
|
button.OnClicked = ChangeSpawnType;
|
|
|
|
button = new GUIButton(new Rectangle(0, 0, 20, 20), "+", Alignment.Right, "", spawnTypeText);
|
|
button.UserData = 1;
|
|
button.OnClicked = ChangeSpawnType;
|
|
|
|
y = 40 + 20;
|
|
|
|
new GUITextBlock(new Rectangle(0, y, 100, 20), TextManager.Get("IDCardDescription"), "", Alignment.TopLeft, Alignment.CenterLeft, editingHUD, false, GUI.SmallFont);
|
|
GUITextBox propertyBox = new GUITextBox(new Rectangle(150, y, 0, 20), "", editingHUD);
|
|
propertyBox.MaxTextLength = 150;
|
|
propertyBox.Text = idCardDesc;
|
|
propertyBox.OnEnterPressed = EnterIDCardDesc;
|
|
propertyBox.OnTextChanged = TextBoxChanged;
|
|
propertyBox.ToolTip = TextManager.Get("IDCardDescriptionTooltip");
|
|
|
|
y = y + 30;
|
|
|
|
new GUITextBlock(new Rectangle(0, y, 100, 20), TextManager.Get("IDCardTags"), "", Alignment.TopLeft, Alignment.CenterLeft, editingHUD, false, GUI.SmallFont);
|
|
propertyBox = new GUITextBox(new Rectangle(150, y, 0, 20), "", editingHUD);
|
|
propertyBox.MaxTextLength = 60;
|
|
propertyBox.Text = string.Join(", ", idCardTags);
|
|
propertyBox.OnEnterPressed = EnterIDCardTags;
|
|
propertyBox.OnTextChanged = TextBoxChanged;
|
|
propertyBox.ToolTip = TextManager.Get("IDCardTagsTooltip");
|
|
|
|
y = y + 30;
|
|
|
|
new GUITextBlock(new Rectangle(0, y, 100, 20), TextManager.Get("SpawnpointJobs"), "", Alignment.TopLeft, Alignment.CenterLeft, editingHUD, false, GUI.SmallFont);
|
|
propertyBox = new GUITextBox(new Rectangle(150, y, 0, 20), "", editingHUD);
|
|
propertyBox.MaxTextLength = 60;
|
|
propertyBox.Text = (assignedJob == null) ? "None" : assignedJob.Name;
|
|
propertyBox.OnEnterPressed = EnterAssignedJob;
|
|
propertyBox.OnTextChanged = TextBoxChanged;
|
|
propertyBox.ToolTip = TextManager.Get("SpawnpointJobsTooltip");
|
|
|
|
}
|
|
|
|
y = y + 30;
|
|
|
|
return editingHUD;
|
|
}
|
|
}
|
|
}
|