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>
+30 -12
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);
} }
@@ -179,15 +186,26 @@ 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)
@@ -155,8 +155,7 @@ namespace Subsurface.Items.Components
powerUpTask = new PropertyTask(item, IsRunning, 50.0f, "Power up the reactor"); powerUpTask = new PropertyTask(item, IsRunning, 50.0f, "Power up the reactor");
} }
} }
item.Condition -= temperature * deltaTime * 0.00005f; item.Condition -= temperature * deltaTime * 0.00005f;
if (temperature > shutDownTemp) if (temperature > shutDownTemp)
@@ -201,8 +200,7 @@ 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,14 +319,13 @@ 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;
} }
} }
} }
} }
@@ -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);
}
}
}
+20 -10
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;
} }
@@ -938,8 +948,8 @@ namespace Subsurface
if (objectProperty == null) return false; if (objectProperty == null) return false;
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
} }
} }
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);
yield return Status.Running;
} while (secondsLeft > 0.0f);
Submarine.Unload(); Submarine.Unload();
gameStarted = false;
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; }
+126 -126
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);
+1 -1
View File
@@ -5,7 +5,7 @@ namespace Subsurface
class Screen class Screen
{ {
private static Screen selected; private static Screen selected;
public static Screen Selected public static Screen Selected
{ {
get { return selected; } get { return selected; }
+3 -5
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.