- "wiring mode" which makes wiring a bit more convenient in editor
- invisible entities (items inside cabinets, hulls/gaps when they've been hidden) can't be highlighted or selected in the editor - fixed And Components always sending a signal out during the first frame if timeframe is set to 0.0 - fixed moloch not appearing in the tutorial
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using Barotrauma.Items.Components;
|
||||
using FarseerPhysics;
|
||||
using Microsoft.Xna.Framework;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -17,7 +18,7 @@ namespace Barotrauma.Tutorials
|
||||
|
||||
public override IEnumerable<object> UpdateState()
|
||||
{
|
||||
//Submarine.Loaded.SetPosition(new Vector2(Submarine.Loaded.Position.X, 38500.0f));
|
||||
Submarine.Loaded.SetPosition(new Vector2(Submarine.Loaded.Position.X, 38500.0f));
|
||||
|
||||
//spawn some fish next to the player
|
||||
GameMain.GameScreen.BackgroundCreatureManager.SpawnSprites(2,
|
||||
@@ -275,7 +276,7 @@ namespace Barotrauma.Tutorials
|
||||
|
||||
infoBox = CreateInfoFrame("Steer the submarine downwards, heading further into the cavern.");
|
||||
|
||||
while (Submarine.Loaded.WorldPosition.Y > 39000.0f)
|
||||
while (Submarine.Loaded.WorldPosition.Y > 25000.0f)
|
||||
{
|
||||
yield return CoroutineStatus.Running;
|
||||
}
|
||||
@@ -449,6 +450,8 @@ namespace Barotrauma.Tutorials
|
||||
yield return CoroutineStatus.Running;
|
||||
}
|
||||
|
||||
moloch.AnimController.SetPosition(ConvertUnits.ToSimUnits(Character.Controlled.WorldPosition + Vector2.UnitY*1000.0f));
|
||||
|
||||
infoBox = CreateInfoFrame("Now we're ready to shoot! Select the railgun controller.");
|
||||
|
||||
while (Character.Controlled.SelectedConstruction == null || Character.Controlled.SelectedConstruction.Name != "Railgun Controller")
|
||||
|
||||
@@ -42,7 +42,7 @@ namespace Barotrauma.Tutorials
|
||||
GameMain.GameSession = new GameSession(Submarine.Loaded, "", GameModePreset.list.Find(gm => gm.Name.ToLower() == "tutorial"));
|
||||
(GameMain.GameSession.gameMode as TutorialMode).tutorialType = this;
|
||||
|
||||
GameMain.GameSession.StartShift("tutorial");
|
||||
GameMain.GameSession.StartShift("tuto1");
|
||||
|
||||
GameMain.GameSession.TaskManager.Tasks.Clear();
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ namespace Barotrauma.Items.Components
|
||||
//the output is sent if both inputs have received a signal within the timeframe
|
||||
protected float timeFrame;
|
||||
|
||||
[InGameEditable, HasDefaultValue(0.1f, true)]
|
||||
[InGameEditable, HasDefaultValue(0.0f, true)]
|
||||
public float TimeFrame
|
||||
{
|
||||
get { return timeFrame; }
|
||||
@@ -33,7 +33,7 @@ namespace Barotrauma.Items.Components
|
||||
public AndComponent(Item item, XElement element)
|
||||
: base (item, element)
|
||||
{
|
||||
timeSinceReceived = new float[] { timeFrame*2.0f, timeFrame*2.0f};
|
||||
timeSinceReceived = new float[] { Math.Max(timeFrame*2.0f,0.1f), Math.Max(timeFrame*2.0f, 0.1f) };
|
||||
|
||||
//output = "1";
|
||||
}
|
||||
|
||||
@@ -328,7 +328,7 @@ namespace Barotrauma.Items.Components
|
||||
//nodes.Add(newNodePos);
|
||||
}
|
||||
|
||||
if (!editing || !PlayerInput.MouseInsideWindow || GameMain.EditMapScreen.CharacterMode) return;
|
||||
if (!editing || !PlayerInput.MouseInsideWindow || !GameMain.EditMapScreen.WiringMode ) return;
|
||||
|
||||
for (int i = 0; i < Nodes.Count; i++)
|
||||
{
|
||||
@@ -371,7 +371,6 @@ namespace Barotrauma.Items.Components
|
||||
{
|
||||
if (selectedNodeIndex != null && draggingWire == this)
|
||||
{
|
||||
|
||||
MapEntity.DisableSelect = true;
|
||||
//Nodes[(int)selectedNodeIndex] = GameMain.EditMapScreen.Cam.ScreenToWorld(PlayerInput.MousePosition)-Submarine.HiddenSubPosition+Submarine.Loaded.Position;
|
||||
|
||||
|
||||
@@ -86,6 +86,14 @@ namespace Barotrauma
|
||||
private set;
|
||||
}
|
||||
|
||||
public override bool SelectableInEditor
|
||||
{
|
||||
get
|
||||
{
|
||||
return ParentInventory == null && (body == null || !body.Enabled);
|
||||
}
|
||||
}
|
||||
|
||||
public List<FixRequirement> FixRequirements;
|
||||
|
||||
public override string Name
|
||||
|
||||
@@ -30,7 +30,6 @@ namespace Barotrauma
|
||||
private float higherSurface;
|
||||
private float lowerSurface;
|
||||
|
||||
|
||||
public float Open
|
||||
{
|
||||
get { return open; }
|
||||
@@ -73,6 +72,14 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public override bool SelectableInEditor
|
||||
{
|
||||
get
|
||||
{
|
||||
return ShowGaps;
|
||||
}
|
||||
}
|
||||
|
||||
public Gap(MapEntityPrefab prefab, Rectangle rectangle)
|
||||
: this (rectangle, Submarine.Loaded)
|
||||
{ }
|
||||
|
||||
@@ -90,6 +90,14 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public override bool SelectableInEditor
|
||||
{
|
||||
get
|
||||
{
|
||||
return ShowHulls;
|
||||
}
|
||||
}
|
||||
|
||||
public override bool IsLinkable
|
||||
{
|
||||
get { return true; }
|
||||
|
||||
@@ -92,6 +92,11 @@ namespace Barotrauma
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public virtual bool SelectableInEditor
|
||||
{
|
||||
get { return true; }
|
||||
}
|
||||
|
||||
public override Vector2 Position
|
||||
{
|
||||
get
|
||||
@@ -288,9 +293,12 @@ namespace Barotrauma
|
||||
|
||||
foreach (MapEntity e in mapEntityList)
|
||||
{
|
||||
if (!e.SelectableInEditor) continue;
|
||||
|
||||
if (highLightedEntity == null || e.Sprite == null ||
|
||||
(highLightedEntity.Sprite!=null && e.Sprite.Depth < highLightedEntity.Sprite.Depth))
|
||||
{
|
||||
|
||||
if (e.IsMouseOn(position)) highLightedEntity = e;
|
||||
}
|
||||
e.isSelected = false;
|
||||
@@ -315,8 +323,7 @@ namespace Barotrauma
|
||||
|
||||
if (moveAmount != Vector2.Zero)
|
||||
{
|
||||
foreach (MapEntity e in selectedList)
|
||||
e.Move(moveAmount);
|
||||
foreach (MapEntity e in selectedList) e.Move(moveAmount);
|
||||
}
|
||||
|
||||
startMovingPos = Vector2.Zero;
|
||||
@@ -584,8 +591,9 @@ namespace Barotrauma
|
||||
|
||||
foreach (MapEntity e in mapEntityList)
|
||||
{
|
||||
if (Submarine.RectsOverlap(selectionRect, e.rect))
|
||||
foundEntities.Add(e);
|
||||
if (!e.SelectableInEditor) continue;
|
||||
|
||||
if (Submarine.RectsOverlap(selectionRect, e.rect)) foundEntities.Add(e);
|
||||
}
|
||||
|
||||
return foundEntities;
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
@@ -28,6 +29,9 @@ namespace Barotrauma
|
||||
|
||||
private bool characterMode;
|
||||
|
||||
private bool wiringMode;
|
||||
private GUIFrame wiringToolPanel;
|
||||
|
||||
private Tutorials.EditorTutorial tutorial;
|
||||
|
||||
public Camera Cam
|
||||
@@ -65,6 +69,11 @@ namespace Barotrauma
|
||||
get { return characterMode; }
|
||||
}
|
||||
|
||||
public bool WiringMode
|
||||
{
|
||||
get { return wiringMode; }
|
||||
}
|
||||
|
||||
|
||||
public EditMapScreen()
|
||||
{
|
||||
@@ -176,6 +185,11 @@ namespace Barotrauma
|
||||
button = new GUIButton(new Rectangle(0, y, 0, 20), "Character mode", Alignment.Left, GUI.Style, leftPanel);
|
||||
button.ToolTip = "Allows you to pick up and use items. Useful for things such as placing items inside closets, turning devices on/off and doing the wiring.";
|
||||
button.OnClicked = ToggleCharacterMode;
|
||||
|
||||
y += 35;
|
||||
button = new GUIButton(new Rectangle(0, y, 0, 20), "Wiring mode", Alignment.Left, GUI.Style, leftPanel);
|
||||
//button.ToolTip = "Allows you to pick up and use items. Useful for things such as placing items inside closets, turning devices on/off and doing the wiring.";
|
||||
button.OnClicked = ToggleWiringMode;
|
||||
|
||||
y+=50;
|
||||
button = new GUIButton(new Rectangle(0, y, 0, 20), "Generate waypoints", Alignment.Left, GUI.Style, leftPanel);
|
||||
@@ -252,6 +266,10 @@ namespace Barotrauma
|
||||
|
||||
MapEntityPrefab.Selected = null;
|
||||
|
||||
if (characterMode) ToggleCharacterMode();
|
||||
|
||||
if (wiringMode) ToggleWiringMode();
|
||||
|
||||
if (dummyCharacter != null)
|
||||
{
|
||||
dummyCharacter.Remove();
|
||||
@@ -444,6 +462,84 @@ namespace Barotrauma
|
||||
return true;
|
||||
}
|
||||
|
||||
private void ToggleWiringMode()
|
||||
{
|
||||
ToggleWiringMode(null, null);
|
||||
}
|
||||
|
||||
private bool ToggleWiringMode(GUIButton button, object obj)
|
||||
{
|
||||
wiringMode = !wiringMode;
|
||||
|
||||
if (characterMode != wiringMode) ToggleCharacterMode();
|
||||
|
||||
if (wiringMode)
|
||||
{
|
||||
var screwdriverPrefab = ItemPrefab.list.Find(ip => ip.Name == "Screwdriver") as ItemPrefab;
|
||||
|
||||
var item = new Item(screwdriverPrefab, Vector2.Zero, null);
|
||||
|
||||
dummyCharacter.Inventory.TryPutItem(item, new List<LimbSlot>() { LimbSlot.RightHand }, false);
|
||||
|
||||
wiringToolPanel = CreateWiringPanel();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private GUIFrame CreateWiringPanel()
|
||||
{
|
||||
GUIFrame frame = new GUIFrame(new Rectangle(0,0,50,300), null, Alignment.Right | Alignment.CenterY, GUI.Style);
|
||||
frame.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f);
|
||||
|
||||
GUIListBox listBox = new GUIListBox(Rectangle.Empty, GUI.Style, frame);
|
||||
listBox.OnSelected = SelectWire;
|
||||
|
||||
foreach (MapEntityPrefab ep in MapEntityPrefab.list)
|
||||
{
|
||||
var itemPrefab = ep as ItemPrefab;
|
||||
if (itemPrefab == null || itemPrefab.Name == null || !itemPrefab.Name.Contains("Wire")) continue;
|
||||
|
||||
GUIFrame imgFrame = new GUIFrame(new Rectangle(0, 0, (int)itemPrefab.sprite.size.X, (int)itemPrefab.sprite.size.Y), null, listBox);
|
||||
imgFrame.UserData = itemPrefab;
|
||||
imgFrame.HoverColor = Color.White * 0.5f;
|
||||
imgFrame.SelectedColor = Color.Gold * 0.7f;
|
||||
|
||||
var img = new GUIImage(new Rectangle(0, 0, (int)itemPrefab.sprite.size.X, (int)itemPrefab.sprite.size.Y), itemPrefab.sprite, Alignment.TopLeft, imgFrame);
|
||||
img.Color = ep.SpriteColor;
|
||||
}
|
||||
|
||||
return frame;
|
||||
}
|
||||
|
||||
private bool SelectWire(GUIComponent component, object userData)
|
||||
{
|
||||
if (dummyCharacter == null) return false;
|
||||
|
||||
Item existingWire = dummyCharacter.SelectedItems.FirstOrDefault(i => i != null && i.Prefab == userData as ItemPrefab);
|
||||
if (existingWire!=null)
|
||||
{
|
||||
existingWire.Drop();
|
||||
existingWire.Remove();
|
||||
return false;
|
||||
}
|
||||
|
||||
var wire = new Item(userData as ItemPrefab, Vector2.Zero, null);
|
||||
|
||||
|
||||
int slotIndex = dummyCharacter.Inventory.FindLimbSlot(LimbSlot.LeftHand);
|
||||
if (dummyCharacter.Inventory.Items[slotIndex] != null && dummyCharacter.Inventory.Items[slotIndex].Prefab != userData as ItemPrefab)
|
||||
{
|
||||
dummyCharacter.Inventory.Items[slotIndex].Drop();
|
||||
dummyCharacter.Inventory.Items[slotIndex].Remove();
|
||||
}
|
||||
|
||||
dummyCharacter.Inventory.TryPutItem(wire, slotIndex, false, false);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private bool ChangeSubName(GUITextBox textBox, string text)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
@@ -528,7 +624,7 @@ namespace Barotrauma
|
||||
|
||||
if (characterMode)
|
||||
{
|
||||
if (dummyCharacter == null || Entity.FindEntityByID(dummyCharacter.ID)!=dummyCharacter)
|
||||
if (dummyCharacter == null || Entity.FindEntityByID(dummyCharacter.ID) != dummyCharacter)
|
||||
{
|
||||
ToggleCharacterMode(null, null);
|
||||
}
|
||||
@@ -551,6 +647,7 @@ namespace Barotrauma
|
||||
dummyCharacter.ControlLocalPlayer((float)deltaTime, cam, false);
|
||||
dummyCharacter.Control((float)deltaTime, cam);
|
||||
cam.TargetPos = Vector2.Zero;
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -564,6 +661,15 @@ namespace Barotrauma
|
||||
leftPanel.Update((float)deltaTime);
|
||||
topPanel.Update((float)deltaTime);
|
||||
|
||||
if (wiringMode)
|
||||
{
|
||||
if (!dummyCharacter.SelectedItems.Any(it => it.HasTag("Wire")))
|
||||
{
|
||||
wiringToolPanel.GetChild<GUIListBox>().Deselect();
|
||||
}
|
||||
wiringToolPanel.Update((float)deltaTime);
|
||||
}
|
||||
|
||||
if (loadFrame!=null)
|
||||
{
|
||||
loadFrame.Update((float)deltaTime);
|
||||
@@ -617,38 +723,33 @@ namespace Barotrauma
|
||||
|
||||
//EntityPrefab.DrawList(spriteBatch, new Vector2(20,50));
|
||||
|
||||
if (characterMode)
|
||||
{
|
||||
if (dummyCharacter != null)
|
||||
if (characterMode && dummyCharacter != null)
|
||||
{
|
||||
dummyCharacter.AnimController.FindHull(dummyCharacter.CursorWorldPosition, false);
|
||||
|
||||
foreach (Item item in dummyCharacter.SelectedItems)
|
||||
{
|
||||
dummyCharacter.AnimController.FindHull(dummyCharacter.CursorWorldPosition, false);
|
||||
if (item == null) continue;
|
||||
item.SetTransform(dummyCharacter.SimPosition, 0.0f);
|
||||
|
||||
foreach (Item item in dummyCharacter.SelectedItems)
|
||||
{
|
||||
if (item == null) continue;
|
||||
item.SetTransform(dummyCharacter.SimPosition, 0.0f);
|
||||
|
||||
item.Update(cam, (float)deltaTime);
|
||||
}
|
||||
|
||||
if (dummyCharacter.SelectedConstruction != null)
|
||||
{
|
||||
//if (dummyCharacter.SelectedConstruction == dummyCharacter.ClosestItem)
|
||||
//{
|
||||
dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, dummyCharacter);
|
||||
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// dummyCharacter.SelectedConstruction = null;
|
||||
//}
|
||||
|
||||
if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.ClosestItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null;
|
||||
}
|
||||
item.Update(cam, (float)deltaTime);
|
||||
}
|
||||
|
||||
dummyCharacter.DrawHUD(spriteBatch, cam);
|
||||
if (dummyCharacter.SelectedConstruction != null)
|
||||
{
|
||||
dummyCharacter.SelectedConstruction.DrawHUD(spriteBatch, dummyCharacter);
|
||||
|
||||
if (PlayerInput.KeyHit(InputType.Select) && dummyCharacter.ClosestItem != dummyCharacter.SelectedConstruction) dummyCharacter.SelectedConstruction = null;
|
||||
}
|
||||
|
||||
if (!wiringMode)
|
||||
{
|
||||
dummyCharacter.DrawHUD(spriteBatch, cam);
|
||||
}
|
||||
else
|
||||
{
|
||||
wiringToolPanel.Draw(spriteBatch);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user