Separate draw/update methods for editingHUD & resizing

This commit is contained in:
Regalis
2016-10-07 17:06:26 +03:00
parent 94895edbdb
commit e50b801a47
5 changed files with 89 additions and 55 deletions
+15 -19
View File
@@ -918,16 +918,17 @@ namespace Barotrauma
} }
} }
public override void DrawEditing(SpriteBatch spriteBatch, Camera cam) public override void UpdateEditing(Camera cam)
{ {
if (editingHUD==null || editingHUD.UserData as Item != this) if (editingHUD == null || editingHUD.UserData as Item != this)
{ {
editingHUD = CreateEditingHUD(); editingHUD = CreateEditingHUD(Screen.Selected != GameMain.EditMapScreen);
} }
editingHUD.Draw(spriteBatch);
editingHUD.Update((float)Timing.Step); editingHUD.Update((float)Timing.Step);
if (Screen.Selected != GameMain.EditMapScreen) return;
if (!prefab.IsLinkable) return; if (!prefab.IsLinkable) return;
if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return; if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return;
@@ -945,20 +946,11 @@ namespace Barotrauma
} }
} }
public void DrawInGameEditing(SpriteBatch spriteBatch) public override void DrawEditing(SpriteBatch spriteBatch, Camera cam)
{ {
if (editingHUD == null || editingHUD.UserData as Item != this) if (editingHUD != null) editingHUD.Draw(spriteBatch);
{
editingHUD = CreateEditingHUD(true);
}
if (editingHUD.Rect.Height > 60)
{
editingHUD.Update((float)Timing.Step);
editingHUD.Draw(spriteBatch);
}
} }
private GUIComponent CreateEditingHUD(bool inGame=false) private GUIComponent CreateEditingHUD(bool inGame=false)
{ {
int width = 450; int width = 450;
@@ -1063,7 +1055,7 @@ namespace Barotrauma
return editingHUD; return editingHUD;
} }
public virtual void DrawHUD(SpriteBatch spriteBatch, Character character) public virtual void DrawHUD(SpriteBatch spriteBatch, Camera cam, Character character)
{ {
if (condition <= 0.0f) if (condition <= 0.0f)
{ {
@@ -1073,7 +1065,7 @@ namespace Barotrauma
if (HasInGameEditableProperties) if (HasInGameEditableProperties)
{ {
DrawInGameEditing(spriteBatch); DrawEditing(spriteBatch, cam);
} }
foreach (ItemComponent ic in components) foreach (ItemComponent ic in components)
@@ -1082,7 +1074,7 @@ namespace Barotrauma
} }
} }
public virtual void UpdateHUD(Character character) public virtual void UpdateHUD(Camera cam, Character character)
{ {
if (condition <= 0.0f) if (condition <= 0.0f)
{ {
@@ -1090,6 +1082,10 @@ namespace Barotrauma
return; return;
} }
if (HasInGameEditableProperties)
{
UpdateEditing(cam);
}
foreach (ItemComponent ic in components) foreach (ItemComponent ic in components)
{ {
+10 -4
View File
@@ -149,16 +149,15 @@ namespace Barotrauma
} }
} }
public override void DrawEditing(SpriteBatch spriteBatch, Camera cam) public override void UpdateEditing(Camera cam)
{ {
if (editingHUD == null || editingHUD.UserData as LinkedSubmarine != this) if (editingHUD == null || editingHUD.UserData as LinkedSubmarine != this)
{ {
editingHUD = CreateEditingHUD(); editingHUD = CreateEditingHUD();
} }
editingHUD.Update(0.016f); editingHUD.Update((float)Timing.Step);
editingHUD.Draw(spriteBatch);
if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return; if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return;
Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition); Vector2 position = cam.ScreenToWorld(PlayerInput.MousePosition);
@@ -178,6 +177,13 @@ namespace Barotrauma
} }
} }
public override void DrawEditing(SpriteBatch spriteBatch, Camera cam)
{
if (editingHUD == null) return;
editingHUD.Draw(spriteBatch);
}
private GUIComponent CreateEditingHUD(bool inGame = false) private GUIComponent CreateEditingHUD(bool inGame = false)
{ {
+57 -27
View File
@@ -15,7 +15,7 @@ namespace Barotrauma
public static List<MapEntity> mapEntityList = new List<MapEntity>(); public static List<MapEntity> mapEntityList = new List<MapEntity>();
//which entities have been selected for editing //which entities have been selected for editing
protected static List<MapEntity> selectedList = new List<MapEntity>(); public static List<MapEntity> selectedList = new List<MapEntity>();
protected static GUIComponent editingHUD; protected static GUIComponent editingHUD;
@@ -54,7 +54,7 @@ namespace Barotrauma
} }
} }
} }
public static bool SelectedAny public static bool SelectedAny
{ {
get { return selectedList.Count > 0; } get { return selectedList.Count > 0; }
@@ -463,18 +463,15 @@ namespace Barotrauma
} }
} }
/// <summary> public static void UpdateEditor(Camera cam)
/// Call DrawEditing() if only one entity is selected
/// </summary>
public static void Edit(SpriteBatch spriteBatch, Camera cam)
{ {
if (selectedList.Count == 1) if (selectedList.Count == 1)
{ {
selectedList[0].DrawEditing(spriteBatch, cam); selectedList[0].UpdateEditing(cam);
if (selectedList[0].ResizeHorizontal || selectedList[0].ResizeVertical) if (selectedList[0].ResizeHorizontal || selectedList[0].ResizeVertical)
{ {
selectedList[0].DrawResizing(spriteBatch, cam); selectedList[0].UpdateResizing(cam);
} }
} }
else else
@@ -493,6 +490,19 @@ namespace Barotrauma
} }
} }
public static void DrawEditor(SpriteBatch spriteBatch, Camera cam)
{
if (selectedList.Count == 1)
{
selectedList[0].DrawEditing(spriteBatch, cam);
if (selectedList[0].ResizeHorizontal || selectedList[0].ResizeVertical)
{
selectedList[0].DrawResizing(spriteBatch, cam);
}
}
}
public static void DeselectAll() public static void DeselectAll()
{ {
foreach (MapEntity e in selectedList) foreach (MapEntity e in selectedList)
@@ -524,10 +534,12 @@ namespace Barotrauma
Move(-relative * 2.0f); Move(-relative * 2.0f);
} }
public virtual void UpdateEditing(Camera cam) { }
public virtual void DrawEditing(SpriteBatch spriteBatch, Camera cam) {} public virtual void DrawEditing(SpriteBatch spriteBatch, Camera cam) {}
private void DrawResizing(SpriteBatch spriteBatch, Camera cam) private void UpdateResizing(Camera cam)
{ {
isHighlighted = true; isHighlighted = true;
@@ -538,50 +550,43 @@ namespace Barotrauma
{ {
for (int y = StartY; y < 2; y += 2) for (int y = StartY; y < 2; y += 2)
{ {
Vector2 handlePos = cam.WorldToScreen(Position + new Vector2(x * (rect.Width * 0.5f + 5), y * (rect.Height * 0.5f + 5))); Vector2 handlePos = cam.WorldToScreen(Position + new Vector2(x * (rect.Width * 0.5f + 5), y * (rect.Height * 0.5f + 5)));
bool highlighted = Vector2.Distance(PlayerInput.MousePosition, handlePos)<5.0f; bool highlighted = Vector2.Distance(PlayerInput.MousePosition, handlePos) < 5.0f;
GUI.DrawRectangle(spriteBatch, handlePos - new Vector2(3.0f, 3.0f), new Vector2(6.0f, 6.0f), Color.White * (highlighted ? 1.0f : 0.6f), true,0, (int)Math.Max(1.5f / GameScreen.Selected.Cam.Zoom, 1.0f)); if (highlighted && PlayerInput.LeftButtonDown())
if (highlighted)
{ {
if (PlayerInput.LeftButtonDown()) selectionPos = Vector2.Zero;
{ resizeDirX = x;
selectionPos = Vector2.Zero; resizeDirY = y;
resizeDirX = x; resizing = true;
resizeDirY = y;
resizing = true;
}
} }
} }
} }
if (resizing) if (resizing)
{ {
Vector2 placePosition = new Vector2(rect.X, rect.Y); Vector2 placePosition = new Vector2(rect.X, rect.Y);
Vector2 placeSize = new Vector2(rect.Width, rect.Height); Vector2 placeSize = new Vector2(rect.Width, rect.Height);
Vector2 mousePos = Submarine.MouseToWorldGrid(cam, Submarine.MainSub); Vector2 mousePos = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
if (resizeDirX >0) if (resizeDirX > 0)
{ {
mousePos.X = Math.Max(mousePos.X, rect.X + Submarine.GridSize.X); mousePos.X = Math.Max(mousePos.X, rect.X + Submarine.GridSize.X);
placeSize.X = mousePos.X - placePosition.X; placeSize.X = mousePos.X - placePosition.X;
} }
else if (resizeDirX <0) else if (resizeDirX < 0)
{ {
mousePos.X = Math.Min(mousePos.X, rect.Right - Submarine.GridSize.X); mousePos.X = Math.Min(mousePos.X, rect.Right - Submarine.GridSize.X);
placeSize.X = (placePosition.X + placeSize.X)-mousePos.X; placeSize.X = (placePosition.X + placeSize.X) - mousePos.X;
placePosition.X = mousePos.X; placePosition.X = mousePos.X;
} }
if (resizeDirY < 0) if (resizeDirY < 0)
{ {
mousePos.Y = Math.Min(mousePos.Y, rect.Y - Submarine.GridSize.Y); mousePos.Y = Math.Min(mousePos.Y, rect.Y - Submarine.GridSize.Y);
placeSize.Y = placePosition.Y-mousePos.Y; placeSize.Y = placePosition.Y - mousePos.Y;
} }
else if (resizeDirY > 0) else if (resizeDirY > 0)
{ {
@@ -603,6 +608,31 @@ namespace Barotrauma
} }
} }
private void DrawResizing(SpriteBatch spriteBatch, Camera cam)
{
isHighlighted = true;
int startX = ResizeHorizontal ? -1 : 0;
int StartY = ResizeVertical ? -1 : 0;
for (int x = startX; x < 2; x += 2)
{
for (int y = StartY; y < 2; y += 2)
{
Vector2 handlePos = cam.WorldToScreen(Position + new Vector2(x * (rect.Width * 0.5f + 5), y * (rect.Height * 0.5f + 5)));
bool highlighted = Vector2.Distance(PlayerInput.MousePosition, handlePos)<5.0f;
GUI.DrawRectangle(spriteBatch,
handlePos - new Vector2(3.0f, 3.0f),
new Vector2(6.0f, 6.0f),
Color.White * (highlighted ? 1.0f : 0.6f),
true, 0,
(int)Math.Max(1.5f / GameScreen.Selected.Cam.Zoom, 1.0f));
}
}
}
public static List<MapEntity> FindMapEntities(Vector2 pos) public static List<MapEntity> FindMapEntities(Vector2 pos)
{ {
List<MapEntity> foundEntities = new List<MapEntity>(); List<MapEntity> foundEntities = new List<MapEntity>();
+5 -3
View File
@@ -891,6 +891,8 @@ namespace Barotrauma
if (!characterMode && !wiringMode) if (!characterMode && !wiringMode)
{ {
if (MapEntityPrefab.Selected != null) MapEntityPrefab.Selected.UpdatePlacing(cam); if (MapEntityPrefab.Selected != null) MapEntityPrefab.Selected.UpdatePlacing(cam);
MapEntity.UpdateEditor(cam);
} }
if ((characterMode || wiringMode) && dummyCharacter != null) if ((characterMode || wiringMode) && dummyCharacter != null)
@@ -914,7 +916,7 @@ namespace Barotrauma
{ {
if (dummyCharacter.SelectedConstruction != null) if (dummyCharacter.SelectedConstruction != null)
{ {
dummyCharacter.SelectedConstruction.UpdateHUD(dummyCharacter); dummyCharacter.SelectedConstruction.UpdateHUD(cam, dummyCharacter);
} }
if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.ClosestItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null; if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.ClosestItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null;
@@ -971,7 +973,7 @@ namespace Barotrauma
{ {
if (dummyCharacter.SelectedConstruction != null) if (dummyCharacter.SelectedConstruction != null)
{ {
dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, dummyCharacter); dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, cam, dummyCharacter);
} }
dummyCharacter.DrawHUD(spriteBatch, cam); dummyCharacter.DrawHUD(spriteBatch, cam);
@@ -993,7 +995,7 @@ namespace Barotrauma
GUItabs[selectedTab].Draw(spriteBatch); GUItabs[selectedTab].Draw(spriteBatch);
} }
MapEntity.Edit(spriteBatch, cam); MapEntity.DrawEditor(spriteBatch, cam);
} }
if (tutorial != null) tutorial.Draw(spriteBatch); if (tutorial != null) tutorial.Draw(spriteBatch);
+2 -2
View File
@@ -113,7 +113,7 @@ namespace Barotrauma
{ {
if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem) if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem)
{ {
Character.Controlled.SelectedConstruction.UpdateHUD(Character.Controlled); Character.Controlled.SelectedConstruction.UpdateHUD(cam, Character.Controlled);
} }
} }
Character.UpdateAll(cam, (float)deltaTime); Character.UpdateAll(cam, (float)deltaTime);
@@ -181,7 +181,7 @@ namespace Barotrauma
{ {
if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem) if (Character.Controlled.SelectedConstruction == Character.Controlled.ClosestItem)
{ {
Character.Controlled.SelectedConstruction.DrawHUD(spriteBatch, Character.Controlled); Character.Controlled.SelectedConstruction.DrawHUD(spriteBatch, cam, Character.Controlled);
} }
else if (!Character.Controlled.SelectedConstruction.IsInPickRange(Character.Controlled.WorldPosition)) else if (!Character.Controlled.SelectedConstruction.IsInPickRange(Character.Controlled.WorldPosition))
{ {