Launcher bugfixes, fixed submarine position syncing, previewing the sub after round ends, wiring bugfix, slower reactor overheat, itemlabel, wifi components

This commit is contained in:
Regalis
2015-08-21 20:21:22 +03:00
parent c044d27071
commit d8904eaa56
43 changed files with 546 additions and 228 deletions
+1 -2
View File
@@ -17,7 +17,6 @@ namespace Launcher
{ {
public partial class LauncherMain : Form public partial class LauncherMain : Form
{ {
public static string ContentPackageFolder = "Data/ContentPackages/";
private const string configPath = "config.xml"; private const string configPath = "config.xml";
private Subsurface.GameSettings settings; private Subsurface.GameSettings settings;
@@ -42,7 +41,7 @@ namespace Launcher
{ {
InitializeComponent(); InitializeComponent();
ContentPackage.LoadAll(LauncherMain.ContentPackageFolder); ContentPackage.LoadAll(ContentPackage.Folder);
contentPackageBox.DataSource = ContentPackage.list; contentPackageBox.DataSource = ContentPackage.list;
supportedModes = new List<GraphicsMode>(); supportedModes = new List<GraphicsMode>();
+3
View File
@@ -102,6 +102,7 @@
this.itemList.Name = "itemList"; this.itemList.Name = "itemList";
this.itemList.Size = new System.Drawing.Size(255, 134); this.itemList.Size = new System.Drawing.Size(255, 134);
this.itemList.TabIndex = 8; this.itemList.TabIndex = 8;
this.itemList.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.fileList_KeyPress);
// //
// itemButton // itemButton
// //
@@ -161,6 +162,7 @@
this.structureList.Name = "structureList"; this.structureList.Name = "structureList";
this.structureList.Size = new System.Drawing.Size(255, 121); this.structureList.Size = new System.Drawing.Size(255, 121);
this.structureList.TabIndex = 8; this.structureList.TabIndex = 8;
this.structureList.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.fileList_KeyPress);
// //
// structureButton // structureButton
// //
@@ -189,6 +191,7 @@
this.jobList.Name = "jobList"; this.jobList.Name = "jobList";
this.jobList.Size = new System.Drawing.Size(255, 134); this.jobList.Size = new System.Drawing.Size(255, 134);
this.jobList.TabIndex = 11; this.jobList.TabIndex = 11;
this.jobList.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.fileList_KeyPress);
// //
// label4 // label4
// //
+2 -2
View File
@@ -142,7 +142,7 @@ namespace Launcher
OpenFileDialog ofd = new OpenFileDialog(); OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "XML files (*.xml)|*.xml;*.XML"; ofd.Filter = "XML files (*.xml)|*.xml;*.XML";
//ofd.RestoreDirectory? ofd.RestoreDirectory = true;
if (ofd.ShowDialog() == DialogResult.OK) if (ofd.ShowDialog() == DialogResult.OK)
{ {
@@ -253,7 +253,7 @@ namespace Launcher
private void okButton_Click(object sender, EventArgs e) private void okButton_Click(object sender, EventArgs e)
{ {
if (selectedPackage!=null) selectedPackage.Save(LauncherMain.ContentPackageFolder); if (selectedPackage!=null) selectedPackage.Save(ContentPackage.Folder);
this.Close(); this.Close();
} }
Binary file not shown.

After

Width:  |  Height:  |  Size: 231 B

@@ -185,7 +185,7 @@
linkable="true" linkable="true"
price="10"> price="10">
<Sprite texture ="light.png" depth="0.8"/> <Sprite texture ="regex.png" depth="0.8"/>
<RegExFindComponent canbeselected = "true"/> <RegExFindComponent canbeselected = "true"/>
@@ -203,5 +203,30 @@
</ConnectionPanel> </ConnectionPanel>
</Item> </Item>
<Item
name="Wifi Component"
Tags="smallitem"
pickdistance="150"
linkable="true"
price="20">
<Sprite texture ="wifi.png" depth="0.8"/>
<WifiComponent canbeselected = "true"/>
<Body width="16" height="16"/>
<Holdable aimpos="35,-10" handle1="0,0" attachable="true" aimable="true"
slots="Any,RightHand,LeftHand" msg="Detach [Wrench]">
<requireditem name="Wrench" type="Equipped"/>
</Holdable>
<ConnectionPanel canbeselected = "true" msg="Rewire [Screwdriver]">
<requireditem name="Screwdriver,Wire" type="Equipped"/>
<input name="signal_in"/>
<output name="signal_out"/>
</ConnectionPanel>
</Item>
</Items> </Items>
Binary file not shown.

After

Width:  |  Height:  |  Size: 225 B

@@ -34,6 +34,8 @@
<ConnectionPanel canbeselected = "true" msg="Rewire [Screwdriver]"> <ConnectionPanel canbeselected = "true" msg="Rewire [Screwdriver]">
<requireditem name="Screwdriver" type="Equipped"/> <requireditem name="Screwdriver" type="Equipped"/>
<output name="power_out"/> <output name="power_out"/>
<output name="temperature_out"/>
<input name="shutdown"/>
</ConnectionPanel> </ConnectionPanel>
<ItemContainer capacity="5"> <ItemContainer capacity="5">
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8" ?>
<Item
name="Label"
resizehorizontal="true"
resizevertical="true">
<Sprite texture ="blank.png" depth="0.85"/>
<ItemLabel/>
</Item>
+28 -10
View File
@@ -18,12 +18,13 @@ namespace Subsurface
private Vector2 position; private Vector2 position;
private float rotation; private float rotation;
private Vector2 prevPosition;
private float prevZoom;
public float Shake; public float Shake;
private Vector2 shakePosition; private Vector2 shakePosition;
private Vector2 shakeTargetPosition; private Vector2 shakeTargetPosition;
//the area of the world inside the camera view //the area of the world inside the camera view
private Rectangle worldView; private Rectangle worldView;
@@ -130,9 +131,9 @@ namespace Subsurface
private void UpdateTransform() private void UpdateTransform()
{ {
Vector2 interpolatedPosition = position;//Physics.Interpolate(prevPosition,position); Vector2 interpolatedPosition = Physics.Interpolate(prevPosition, position);
float interpolatedZoom = zoom;// Physics.Interpolate(prevZoom, zoom); float interpolatedZoom = Physics.Interpolate(prevZoom, zoom);
worldView.X = (int)(interpolatedPosition.X - worldView.Width / 2.0); worldView.X = (int)(interpolatedPosition.X - worldView.Width / 2.0);
worldView.Y = (int)(interpolatedPosition.Y + worldView.Height / 2.0); worldView.Y = (int)(interpolatedPosition.Y + worldView.Height / 2.0);
@@ -154,13 +155,19 @@ namespace Subsurface
{ {
float moveSpeed = 20.0f/zoom; float moveSpeed = 20.0f/zoom;
prevPosition = position;
prevZoom = zoom;
Vector2 moveCam = Vector2.Zero; Vector2 moveCam = Vector2.Zero;
if (targetPos == Vector2.Zero) if (targetPos == Vector2.Zero)
{ {
if (Keyboard.GetState().IsKeyDown(Keys.A)) moveCam.X -= moveSpeed;
if (Keyboard.GetState().IsKeyDown(Keys.D)) moveCam.X += moveSpeed; if (PlayerInput.KeyDown(Keys.A)) moveCam.X -= moveSpeed;
if (Keyboard.GetState().IsKeyDown(Keys.S)) moveCam.Y -= moveSpeed; if (PlayerInput.KeyDown(Keys.D)) moveCam.X += moveSpeed;
if (Keyboard.GetState().IsKeyDown(Keys.W)) moveCam.Y += moveSpeed; if (PlayerInput.KeyDown(Keys.S)) moveCam.Y -= moveSpeed;
if (PlayerInput.KeyDown(Keys.W)) moveCam.Y += moveSpeed;
moveCam = moveCam * deltaTime * 60.0f;
Zoom = MathHelper.Clamp(Zoom + PlayerInput.ScrollWheelSpeed / 1000.0f, 0.1f, 2.0f); Zoom = MathHelper.Clamp(Zoom + PlayerInput.ScrollWheelSpeed / 1000.0f, 0.1f, 2.0f);
} }
@@ -180,14 +187,25 @@ namespace Subsurface
float newZoom = Math.Min(DefaultZoom - Math.Min(offset.Length() / resolution.Y, 1.0f),1.0f); float newZoom = Math.Min(DefaultZoom - Math.Min(offset.Length() / resolution.Y, 1.0f),1.0f);
Zoom += (newZoom - zoom) / ZoomSmoothness; Zoom += (newZoom - zoom) / ZoomSmoothness;
moveCam = (targetPos + offset - position) / MoveSmoothness; Vector2 diff = (targetPos + offset) - position;
if (diff == Vector2.Zero)
{
moveCam = Vector2.Zero;
}
else
{
float dist = diff == Vector2.Zero ? 0.0f : diff.Length();
moveCam = Vector2.Normalize(diff) * Math.Min(dist, (dist * deltaTime * 60.0f) / MoveSmoothness);
}
} }
shakeTargetPosition = Rand.Vector(Shake); shakeTargetPosition = Rand.Vector(Shake);
shakePosition = Vector2.Lerp(shakePosition, shakeTargetPosition, 0.5f); shakePosition = Vector2.Lerp(shakePosition, shakeTargetPosition, 0.5f);
Shake = MathHelper.Lerp(Shake, 0.0f, 0.03f); Shake = MathHelper.Lerp(Shake, 0.0f, 0.03f);
Translate((moveCam+shakePosition)*deltaTime*60.0f); Translate(moveCam+shakePosition);
} }
public Vector2 Position public Vector2 Position
+4 -4
View File
@@ -36,7 +36,7 @@ namespace Subsurface
private CharacterInventory inventory; private CharacterInventory inventory;
public double LastNetworkUpdate; public float LastNetworkUpdate;
public int LargeUpdateTimer; public int LargeUpdateTimer;
@@ -1037,7 +1037,7 @@ namespace Subsurface
message.Write(secondaryKeyDown.Dequeue); message.Write(secondaryKeyDown.Dequeue);
//} //}
message.Write(NetTime.Now); message.Write((float)NetTime.Now);
// Write byte = move direction // Write byte = move direction
message.WriteRangedSingle(MathHelper.Clamp(AnimController.TargetMovement.X, -10.0f, 10.0f), -10.0f, 10.0f, 8); message.WriteRangedSingle(MathHelper.Clamp(AnimController.TargetMovement.X, -10.0f, 10.0f), -10.0f, 10.0f, 8);
@@ -1132,7 +1132,7 @@ namespace Subsurface
bool actionKeyState = false; bool actionKeyState = false;
bool secondaryKeyState = false; bool secondaryKeyState = false;
double sendingTime = 0.0f; float sendingTime = 0.0f;
Vector2 targetMovement = Vector2.Zero; Vector2 targetMovement = Vector2.Zero;
bool targetDir = false; bool targetDir = false;
Vector2 cursorPos = Vector2.Zero; Vector2 cursorPos = Vector2.Zero;
@@ -1142,7 +1142,7 @@ namespace Subsurface
actionKeyState = message.ReadBoolean(); actionKeyState = message.ReadBoolean();
secondaryKeyState = message.ReadBoolean(); secondaryKeyState = message.ReadBoolean();
sendingTime = message.ReadDouble(); sendingTime = message.ReadFloat();
targetMovement = new Vector2(message.ReadRangedSingle(-10.0f, 10.0f, 8), message.ReadRangedSingle(-10.0f, 10.0f, 8)); targetMovement = new Vector2(message.ReadRangedSingle(-10.0f, 10.0f, 8), message.ReadRangedSingle(-10.0f, 10.0f, 8));
targetMovement.X = MathUtils.Round(targetMovement.X, 0.1f); targetMovement.X = MathUtils.Round(targetMovement.X, 0.1f);
+4
View File
@@ -15,6 +15,9 @@ namespace Subsurface
public class ContentPackage public class ContentPackage
{ {
public static string Folder = "Data/ContentPackages/";
public static List<ContentPackage> list = new List<ContentPackage>(); public static List<ContentPackage> list = new List<ContentPackage>();
@@ -80,6 +83,7 @@ namespace Subsurface
{ {
ContentPackage newPackage = new ContentPackage(); ContentPackage newPackage = new ContentPackage();
newPackage.name = name; newPackage.name = name;
newPackage.Path = Folder + name;
list.Add(newPackage); list.Add(newPackage);
return newPackage; return newPackage;
+2
View File
@@ -136,11 +136,13 @@ namespace Subsurface
public static void ExecuteCommand(string command, Game1 game) public static void ExecuteCommand(string command, Game1 game)
{ {
#if !DEBUG
if (Game1.Client!=null) if (Game1.Client!=null)
{ {
ThrowError("Console commands are disabled in multiplayer mode"); ThrowError("Console commands are disabled in multiplayer mode");
return; return;
} }
#endif
if (command == "") return; if (command == "") return;
string[] commands = command.Split(' '); string[] commands = command.Split(' ');
+9 -1
View File
@@ -301,8 +301,16 @@ namespace Subsurface
spriteBatch.DrawString(Font, spriteBatch.DrawString(Font,
"Physics: " + Game1.World.UpdateTime "Physics: " + Game1.World.UpdateTime
+ " - bodies: " + Game1.World.BodyList.Count + " - bodies: " + Game1.World.BodyList.Count
+ "Camera pos: " + Game1.GameScreen.Cam.Position, + " Camera pos: " + Game1.GameScreen.Cam.Position,
new Vector2(10, 30), Color.White); new Vector2(10, 30), Color.White);
if (Submarine.Loaded!=null)
{
spriteBatch.DrawString(Font,
"Sub pos: " + Submarine.Loaded.Position,
new Vector2(10, 50), Color.White);
}
} }
+6
View File
@@ -15,6 +15,12 @@ namespace Subsurface
//GUIFrame frame; //GUIFrame frame;
public GUIButton[] Buttons; public GUIButton[] Buttons;
public string Text
{
get { return (children[1] as GUITextBlock).Text; }
set { (children[1] as GUITextBlock).Text = value; }
}
public GUIMessageBox(string header, string text) public GUIMessageBox(string header, string text)
: this(header, text, new string[] {"OK"}) : this(header, text, new string[] {"OK"})
{ {
+2 -6
View File
@@ -120,11 +120,7 @@ namespace Subsurface
if (parent != null) if (parent != null)
parent.AddChild(this); parent.AddChild(this);
//if (wrap) this.Wrap = wrap;
//{
this.Wrap = wrap;
// this.text = ToolBox.WrapText(this.text, rect.Width);
//}
SetTextPos(); SetTextPos();
} }
@@ -138,7 +134,7 @@ namespace Subsurface
if (Wrap && rect.Width>0) if (Wrap && rect.Width>0)
{ {
//text = text.Replace("\n"," "); //text = text.Replace("\n"," ");
text = ToolBox.WrapText(text, rect.Width, Font); text = ToolBox.WrapText(text, rect.Width - padding.X - padding.Z, Font);
Vector2 newSize = MeasureText(text); Vector2 newSize = MeasureText(text);
+1
View File
@@ -146,6 +146,7 @@ namespace Subsurface
public void Deselect() public void Deselect()
{ {
Selected = false;
if (keyboardDispatcher.Subscriber == this) keyboardDispatcher.Subscriber = null; if (keyboardDispatcher.Subscriber == this) keyboardDispatcher.Subscriber = null;
} }
+1 -1
View File
@@ -265,7 +265,7 @@ namespace Subsurface
DebugConsole.Update(this, (float)deltaTime); DebugConsole.Update(this, (float)deltaTime);
if ((!DebugConsole.IsOpen && !GUI.PauseMenuOpen) || NetworkMember != null) Screen.Selected.Update(deltaTime); if ((!DebugConsole.IsOpen && !GUI.PauseMenuOpen) || (NetworkMember != null && NetworkMember.GameStarted)) Screen.Selected.Update(deltaTime);
GUI.Update((float)deltaTime); GUI.Update((float)deltaTime);
+1 -1
View File
@@ -132,7 +132,7 @@ namespace Subsurface
if (Game1.Server!=null) if (Game1.Server!=null)
{ {
Game1.Server.EndGame(endMessage); CoroutineManager.StartCoroutine(Game1.Server.EndGame(endMessage));
} }
else if (Game1.Client==null) else if (Game1.Client==null)
@@ -119,7 +119,6 @@ namespace Subsurface.Items.Components
(int)doorSprite.size.X, (int)doorSprite.size.X,
(int)doorSprite.size.Y); (int)doorSprite.size.Y);
body = new PhysicsBody(BodyFactory.CreateRectangle(Game1.World, body = new PhysicsBody(BodyFactory.CreateRectangle(Game1.World,
ConvertUnits.ToSimUnits(Math.Max(doorRect.Width, 1)), ConvertUnits.ToSimUnits(Math.Max(doorRect.Width, 1)),
ConvertUnits.ToSimUnits(Math.Max(doorRect.Height, 1)), ConvertUnits.ToSimUnits(Math.Max(doorRect.Height, 1)),
@@ -101,7 +101,7 @@ namespace Subsurface.Items.Components
Msg = ""; Msg = "";
} }
if (attachedByDefault) Use(1.0f); if (attachedByDefault || Screen.Selected == Game1.EditMapScreen) Use(1.0f);
//holdAngle = ToolBox.GetAttributeFloat(element, "holdangle", 0.0f); //holdAngle = ToolBox.GetAttributeFloat(element, "holdangle", 0.0f);
@@ -0,0 +1,66 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System.Xml.Linq;
namespace Subsurface.Items.Components
{
class ItemLabel : ItemComponent
{
private GUITextBlock textBlock;
[HasDefaultValue("", true), Editable(100)]
public string Text
{
get { return textBlock.Text; }
set
{
if (value == TextBlock.Text || item.Rect.Width < 5) return;
TextBlock.Text = value;
}
}
private Color textColor;
[Editable, HasDefaultValue("0.0,0.0,0.0,1.0", true)]
public string TextColor
{
get { return ToolBox.Vector4ToString(textColor.ToVector4()); }
set
{
textColor = new Color(ToolBox.ParseToVector4(value));
}
}
private GUITextBlock TextBlock
{
get
{
if (textBlock==null)
{
textBlock = new GUITextBlock(new Rectangle(item.Rect.X,-item.Rect.Y,item.Rect.Width, item.Rect.Height), "",
Color.Transparent, Color.Black,
Alignment.TopLeft, Alignment.Center,
null, null, true);
textBlock.Font = GUI.SmallFont;
textBlock.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f);
}
return textBlock;
}
}
public override void Move(Vector2 amount)
{
textBlock.Rect = new Rectangle(item.Rect.X, -item.Rect.Y, item.Rect.Width, item.Rect.Height);
}
public ItemLabel(Item item, XElement element)
: base(item, element)
{
}
public override void Draw(SpriteBatch spriteBatch, bool editing = false)
{
base.Draw(spriteBatch, editing);
textBlock.Draw(spriteBatch);
}
}
}
@@ -140,7 +140,7 @@ namespace Subsurface.Items.Components
float heat = 100 * fissionRate * (AvailableFuel/2000.0f); float heat = 100 * fissionRate * (AvailableFuel/2000.0f);
float heatDissipation = 50 * coolingRate + ExtraCooling; float heatDissipation = 50 * coolingRate + ExtraCooling;
float deltaTemp = (((heat - heatDissipation) * 5) - temperature) / 1000.0f; float deltaTemp = (((heat - heatDissipation) * 5) - temperature) / 10000.0f;
Temperature = temperature + deltaTemp; Temperature = temperature + deltaTemp;
if (temperature > meltDownTemp) if (temperature > meltDownTemp)
@@ -156,7 +156,6 @@ namespace Subsurface.Items.Components
} }
} }
item.Condition -= temperature * deltaTime * 0.00005f; item.Condition -= temperature * deltaTime * 0.00005f;
if (temperature > shutDownTemp) if (temperature > shutDownTemp)
@@ -202,7 +201,6 @@ namespace Subsurface.Items.Components
//fission rate can't be lowered below a certain amount if the core is too hot //fission rate can't be lowered below a certain amount if the core is too hot
FissionRate = Math.Max(fissionRate, heat / 200.0f); FissionRate = Math.Max(fissionRate, heat / 200.0f);
//the power generated by the reactor is equal to the temperature //the power generated by the reactor is equal to the temperature
currPowerConsumption = -temperature*powerPerTemp; currPowerConsumption = -temperature*powerPerTemp;
@@ -216,6 +214,8 @@ namespace Subsurface.Items.Components
ExtraCooling = 0.0f; ExtraCooling = 0.0f;
AvailableFuel = 0.0f; AvailableFuel = 0.0f;
item.SendSignal(((int)temperature).ToString(), "temperature_out");
} }
public override void UpdateBroken(float deltaTime, Camera cam) public override void UpdateBroken(float deltaTime, Camera cam)
@@ -402,6 +402,16 @@ namespace Subsurface.Items.Components
GUI.DrawLine(spriteBatch, prevPoint, lastPoint, Color.White); GUI.DrawLine(spriteBatch, prevPoint, lastPoint, Color.White);
} }
public override void ReceiveSignal(string signal, Connection connection, Item sender, float power)
{
switch (connection.Name)
{
case "shutdown":
shutDownTemp = 0.0f;
break;
}
}
public override void FillNetworkData(NetworkEventType type, NetOutgoingMessage message) public override void FillNetworkData(NetworkEventType type, NetOutgoingMessage message)
{ {
message.Write(autoTemp); message.Write(autoTemp);
@@ -319,15 +319,14 @@ namespace Subsurface.Items.Components
if (index>-1) if (index>-1)
{ {
Wires[index].RemoveConnection(this); Wires[index].RemoveConnection(this);
Wires[index].Item.SetTransform(item.SimPosition, 0.0f); //Wires[index].Item.SetTransform(item.SimPosition, 0.0f);
Wires[index].Item.Drop(); //Wires[index].Item.Drop();
Wires[index].Item.body.Enabled = true; //Wires[index].Item.body.Enabled = true;
Wires[index] = null; Wires[index] = null;
} }
} }
} }
} }
private static void DrawWire(SpriteBatch spriteBatch, Item wireItem, Item item, Vector2 end, Vector2 start, bool mouseIn, bool wireEquipped) private static void DrawWire(SpriteBatch spriteBatch, Item wireItem, Item item, Vector2 end, Vector2 start, bool mouseIn, bool wireEquipped)
@@ -9,6 +9,8 @@ namespace Subsurface.Items.Components
private string expression; private string expression;
private string receivedSignal;
[InGameEditable, HasDefaultValue("1", true)] [InGameEditable, HasDefaultValue("1", true)]
public string Output public string Output
{ {
@@ -26,6 +28,27 @@ namespace Subsurface.Items.Components
public RegExFindComponent(Item item, XElement element) public RegExFindComponent(Item item, XElement element)
: base(item, element) : base(item, element)
{ {
isActive = true;
}
public override void Update(float deltaTime, Camera cam)
{
if (string.IsNullOrWhiteSpace(expression)) return;
bool success = false;
try
{
Regex regex = new Regex(@expression);
Match match = regex.Match(receivedSignal);
success = match.Success;
}
catch
{
item.SendSignal("ERROR", "signal_out");
return;
}
item.SendSignal(success ? output : "0", "signal_out");
} }
public override void ReceiveSignal(string signal, Connection connection, Item sender, float power = 0.0f) public override void ReceiveSignal(string signal, Connection connection, Item sender, float power = 0.0f)
@@ -33,22 +56,7 @@ namespace Subsurface.Items.Components
switch (connection.Name) switch (connection.Name)
{ {
case "signal_in": case "signal_in":
if (string.IsNullOrWhiteSpace(expression)) return; receivedSignal = signal;
bool success = false;
try
{
Regex regex = new Regex(@expression);
Match match = regex.Match(signal);
success = match.Success;
}
catch
{
item.SendSignal("ERROR", "signal_out");
return;
}
item.SendSignal(success ? output : "0", "signal_out");
break; break;
case "set_output": case "set_output":
@@ -0,0 +1,56 @@
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using System.Xml.Linq;
namespace Subsurface.Items.Components
{
class WifiComponent : ItemComponent
{
private static List<WifiComponent> list = new List<WifiComponent>();
private int channel;
[InGameEditable, HasDefaultValue(1, true)]
public int Channel
{
get { return channel; }
set
{
channel = MathHelper.Clamp(value, 0, 100);
}
}
public WifiComponent(Item item, XElement element)
: base (item, element)
{
list.Add(this);
}
public override void ReceiveSignal(string signal, Connection connection, Item sender, float power=0.0f)
{
//prevent an ininite loop of wificomponents sending messages between each other
if (sender.GetComponent<WifiComponent>()!=null) return;
switch (connection.Name)
{
case "signal_in":
foreach (WifiComponent wifiComp in list)
{
if (wifiComp == this || wifiComp.channel != channel) continue;
wifiComp.item.SendSignal(signal, "signal_out");
}
break;
}
}
public override void Remove()
{
base.Remove();
list.Remove(this);
}
}
}
+19 -9
View File
@@ -551,15 +551,19 @@ namespace Subsurface
Color color = (isSelected && editing) ? color = Color.Red : spriteColor; Color color = (isSelected && editing) ? color = Color.Red : spriteColor;
if (isHighlighted) color = Color.Orange; if (isHighlighted) color = Color.Orange;
if (body==null) if (prefab.sprite!=null)
{ {
prefab.sprite.DrawTiled(spriteBatch, new Vector2(rect.X, -rect.Y), new Vector2(rect.Width, rect.Height), color); if (body==null)
} {
else if (body.Enabled) prefab.sprite.DrawTiled(spriteBatch, new Vector2(rect.X, -rect.Y), new Vector2(rect.Width, rect.Height), color);
{ }
body.Draw(spriteBatch, prefab.sprite, color); else if (body.Enabled)
{
body.Draw(spriteBatch, prefab.sprite, color);
}
} }
foreach (ItemComponent component in components) component.Draw(spriteBatch, editing); foreach (ItemComponent component in components) component.Draw(spriteBatch, editing);
if (!editing || (body!=null && !body.Enabled)) if (!editing || (body!=null && !body.Enabled))
@@ -670,7 +674,13 @@ namespace Subsurface
foreach (var objectProperty in editableProperties) foreach (var objectProperty in editableProperties)
{ {
new GUITextBlock(new Rectangle(0, y, 100, 20), objectProperty.Name, Color.Transparent, Color.White, Alignment.Left, null, editingHUD); new GUITextBlock(new Rectangle(0, y, 100, 20), objectProperty.Name, Color.Transparent, Color.White, Alignment.Left, null, editingHUD);
GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, 20), GUI.style, editingHUD);
int height = 20;
var editable = objectProperty.Attributes.OfType<Editable>().FirstOrDefault<Editable>();
if (editable != null) height = (int)(Math.Ceiling(editable.MaxLength / 20.0f) * 20.0f);
GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, height), GUI.style, editingHUD);
if (height>20) propertyBox.Wrap = true;
object value = objectProperty.GetValue(); object value = objectProperty.GetValue();
if (value != null) if (value != null)
@@ -681,7 +691,7 @@ namespace Subsurface
propertyBox.UserData = objectProperty; propertyBox.UserData = objectProperty;
propertyBox.OnEnter = EnterProperty; propertyBox.OnEnter = EnterProperty;
propertyBox.OnTextChanged = PropertyChanged; propertyBox.OnTextChanged = PropertyChanged;
y = y + 30; y = y + height+10;
} }
return editingHUD; return editingHUD;
} }
@@ -939,7 +949,7 @@ namespace Subsurface
object prevValue = objectProperty.GetValue(); object prevValue = objectProperty.GetValue();
textBox.Selected = false; textBox.Deselect();
if (objectProperty.TrySetValue(text)) if (objectProperty.TrySetValue(text))
{ {
+1 -1
View File
@@ -106,7 +106,7 @@ namespace Subsurface
position = placePosition; position = placePosition;
} }
sprite.DrawTiled(spriteBatch, new Vector2(position.X, -position.Y), placeSize, Color.White); if (sprite != null) sprite.DrawTiled(spriteBatch, new Vector2(position.X, -position.Y), placeSize, Color.White);
} }
if (PlayerInput.GetMouseState.RightButton == ButtonState.Pressed) selected = null; if (PlayerInput.GetMouseState.RightButton == ButtonState.Pressed) selected = null;
+5 -5
View File
@@ -50,7 +50,7 @@ namespace Subsurface
private string name; private string name;
private double lastNetworkUpdate; private float lastNetworkUpdate;
//properties ---------------------------------------------------- //properties ----------------------------------------------------
@@ -564,7 +564,7 @@ namespace Subsurface
public override void FillNetworkData(Networking.NetworkEventType type, NetOutgoingMessage message, object data) public override void FillNetworkData(Networking.NetworkEventType type, NetOutgoingMessage message, object data)
{ {
message.Write(NetTime.Now); message.Write((float)NetTime.Now);
message.Write(Position.X); message.Write(Position.X);
message.Write(Position.Y); message.Write(Position.Y);
@@ -575,11 +575,11 @@ namespace Subsurface
public override void ReadNetworkData(Networking.NetworkEventType type, NetIncomingMessage message) public override void ReadNetworkData(Networking.NetworkEventType type, NetIncomingMessage message)
{ {
double sendingTime; float sendingTime;
Vector2 newTargetPosition, newSpeed; Vector2 newTargetPosition, newSpeed;
try try
{ {
sendingTime = message.ReadDouble(); sendingTime = message.ReadFloat();
if (sendingTime <= lastNetworkUpdate) return; if (sendingTime <= lastNetworkUpdate) return;
@@ -595,7 +595,7 @@ namespace Subsurface
return; return;
} }
if (!speed.IsValid() || targetPosition.IsValid()) return; if (!newSpeed.IsValid() || !newTargetPosition.IsValid()) return;
//newTargetPosition = newTargetPosition + newSpeed * (float)(NetTime.Now - sendingTime); //newTargetPosition = newTargetPosition + newSpeed * (float)(NetTime.Now - sendingTime);
+34 -5
View File
@@ -377,7 +377,7 @@ namespace Subsurface.Networking
break; break;
case (byte)PacketTypes.EndGame: case (byte)PacketTypes.EndGame:
string endMessage = inc.ReadString(); string endMessage = inc.ReadString();
EndGame(endMessage); CoroutineManager.StartCoroutine(EndGame(endMessage));
break; break;
case (byte)PacketTypes.PlayerJoined: case (byte)PacketTypes.PlayerJoined:
@@ -429,19 +429,48 @@ namespace Subsurface.Networking
} }
} }
public void EndGame(string endMessage) public IEnumerable<object> EndGame(string endMessage)
{ {
gameStarted = false;
var messageBox = new GUIMessageBox("The round has ended", endMessage);
Character.Controlled = null;
Game1.LightManager.LosEnabled = false;
float endPreviewLength = 10.0f;
DateTime endTime = DateTime.Now + new TimeSpan(0,0,0,0,(int)(1000.0f*endPreviewLength));
float secondsLeft = endPreviewLength;
do
{
secondsLeft = (float)(endTime - DateTime.Now).TotalSeconds;
float camAngle = (float)((DateTime.Now - endTime).TotalSeconds / endPreviewLength) * MathHelper.TwoPi;
Vector2 offset = (new Vector2(
(float)Math.Cos(camAngle) * (Submarine.Borders.Width / 2.0f),
(float)Math.Sin(camAngle) * (Submarine.Borders.Height / 2.0f)));
Game1.GameScreen.Cam.TargetPos = offset * 0.8f;
//Game1.GameScreen.Cam.MoveCamera((float)deltaTime);
messageBox.Text = endMessage + "\nReturning to lobby in " + (int)secondsLeft + " s";
yield return Status.Running;
} while (secondsLeft > 0.0f);
messageBox.Text = endMessage;
Submarine.Unload(); Submarine.Unload();
Game1.NetLobbyScreen.Select(); Game1.NetLobbyScreen.Select();
if (Game1.GameSession!=null) Game1.GameSession.EndShift(""); if (Game1.GameSession!=null) Game1.GameSession.EndShift("");
new GUIMessageBox("The round has ended", endMessage);
myCharacter = null; myCharacter = null;
gameStarted = false; yield return Status.Success;
} }
public override void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch) public override void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch)
+25 -9
View File
@@ -149,13 +149,7 @@ namespace Subsurface.Networking
yield return Status.Running; yield return Status.Running;
} }
yield return Status.Success; yield return Status.Success;
} }
private void MasterServerCallBack(IRestResponse response) private void MasterServerCallBack(IRestResponse response)
@@ -617,9 +611,10 @@ namespace Subsurface.Networking
return true; return true;
} }
public void EndGame(string endMessage) public IEnumerable<object> EndGame(string endMessage)
{ {
gameStarted = false;
if (connectedClients.Count > 0) if (connectedClients.Count > 0)
{ {
@@ -639,13 +634,34 @@ namespace Subsurface.Networking
} }
} }
Submarine.Unload(); float endPreviewLength = 10.0f;
gameStarted = false; DateTime endTime = DateTime.Now + new TimeSpan(0, 0, 0, 0, (int)(1000.0f * endPreviewLength));
float secondsLeft = endPreviewLength;
do
{
secondsLeft = (float)(endTime - DateTime.Now).TotalSeconds;
float camAngle = (float)((DateTime.Now - endTime).TotalSeconds / endPreviewLength) * MathHelper.TwoPi;
Vector2 offset = (new Vector2(
(float)Math.Cos(camAngle) * (Submarine.Borders.Width / 2.0f),
(float)Math.Sin(camAngle) * (Submarine.Borders.Height / 2.0f)));
Game1.GameScreen.Cam.TargetPos = offset * 0.8f;
//Game1.GameScreen.Cam.MoveCamera((float)deltaTime);
yield return Status.Running;
} while (secondsLeft > 0.0f);
Submarine.Unload();
Game1.NetLobbyScreen.Select(); Game1.NetLobbyScreen.Select();
DebugConsole.ThrowError(endMessage); DebugConsole.ThrowError(endMessage);
yield return Status.Success;
} }
private void DisconnectClient(NetConnection senderConnection) private void DisconnectClient(NetConnection senderConnection)
@@ -64,6 +64,11 @@ namespace Subsurface.Networking
} }
} }
public bool GameStarted
{
get { return gameStarted; }
}
public GUIFrame InGameHUD public GUIFrame InGameHUD
{ {
get { return inGameHUD; } get { return inGameHUD; }
+124 -124
View File
@@ -3,156 +3,156 @@ using Microsoft.Xna.Framework.Input;
namespace Subsurface namespace Subsurface
{ {
class Key class Key
{ {
private bool state, stateQueue; private bool state, stateQueue;
private bool canBeHeld; private bool canBeHeld;
public Key(bool canBeHeld) public Key(bool canBeHeld)
{ {
this.canBeHeld = canBeHeld; this.canBeHeld = canBeHeld;
} }
public bool State public bool State
{ {
get get
{ {
return state; return state;
} }
set set
{ {
//if (value == false) return; //if (value == false) return;
state = value; state = value;
//if (value) stateQueue = value; //if (value) stateQueue = value;
} }
} }
public void SetState(bool value) public void SetState(bool value)
{ {
state = value; state = value;
if (value) stateQueue = value; if (value) stateQueue = value;
} }
public bool Dequeue public bool Dequeue
{ {
get get
{ {
bool value = stateQueue; bool value = stateQueue;
stateQueue = false; stateQueue = false;
return value; return value;
} }
//set //set
//{ //{
// stateQueue = value; // stateQueue = value;
//} //}
} }
public void Reset() public void Reset()
{ {
if (!canBeHeld) state = false; if (!canBeHeld) state = false;
//stateQueue = false; //stateQueue = false;
} }
} }
static class PlayerInput static class PlayerInput
{ {
static MouseState mouseState, oldMouseState; static MouseState mouseState, oldMouseState;
static KeyboardState keyboardState, oldKeyboardState; static KeyboardState keyboardState, oldKeyboardState;
static double timeSinceClick; static double timeSinceClick;
const double doubleClickDelay = 0.4; const double doubleClickDelay = 0.4;
static bool doubleClicked; static bool doubleClicked;
public static Keys selectKey = Keys.E; public static Keys selectKey = Keys.E;
public static Vector2 MousePosition public static Vector2 MousePosition
{ {
get { return new Vector2(mouseState.Y, mouseState.X); } get { return new Vector2(mouseState.X, mouseState.Y); }
} }
public static MouseState GetMouseState public static MouseState GetMouseState
{ {
get { return mouseState; } get { return mouseState; }
} }
public static MouseState GetOldMouseState public static MouseState GetOldMouseState
{ {
get { return oldMouseState; } get { return oldMouseState; }
} }
public static Vector2 MouseSpeed public static Vector2 MouseSpeed
{ {
get get
{ {
return MousePosition - new Vector2(oldMouseState.X, oldMouseState.Y); return MousePosition - new Vector2(oldMouseState.X, oldMouseState.Y);
} }
} }
public static KeyboardState GetKeyboardState public static KeyboardState GetKeyboardState
{ {
get { return keyboardState; } get { return keyboardState; }
} }
public static KeyboardState GetOldKeyboardState public static KeyboardState GetOldKeyboardState
{ {
get { return oldKeyboardState; } get { return oldKeyboardState; }
} }
public static int ScrollWheelSpeed public static int ScrollWheelSpeed
{ {
get { return mouseState.ScrollWheelValue - oldMouseState.ScrollWheelValue; } get { return mouseState.ScrollWheelValue - oldMouseState.ScrollWheelValue; }
} }
public static bool LeftButtonDown() public static bool LeftButtonDown()
{ {
return mouseState.LeftButton == ButtonState.Pressed; return mouseState.LeftButton == ButtonState.Pressed;
} }
public static bool LeftButtonClicked() public static bool LeftButtonClicked()
{ {
return (oldMouseState.LeftButton == ButtonState.Pressed return (oldMouseState.LeftButton == ButtonState.Pressed
&& mouseState.LeftButton == ButtonState.Released); && mouseState.LeftButton == ButtonState.Released);
} }
public static bool RightButtonClicked() public static bool RightButtonClicked()
{ {
return (oldMouseState.RightButton == ButtonState.Pressed return (oldMouseState.RightButton == ButtonState.Pressed
&& mouseState.RightButton == ButtonState.Released); && mouseState.RightButton == ButtonState.Released);
} }
public static bool DoubleClicked() public static bool DoubleClicked()
{ {
return doubleClicked; return doubleClicked;
} }
public static bool KeyHit(Keys button) public static bool KeyHit(Keys button)
{ {
return (oldKeyboardState.IsKeyDown(button) && keyboardState.IsKeyUp(button)); return (oldKeyboardState.IsKeyDown(button) && keyboardState.IsKeyUp(button));
} }
public static bool KeyDown(Keys button) public static bool KeyDown(Keys button)
{ {
return (keyboardState.IsKeyDown(button)); return (keyboardState.IsKeyDown(button));
} }
public static void Update(double deltaTime) public static void Update(double deltaTime)
{ {
timeSinceClick += deltaTime; timeSinceClick += deltaTime;
oldMouseState = mouseState; oldMouseState = mouseState;
mouseState = Mouse.GetState(); mouseState = Mouse.GetState();
oldKeyboardState = keyboardState; oldKeyboardState = keyboardState;
keyboardState = Keyboard.GetState(); keyboardState = Keyboard.GetState();
doubleClicked = false; doubleClicked = false;
if (LeftButtonClicked()) if (LeftButtonClicked())
{ {
if (timeSinceClick < doubleClickDelay) doubleClicked = true; if (timeSinceClick < doubleClickDelay) doubleClicked = true;
timeSinceClick = 0.0; timeSinceClick = 0.0;
} }
} }
} }
} }
+6
View File
@@ -11,6 +11,12 @@ namespace Subsurface
[AttributeUsage(AttributeTargets.Property)] [AttributeUsage(AttributeTargets.Property)]
public class Editable : System.Attribute public class Editable : System.Attribute
{ {
public int MaxLength;
public Editable(int maxLength = 20)
{
MaxLength = maxLength;
}
} }
[AttributeUsage(AttributeTargets.Property)] [AttributeUsage(AttributeTargets.Property)]
+1 -1
View File
@@ -176,7 +176,7 @@ namespace Subsurface
// CreateDummyCharacter(); // CreateDummyCharacter();
//} //}
cam.MoveCamera((float)deltaTime); if (GUIComponent.MouseOn==null) cam.MoveCamera((float)deltaTime);
cam.Zoom = MathHelper.Clamp(cam.Zoom + PlayerInput.ScrollWheelSpeed/1000.0f,0.1f, 2.0f); cam.Zoom = MathHelper.Clamp(cam.Zoom + PlayerInput.ScrollWheelSpeed/1000.0f,0.1f, 2.0f);
if (characterMode) if (characterMode)
+2 -1
View File
@@ -75,11 +75,12 @@ namespace Subsurface
StatusEffect.UpdateAll((float)deltaTime); StatusEffect.UpdateAll((float)deltaTime);
cam.MoveCamera((float)deltaTime);
Physics.accumulator = Math.Min(Physics.accumulator, Physics.step * 4); Physics.accumulator = Math.Min(Physics.accumulator, Physics.step * 4);
while (Physics.accumulator >= Physics.step) while (Physics.accumulator >= Physics.step)
{ {
cam.MoveCamera((float)Physics.step);
foreach (PhysicsBody pb in PhysicsBody.list) foreach (PhysicsBody pb in PhysicsBody.list)
{ {
pb.SetPrevTransform(pb.Position, pb.Rotation); pb.SetPrevTransform(pb.Position, pb.Rotation);
+2 -4
View File
@@ -29,16 +29,14 @@ namespace Subsurface
public static bool IsValid(float value) public static bool IsValid(float value)
{ {
return (!float.IsInfinity(value) && !float.IsInfinity(value)); return (!float.IsInfinity(value) && !float.IsNaN(value));
} }
public static bool IsValid(Vector2 vector) public static bool IsValid(Vector2 vector)
{ {
return (!float.IsInfinity(vector.X) && !float.IsInfinity(vector.Y) && !float.IsNaN(vector.X) && !float.IsNaN(vector.Y)); return (IsValid(vector.X) && IsValid(vector.Y));
} }
public static float CurveAngle(float from, float to, float step) public static float CurveAngle(float from, float to, float step)
{ {
+2 -2
View File
@@ -36,9 +36,9 @@ namespace Subsurface
{ {
font = contentManager.Load<SpriteFont>(file); font = contentManager.Load<SpriteFont>(file);
} }
catch catch (Exception e)
{ {
DebugConsole.ThrowError("Loading font ''"+file+"'' failed"); DebugConsole.ThrowError("Loading font ''"+file+"'' failed", e);
} }
return font; return font;
+26 -3
View File
@@ -6336,9 +6336,6 @@
</timestamps> </timestamps>
<violations /> <violations />
</sourcecode> </sourcecode>
<project key="2115933639">
<configuration>DEBUG;TRACE;WINDOWS</configuration>
</project>
<sourcecode name="GameMode.cs" parser="StyleCop.CSharp.CsParser"> <sourcecode name="GameMode.cs" parser="StyleCop.CSharp.CsParser">
<timestamps> <timestamps>
<styleCop>2014.04.01 10:18:24.000</styleCop> <styleCop>2014.04.01 10:18:24.000</styleCop>
@@ -6464,4 +6461,30 @@
</timestamps> </timestamps>
<violations /> <violations />
</sourcecode> </sourcecode>
<project key="2115933639">
<configuration>DEBUG;TRACE;WINDOWS</configuration>
</project>
<sourcecode name="ItemLabel.cs" parser="StyleCop.CSharp.CsParser">
<timestamps>
<styleCop>2014.04.01 10:18:24.000</styleCop>
<settingsFile>2015.07.02 21:22:42.115</settingsFile>
<sourceFile>2015.08.21 17:49:13.627</sourceFile>
<parser>2014.04.01 10:18:24.000</parser>
<StyleCop.CSharp.DocumentationRules>2014.04.01 10:18:24.000</StyleCop.CSharp.DocumentationRules>
<StyleCop.CSharp.DocumentationRules.FilesHashCode>-1945363787</StyleCop.CSharp.DocumentationRules.FilesHashCode>
<StyleCop.CSharp.LayoutRules>2014.04.01 10:18:24.000</StyleCop.CSharp.LayoutRules>
<StyleCop.CSharp.LayoutRules.FilesHashCode>0</StyleCop.CSharp.LayoutRules.FilesHashCode>
<StyleCop.CSharp.MaintainabilityRules>2014.04.01 10:18:24.000</StyleCop.CSharp.MaintainabilityRules>
<StyleCop.CSharp.MaintainabilityRules.FilesHashCode>0</StyleCop.CSharp.MaintainabilityRules.FilesHashCode>
<StyleCop.CSharp.NamingRules>2014.04.01 10:18:24.000</StyleCop.CSharp.NamingRules>
<StyleCop.CSharp.NamingRules.FilesHashCode>0</StyleCop.CSharp.NamingRules.FilesHashCode>
<StyleCop.CSharp.OrderingRules>2014.04.01 10:18:24.000</StyleCop.CSharp.OrderingRules>
<StyleCop.CSharp.OrderingRules.FilesHashCode>0</StyleCop.CSharp.OrderingRules.FilesHashCode>
<StyleCop.CSharp.ReadabilityRules>2014.04.01 10:18:24.000</StyleCop.CSharp.ReadabilityRules>
<StyleCop.CSharp.ReadabilityRules.FilesHashCode>0</StyleCop.CSharp.ReadabilityRules.FilesHashCode>
<StyleCop.CSharp.SpacingRules>2014.04.01 10:18:24.000</StyleCop.CSharp.SpacingRules>
<StyleCop.CSharp.SpacingRules.FilesHashCode>0</StyleCop.CSharp.SpacingRules.FilesHashCode>
</timestamps>
<violations />
</sourcecode>
</stylecopresultscache> </stylecopresultscache>
+15 -1
View File
@@ -76,7 +76,9 @@
<Compile Include="Source\GUI\GUIMessage.cs" /> <Compile Include="Source\GUI\GUIMessage.cs" />
<Compile Include="Source\GUI\TitleScreen.cs" /> <Compile Include="Source\GUI\TitleScreen.cs" />
<Compile Include="Source\Items\Components\Label.cs" /> <Compile Include="Source\Items\Components\Label.cs" />
<Compile Include="Source\Items\Components\Signal\WifiComponent.cs" />
<Compile Include="Source\Items\Components\Signal\SignalCheckComponent.cs" /> <Compile Include="Source\Items\Components\Signal\SignalCheckComponent.cs" />
<Compile Include="Source\Items\Components\ItemLabel.cs" />
<Compile Include="Source\Items\FixRequirement.cs" /> <Compile Include="Source\Items\FixRequirement.cs" />
<Compile Include="Source\Map\Lights\Light.cs" /> <Compile Include="Source\Map\Lights\Light.cs" />
<Compile Include="Source\Map\LocationType.cs" /> <Compile Include="Source\Map\LocationType.cs" />
@@ -301,6 +303,9 @@
<Content Include="Content\Items\Artifacts\artifacts.xml"> <Content Include="Content\Items\Artifacts\artifacts.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Items\blank.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Content\Items\Clothes\captainLegs.png"> <Content Include="Content\Items\Clothes\captainLegs.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
@@ -310,6 +315,12 @@
<Content Include="Content\Items\Electricity\lamp.png"> <Content Include="Content\Items\Electricity\lamp.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Items\Electricity\wifi.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Content\Items\Electricity\regex.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Content\Items\Electricity\lights.xml"> <Content Include="Content\Items\Electricity\lights.xml">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
@@ -320,6 +331,9 @@
<Content Include="Content\Items\Electricity\monitors.xml"> <Content Include="Content\Items\Electricity\monitors.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Items\itemlabel.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Content\Items\Medical\medical.xml"> <Content Include="Content\Items\Medical\medical.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<SubType>Designer</SubType> <SubType>Designer</SubType>
@@ -557,7 +571,7 @@
<Content Include="Content\Items\Electricity\junctionbox.png"> <Content Include="Content\Items\Electricity\junctionbox.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Items\Ladder\item.xml"> <Content Include="Content\Items\Ladder\ladder.xml">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Content\Items\Ladder\ladder.png"> <Content Include="Content\Items\Ladder\ladder.png">
Binary file not shown.