Client LuaCsForBarotrauma
BarotraumaClient/ClientSource/Map/MapEntityPrefab.cs
1 using Microsoft.Xna.Framework;
2 using Microsoft.Xna.Framework.Graphics;
3 using System;
4 
5 namespace Barotrauma
6 {
7  abstract partial class MapEntityPrefab : PrefabWithUintIdentifier
8  {
10  {
11  LocalizedString name = Category.HasFlag(MapEntityCategory.Legacy) ? TextManager.GetWithVariable("legacyitemformat", "[name]", Name) : Name;
12  LocalizedString tooltip = $"‖color:{XMLExtensions.ToStringHex(GUIStyle.TextColorBright)}‖{name}‖color:end‖";
13 
14  if (!Description.IsNullOrEmpty())
15  {
16  tooltip += '\n' + Description;
17  }
18 
19  if (IsModded)
20  {
21  tooltip = $"{tooltip}\n‖color:{Color.MediumPurple.ToStringHex()}‖{ContentPackage?.Name}‖color:end‖";
22  }
23 
24  return RichString.Rich(tooltip);
25  }
26 
27  public bool IsModded
29 
30  public virtual void UpdatePlacing(Camera cam)
31  {
33  {
34  Selected = null;
35  return;
36  }
37 
38  Vector2 placeSize = Submarine.GridSize;
39 
40  if (placePosition == Vector2.Zero)
41  {
42  Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
43 
44  if (PlayerInput.PrimaryMouseButtonHeld() && GUI.MouseOn == null) placePosition = position;
45  }
46  else
47  {
48  Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
49 
50  if (ResizeHorizontal) placeSize.X = position.X - placePosition.X;
51  if (ResizeVertical) placeSize.Y = placePosition.Y - position.Y;
52 
53  Rectangle newRect = Submarine.AbsRect(placePosition, placeSize);
54  newRect.Width = (int)Math.Max(newRect.Width, Submarine.GridSize.X);
55  newRect.Height = (int)Math.Max(newRect.Height, Submarine.GridSize.Y);
56 
57  if (Submarine.MainSub != null)
58  {
59  newRect.Location -= MathUtils.ToPoint(Submarine.MainSub.Position);
60  }
61 
62  if (PlayerInput.PrimaryMouseButtonReleased() && GUI.MouseOn == null)
63  {
64  CreateInstance(newRect);
65  placePosition = Vector2.Zero;
66  if (!PlayerInput.IsShiftDown())
67  {
68  Selected = null;
69  }
70  }
71 
72  newRect.Y = -newRect.Y;
73  }
74  }
75 
76  public virtual void DrawPlacing(SpriteBatch spriteBatch, Camera cam)
77  {
78  if (placePosition == Vector2.Zero)
79  {
80  Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
81 
82  GUI.DrawLine(spriteBatch, new Vector2(position.X - GameMain.GraphicsWidth, -position.Y), new Vector2(position.X + GameMain.GraphicsWidth, -position.Y), Color.White, 0, (int)(2.0f / cam.Zoom));
83  GUI.DrawLine(spriteBatch, new Vector2(position.X, -(position.Y - GameMain.GraphicsHeight)), new Vector2(position.X, -(position.Y + GameMain.GraphicsHeight)), Color.White, 0, (int)(2.0f / cam.Zoom));
84  }
85  else
86  {
87  Vector2 placeSize = Submarine.GridSize;
88  Vector2 position = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
89 
90  if (ResizeHorizontal) placeSize.X = position.X - placePosition.X;
91  if (ResizeVertical) placeSize.Y = placePosition.Y - position.Y;
92 
93  Rectangle newRect = Submarine.AbsRect(placePosition, placeSize);
94  newRect.Width = (int)Math.Max(newRect.Width, Submarine.GridSize.X);
95  newRect.Height = (int)Math.Max(newRect.Height, Submarine.GridSize.Y);
96 
97  if (Submarine.MainSub != null)
98  {
99  newRect.Location -= Submarine.MainSub.Position.ToPoint();
100  }
101 
102  newRect.Y = -newRect.Y;
103  GUI.DrawRectangle(spriteBatch, newRect, Color.DarkBlue);
104  }
105  }
106 
107  public virtual void DrawPlacing(SpriteBatch spriteBatch, Rectangle drawRect, float scale = 1.0f, float rotation = 0.0f, SpriteEffects spriteEffects = SpriteEffects.None)
108  {
109  if (Submarine.MainSub != null)
110  {
111  drawRect.Location -= Submarine.MainSub.Position.ToPoint();
112  }
113  drawRect.Y = -drawRect.Y;
114  GUI.DrawRectangle(spriteBatch, drawRect, Color.White);
115  }
116  public void DrawListLine(SpriteBatch spriteBatch, Vector2 pos, Color color)
117  {
118  GUIStyle.Font.DrawString(spriteBatch, OriginalName, pos, color);
119  }
120  }
121 }
float? Zoom
Definition: Camera.cs:78
static int GraphicsWidth
Definition: GameMain.cs:162
static ContentPackage VanillaContent
Definition: GameMain.cs:84
static int GraphicsHeight
Definition: GameMain.cs:168
virtual void DrawPlacing(SpriteBatch spriteBatch, Rectangle drawRect, float scale=1.0f, float rotation=0.0f, SpriteEffects spriteEffects=SpriteEffects.None)
void DrawListLine(SpriteBatch spriteBatch, Vector2 pos, Color color)
virtual void DrawPlacing(SpriteBatch spriteBatch, Camera cam)
abstract void CreateInstance(Rectangle rect)
static RichString Rich(LocalizedString str, Func< string, string >? postProcess=null)
Definition: RichString.cs:67
static Vector2 MouseToWorldGrid(Camera cam, Submarine sub, Vector2? mousePos=null, bool round=false)
static Rectangle AbsRect(Vector2 pos, Vector2 size)