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);
if (Screen.Selected != GameMain.EditMapScreen) return;
if (!prefab.IsLinkable) 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)
{
editingHUD = CreateEditingHUD(true);
}
if (editingHUD.Rect.Height > 60)
{
editingHUD.Update((float)Timing.Step);
editingHUD.Draw(spriteBatch);
}
if (editingHUD != null) editingHUD.Draw(spriteBatch);
}
private GUIComponent CreateEditingHUD(bool inGame=false)
{
int width = 450;
@@ -1063,7 +1055,7 @@ namespace Barotrauma
return editingHUD;
}
public virtual void DrawHUD(SpriteBatch spriteBatch, Character character)
public virtual void DrawHUD(SpriteBatch spriteBatch, Camera cam, Character character)
{
if (condition <= 0.0f)
{
@@ -1073,7 +1065,7 @@ namespace Barotrauma
if (HasInGameEditableProperties)
{
DrawInGameEditing(spriteBatch);
DrawEditing(spriteBatch, cam);
}
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)
{
@@ -1090,6 +1082,10 @@ namespace Barotrauma
return;
}
if (HasInGameEditableProperties)
{
UpdateEditing(cam);
}
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)
{
editingHUD = CreateEditingHUD();
}
editingHUD.Update(0.016f);
editingHUD.Draw(spriteBatch);
editingHUD.Update((float)Timing.Step);
if (!PlayerInput.LeftButtonClicked() || !PlayerInput.KeyDown(Keys.Space)) return;
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)
{
+57 -27
View File
@@ -15,7 +15,7 @@ namespace Barotrauma
public static List<MapEntity> mapEntityList = new List<MapEntity>();
//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;
@@ -54,7 +54,7 @@ namespace Barotrauma
}
}
}
public static bool SelectedAny
{
get { return selectedList.Count > 0; }
@@ -463,18 +463,15 @@ namespace Barotrauma
}
}
/// <summary>
/// Call DrawEditing() if only one entity is selected
/// </summary>
public static void Edit(SpriteBatch spriteBatch, Camera cam)
public static void UpdateEditor(Camera cam)
{
if (selectedList.Count == 1)
{
selectedList[0].DrawEditing(spriteBatch, cam);
selectedList[0].UpdateEditing(cam);
if (selectedList[0].ResizeHorizontal || selectedList[0].ResizeVertical)
{
selectedList[0].DrawResizing(spriteBatch, cam);
selectedList[0].UpdateResizing(cam);
}
}
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()
{
foreach (MapEntity e in selectedList)
@@ -524,10 +534,12 @@ namespace Barotrauma
Move(-relative * 2.0f);
}
public virtual void UpdateEditing(Camera cam) { }
public virtual void DrawEditing(SpriteBatch spriteBatch, Camera cam) {}
private void DrawResizing(SpriteBatch spriteBatch, Camera cam)
private void UpdateResizing(Camera cam)
{
isHighlighted = true;
@@ -538,50 +550,43 @@ namespace Barotrauma
{
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;
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)
if (highlighted && PlayerInput.LeftButtonDown())
{
if (PlayerInput.LeftButtonDown())
{
selectionPos = Vector2.Zero;
resizeDirX = x;
resizeDirY = y;
resizing = true;
}
selectionPos = Vector2.Zero;
resizeDirX = x;
resizeDirY = y;
resizing = true;
}
}
}
if (resizing)
{
Vector2 placePosition = new Vector2(rect.X, rect.Y);
Vector2 placeSize = new Vector2(rect.Width, rect.Height);
Vector2 mousePos = Submarine.MouseToWorldGrid(cam, Submarine.MainSub);
if (resizeDirX >0)
if (resizeDirX > 0)
{
mousePos.X = Math.Max(mousePos.X, rect.X + Submarine.GridSize.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);
placeSize.X = (placePosition.X + placeSize.X)-mousePos.X;
placeSize.X = (placePosition.X + placeSize.X) - mousePos.X;
placePosition.X = mousePos.X;
}
if (resizeDirY < 0)
{
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)
{
@@ -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)
{
List<MapEntity> foundEntities = new List<MapEntity>();
+5 -3
View File
@@ -891,6 +891,8 @@ namespace Barotrauma
if (!characterMode && !wiringMode)
{
if (MapEntityPrefab.Selected != null) MapEntityPrefab.Selected.UpdatePlacing(cam);
MapEntity.UpdateEditor(cam);
}
if ((characterMode || wiringMode) && dummyCharacter != null)
@@ -914,7 +916,7 @@ namespace Barotrauma
{
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;
@@ -971,7 +973,7 @@ namespace Barotrauma
{
if (dummyCharacter.SelectedConstruction != null)
{
dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, dummyCharacter);
dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, cam, dummyCharacter);
}
dummyCharacter.DrawHUD(spriteBatch, cam);
@@ -993,7 +995,7 @@ namespace Barotrauma
GUItabs[selectedTab].Draw(spriteBatch);
}
MapEntity.Edit(spriteBatch, cam);
MapEntity.DrawEditor(spriteBatch, cam);
}
if (tutorial != null) tutorial.Draw(spriteBatch);
+2 -2
View File
@@ -113,7 +113,7 @@ namespace Barotrauma
{
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);
@@ -181,7 +181,7 @@ namespace Barotrauma
{
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))
{