Commits

Anonymous committed d1903aa

minor changes

Comments (0)

Files changed (17)

Examples/App.config

+<?xml version="1.0"?>
+<configuration>
+  <startup>
+
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
+  </startup>
+</configuration>

Examples/Program.cs

+using System;
+using System.IO;
+using SharpHammer;
+
+namespace UnitTest
+{
+	class Program
+	{
+
+		private static void Main(string[] args)
+		{
+			Core.Init();
+			Log.ConsoleOutput = true;
+			Log.SetFileOutput("log.txt");
+			Config cfg;
+			try {
+				cfg = Config.FromFile("setting.json");
+			} catch {
+				cfg = Config.Default;
+			}
+			Engine eng = new Engine("Hello World!", cfg);
+			eng.OnUpdate += eng_OnUpdate;
+
+			Scene scn = new Scene("test");
+			eng.ActiveScene = scn;
+			Camera cam = new Camera(new Vec4(0f, 1f, -5f, 1f), new Vec4(0f, 1f, 1f, 1f));
+			
+			eng.ActiveCamera = cam;
+
+			eng.Run();
+
+			eng.Dispose();
+			cfg.Dispose();
+			Core.Release();
+		}
+	
+		static void eng_OnUpdate()
+		{
+			
+		}
+
+	}
+}

Examples/Properties/AssemblyInfo.cs

+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("UnitTest")]
+[assembly: AssemblyDescription("UnitTest For SharpHammer Wrapper")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("UnitTest")]
+[assembly: AssemblyCopyright("Copyright © Mohamad Amin Valinejad 2013")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0baea5c4-b80d-41ff-a9b9-df8c31b5936a")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{6DFF9C77-51F5-4D11-A044-CEED07BDD345}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTest", "UnitTest\UnitTest.csproj", "{936F2A1E-54B3-45F2-8627-9447543049D2}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Examples", "UnitTest\Examples.csproj", "{936F2A1E-54B3-45F2-8627-9447543049D2}"
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DarkMotion", "DarkMotion\DarkMotion.csproj", "{5480F275-D449-4DBA-9246-1A77F4875E23}"
 	ProjectSection(ProjectDependencies) = postProject

SharpHammer/Camera.cs

 	{
 		internal cam _cam;
 
-		private Camera()
-		{ }
-
-		public static Camera Create()
+		public Camera()
+			: this(Vec4.Zero, Vec4.UnitZ)
 		{
-			return Create(Vec4.Zero, Vec4.UnitZ);
 		}
 
-		public static Camera Create(Vec4 pos, Vec4 target)
+		public Camera(Vec4 pos, Vec4 target)
 		{
-			Camera cam = new Camera();
-			NativeCalls.cam_init(ref cam._cam, ref pos, ref target, 0.1f, 1000f, (float)Math.PI * .3f);
-			return cam;
+			NativeCalls.cam_init(ref _cam, ref pos, ref target, 0.1f, 1000f, (float)Math.PI * .3f);
 		}
 
 	}

SharpHammer/DisposableBase.cs

 
 		~DisposableBase()
 		{
-			//if (GetLogger() != null)
-			//	GetLogger().Warning("Dispose was not called explicitly on object of type : " + GetType().Name);
 			Dispose(false);
 		}
 

SharpHammer/NativeCalls.cs

 		[DllImport(_engineDll, CallingConvention = CallingConvention.Cdecl)]
 		public static extern int app_resize_window(IntPtr name, UInt32 width, UInt32 height);
 
+		[DllImport(_engineDll, CallingConvention = CallingConvention.Cdecl)]
+		public static extern UInt32 app_get_wndwidth();
+
+		[DllImport(_engineDll, CallingConvention = CallingConvention.Cdecl)]
+		public static extern UInt32 app_get_wndheight();
+
 		#endregion
 
 		#region eng

SharpHammer/RenderForm.Designer.cs

-namespace SharpHammer
-{
-	partial class RenderForm
-	{
-		/// <summary>
-		/// Required designer variable.
-		/// </summary>
-		private System.ComponentModel.IContainer components = null;
-
-		/// <summary>
-		/// Clean up any resources being used.
-		/// </summary>
-		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-		protected override void Dispose(bool disposing)
-		{
-			if (disposing && (components != null)) {
-				components.Dispose();
-			}
-			base.Dispose(disposing);
-		}
-
-		#region Windows Form Designer generated code
-
-		/// <summary>
-		/// Required method for Designer support - do not modify
-		/// the contents of this method with the code editor.
-		/// </summary>
-		private void InitializeComponent()
-		{
-			this.SuspendLayout();
-			// 
-			// RenderForm
-			// 
-			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
-			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-			this.ClientSize = new System.Drawing.Size(442, 342);
-			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
-			this.MaximizeBox = false;
-			this.MinimizeBox = false;
-			this.Name = "RenderForm";
-			this.Text = "RenderForm";
-			this.ResumeLayout(false);
-
-		}
-
-		#endregion
-	}
-}

SharpHammer/RenderForm.cs

-using System;
-using System.Runtime.InteropServices;
-using System.Drawing;
-using System.Windows.Forms;
-
-namespace SharpHammer
-{
-	internal partial class RenderForm : Form
-	{
-		public Action MainLoop = null;
-
-		public RenderForm()
-		{
-			InitializeComponent();
-
-			Application.Idle += Application_Idle;
-		}
-
-		void Application_Idle(object sender, EventArgs e)
-		{
-			while (AppStillIdle) {
-				if (MainLoop != null)
-					MainLoop();
-			}
-		}
-
-		protected override void OnPaint(PaintEventArgs e)
-		{ }
-
-		protected override void OnPaintBackground(PaintEventArgs e)
-		{ }
-
-		static bool AppStillIdle
-		{
-			get
-			{
-				Message msg;
-				return !PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
-			}
-		}
-
-		[System.Security.SuppressUnmanagedCodeSecurity]
-		[DllImport("user32.dll", CharSet = CharSet.Auto)]
-		[return: MarshalAs(UnmanagedType.Bool)]
-		private static extern bool PeekMessage(out Message msg, IntPtr hWnd,
-			uint messageFilterMin, uint messageFilterMax, uint flags);
-	}
-
-	[StructLayout(LayoutKind.Sequential)]
-	struct Message
-	{
-		public IntPtr hWnd;
-		public uint msg;
-		public IntPtr wParam;
-		public IntPtr lParam;
-		public uint time;
-		public Point p;
-	}
-}

SharpHammer/RenderForm.resx

-<?xml version="1.0" encoding="utf-8"?>
-<root>
-  <!-- 
-    Microsoft ResX Schema 
-    
-    Version 2.0
-    
-    The primary goals of this format is to allow a simple XML format 
-    that is mostly human readable. The generation and parsing of the 
-    various data types are done through the TypeConverter classes 
-    associated with the data types.
-    
-    Example:
-    
-    ... ado.net/XML headers & schema ...
-    <resheader name="resmimetype">text/microsoft-resx</resheader>
-    <resheader name="version">2.0</resheader>
-    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
-    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
-    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
-    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
-    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
-        <value>[base64 mime encoded serialized .NET Framework object]</value>
-    </data>
-    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
-        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
-        <comment>This is a comment</comment>
-    </data>
-                
-    There are any number of "resheader" rows that contain simple 
-    name/value pairs.
-    
-    Each data row contains a name, and value. The row also contains a 
-    type or mimetype. Type corresponds to a .NET class that support 
-    text/value conversion through the TypeConverter architecture. 
-    Classes that don't support this are serialized and stored with the 
-    mimetype set.
-    
-    The mimetype is used for serialized objects, and tells the 
-    ResXResourceReader how to depersist the object. This is currently not 
-    extensible. For a given mimetype the value must be set accordingly:
-    
-    Note - application/x-microsoft.net.object.binary.base64 is the format 
-    that the ResXResourceWriter will generate, however the reader can 
-    read any of the formats listed below.
-    
-    mimetype: application/x-microsoft.net.object.binary.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
-            : and then encoded with base64 encoding.
-    
-    mimetype: application/x-microsoft.net.object.soap.base64
-    value   : The object must be serialized with 
-            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
-            : and then encoded with base64 encoding.
-
-    mimetype: application/x-microsoft.net.object.bytearray.base64
-    value   : The object must be serialized into a byte array 
-            : using a System.ComponentModel.TypeConverter
-            : and then encoded with base64 encoding.
-    -->
-  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
-    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
-    <xsd:element name="root" msdata:IsDataSet="true">
-      <xsd:complexType>
-        <xsd:choice maxOccurs="unbounded">
-          <xsd:element name="metadata">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" />
-              </xsd:sequence>
-              <xsd:attribute name="name" use="required" type="xsd:string" />
-              <xsd:attribute name="type" type="xsd:string" />
-              <xsd:attribute name="mimetype" type="xsd:string" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="assembly">
-            <xsd:complexType>
-              <xsd:attribute name="alias" type="xsd:string" />
-              <xsd:attribute name="name" type="xsd:string" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="data">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
-              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
-              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
-              <xsd:attribute ref="xml:space" />
-            </xsd:complexType>
-          </xsd:element>
-          <xsd:element name="resheader">
-            <xsd:complexType>
-              <xsd:sequence>
-                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
-              </xsd:sequence>
-              <xsd:attribute name="name" type="xsd:string" use="required" />
-            </xsd:complexType>
-          </xsd:element>
-        </xsd:choice>
-      </xsd:complexType>
-    </xsd:element>
-  </xsd:schema>
-  <resheader name="resmimetype">
-    <value>text/microsoft-resx</value>
-  </resheader>
-  <resheader name="version">
-    <value>2.0</value>
-  </resheader>
-  <resheader name="reader">
-    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-  <resheader name="writer">
-    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
-  </resheader>
-</root>

SharpHammer/Scene.cs

 		string _name;
 		internal UInt32 _sceneID;
 
-		private Scene()
-		{ }
-
-		public static Scene Create(string name)
+		public Scene(string name)
 		{
-			Scene scn = new Scene();
-			scn._name = name;
-			scn._sceneID = NativeCalls.scn_create_scene(name);
-			return scn;
+			_name = name;
+			_sceneID = NativeCalls.scn_create_scene(name);
 		}
 
 		protected override void OnDisposeUnmanaged()

SharpHammer/SharpHammer.csproj

     <Compile Include="Matrix3.cs" />
     <Compile Include="NativeCalls.cs" />
     <Compile Include="Engine.cs" />
-    <Compile Include="RenderForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="RenderForm.Designer.cs">
-      <DependentUpon>RenderForm.cs</DependentUpon>
-    </Compile>
     <Compile Include="Scene.cs" />
     <Compile Include="sh_wrap.cs" />
     <Compile Include="DisposableBase.cs" />
   <ItemGroup>
     <None Include="App.config" />
   </ItemGroup>
-  <ItemGroup>
-    <EmbeddedResource Include="RenderForm.resx">
-      <DependentUpon>RenderForm.cs</DependentUpon>
-    </EmbeddedResource>
-  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <PropertyGroup>
     <PreBuildEvent>

SharpHammer/engine.cs

 using System;
 using System.IO;
+using System.Diagnostics;
+using System.Windows.Forms;
+using System.Runtime.InteropServices;
 
 namespace SharpHammer
 {
 		Camera _activeCamera = null;
 		RenderForm _frm = null;
 		bool _pause = false;
-		bool _init = false;
+		Stopwatch _sw = new Stopwatch();
 
-		private Engine()
-		{ }
+		public event UpdateHandler OnUpdate;
+		public event ActivateHandler OnActivate;
+		public event ResizeHandler OnResize;
 
-		public static Engine Create(string title, Config cfg)
+		public Engine(string title, Config cfg)
+			: this(title, cfg, IntPtr.Zero)
 		{
-			return Create(title, cfg, IntPtr.Zero);
+
 		}
 
-		public static Engine Create(string title, Config cfg, IntPtr hwnd)
+		public Engine(string title, Config cfg, IntPtr hwnd)
 		{
-			Engine eng = new Engine();
-			int r ;
+			int r;
 			if (hwnd == IntPtr.Zero) {
-				eng._frm = new RenderForm();
-				hwnd = eng._frm.Handle;
+				_frm = new RenderForm();
+				hwnd = _frm.Handle;
 			}
 			r = NativeCalls.app_init(title, cfg._params, hwnd);
-			
+
 			if (NativeCalls.IS_FAIL(r))
 				throw new Exception("Failed to initialize app.");
 			r = NativeCalls.eng_init(cfg._params);
 			if (NativeCalls.IS_FAIL(r))
 				throw new Exception("Failed to initialize engine.");
 
-			int w ,h;
-			unsafe
-			{
-				w = (int)(((UInt32*)(((byte*)cfg._params) + 36))[0]);
-				h = (int)(((UInt32*)(((byte*)cfg._params) + 40))[0]);
+			if (_frm != null) {
+				_frm.Text = title;
+				int w = (int)NativeCalls.app_get_wndwidth();
+				int h = (int)NativeCalls.app_get_wndheight();
+				_frm.ClientSize = new System.Drawing.Size(w, h);
 			}
-
-			var frm = eng._frm;
-			if (frm != null)
-			{
-				frm.Text = title;
-				frm.ClientSize = new System.Drawing.Size(w, h);
-			}
-			return eng;
 		}
 
 		public void Run()
 		{
 			if (_frm != null) {
 				NativeCalls.gfx_set_gridcallback();
-				_frm.MainLoop = update;
-				_init = true;
+				_frm.MainLoop = onUpdate;
+				_frm.Resize = onResize;
 				System.Windows.Forms.Application.Run(_frm);
 			}
 		}
 
-		void _frm_Resize(object sender, EventArgs e)
+		public void SetViewSize(int w, int h)
 		{
-			if (!_init)
-				return;
-			UInt32 w = (UInt32)_frm.ClientSize.Width;
-			UInt32 h = (UInt32)_frm.ClientSize.Height;
 			NativeCalls.cam_set_viewsize(ref ActiveCamera._cam, (float)w, (float)h);
-			NativeCalls.app_resize_window(IntPtr.Zero, w, h);
+			NativeCalls.app_resize_window(IntPtr.Zero, (UInt32)w, (UInt32)h);
 		}
 
-		void update()
+		void onUpdate()
+		{			
+			_sw.Stop();
+			//_sw.
+			_sw.Start();
+			NativeCalls.input_update();
+			if (OnUpdate != null)
+				OnUpdate();
+			NativeCalls.eng_update();
+		}
+
+		void onResize()
 		{
-			NativeCalls.input_update();
-			NativeCalls.eng_update();
+			SetViewSize(_frm.ClientSize.Width, _frm.ClientSize.Height);
 		}
 
 		protected override void OnDisposeManaged()
 		{
-			_activeScene.Dispose();
+			if (_frm != null) {
+				_frm.Close();
+				_frm.Dispose();
+			}
+			if (_activeScene != null)
+				_activeScene.Dispose();
 		}
 
 		protected override void OnDisposeUnmanaged()
 		}
 		#endregion
 
-		#region Delegates
-		public delegate void UpdateHandler();
-		public delegate void ResizeHandler(int width, int height);
-		public delegate void ActivateHandler(bool active);
+		#region RenderForm
+		private class RenderForm : Form
+		{
+			public Action MainLoop = null;
+			public Action Resize = null;
+
+			public RenderForm()
+			{
+				this.SuspendLayout();
+				this.ClientSize = new System.Drawing.Size(400, 300);
+				this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+				this.MaximizeBox = false;
+				this.MinimizeBox = false;
+				this.Name = "RenderForm";
+				this.Text = "RenderForm";
+				this.ResumeLayout(false);
+
+				Application.Idle += Application_Idle;
+			}
+
+			void Application_Idle(object sender, EventArgs e)
+			{
+				while (AppStillIdle) {
+					if (MainLoop != null)
+						MainLoop();
+				}
+			}
+
+			protected override void OnResize(EventArgs e)
+			{ 
+				if (Resize != null)
+					Resize(); 
+			}
+
+			protected override void OnPaint(PaintEventArgs e)
+			{ }
+
+			protected override void OnPaintBackground(PaintEventArgs e)
+			{ }
+
+			static bool AppStillIdle
+			{
+				get
+				{
+					Message msg;
+					return !PeekMessage(out msg, IntPtr.Zero, 0, 0, 0);
+				}
+			}
+
+			[System.Security.SuppressUnmanagedCodeSecurity]
+			[DllImport("user32.dll", CharSet = CharSet.Auto)]
+			[return: MarshalAs(UnmanagedType.Bool)]
+			private static extern bool PeekMessage(out Message msg, IntPtr hWnd,
+				uint messageFilterMin, uint messageFilterMax, uint flags);
+
+			[StructLayout(LayoutKind.Sequential)]
+			struct Message
+			{
+				public IntPtr hWnd;
+				public uint msg;
+				public IntPtr wParam;
+				public IntPtr lParam;
+				public uint time;
+				public System.Drawing.Point p;
+			}
+		}
 		#endregion
+
 	}
+
+	#region Delegates
+	public delegate void UpdateHandler();
+	public delegate void ResizeHandler(int width, int height);
+	public delegate void ActivateHandler(bool active);
+	#endregion
 }

UnitTest/App.config

-<?xml version="1.0"?>
-<configuration>
-  <startup>
-
-    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
-  </startup>
-</configuration>

UnitTest/Program.cs

-using System;
-using System.IO;
-using SharpHammer;
-
-namespace UnitTest
-{
-	class Program
-	{
-
-		private static void Main(string[] args)
-		{
-			Core.Init();
-			Log.ConsoleOutput = true;
-			Log.SetFileOutput("log.txt");
-			Config cfg;
-			try {
-				cfg = Config.FromFile("setting.json");
-			} catch {
-				cfg = Config.Default;
-			}
-			Engine eng = Engine.Create("Hello World!", cfg);
-
-			Scene scn = Scene.Create("test");
-			eng.ActiveScene = scn;
-			Camera cam = Camera.Create(new Vec4(0f, 1f, -5f, 1f), new Vec4(0f, 1f, 1f, 1f));
-			eng.ActiveCamera = cam;
-
-			eng.Run();
-
-			eng.Dispose();
-			cfg.Dispose();
-			Core.Release();
-		}
-
-	}
-}

UnitTest/Properties/AssemblyInfo.cs

-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("UnitTest")]
-[assembly: AssemblyDescription("UnitTest For SharpHammer Wrapper")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("UnitTest")]
-[assembly: AssemblyCopyright("Copyright © Mohamad Amin Valinejad 2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components.  If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("0baea5c4-b80d-41ff-a9b9-df8c31b5936a")]
-
-// Version information for an assembly consists of the following four values:
-//
-//      Major Version
-//      Minor Version
-//      Build Number
-//      Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]

UnitTest/UnitTest.csproj

-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
-  <PropertyGroup>
-    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
-    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{936F2A1E-54B3-45F2-8627-9447543049D2}</ProjectGuid>
-    <OutputType>Exe</OutputType>
-    <AppDesignerFolder>Properties</AppDesignerFolder>
-    <RootNamespace>UnitTest</RootNamespace>
-    <AssemblyName>UnitTest</AssemblyName>
-    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
-    <FileAlignment>512</FileAlignment>
-    <TargetFrameworkProfile>
-    </TargetFrameworkProfile>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugSymbols>true</DebugSymbols>
-    <DebugType>full</DebugType>
-    <Optimize>false</Optimize>
-    <OutputPath>..\bin\UnitTest\Debug\</OutputPath>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <UseVSHostingProcess>true</UseVSHostingProcess>
-    <Prefer32Bit>false</Prefer32Bit>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
-    <PlatformTarget>AnyCPU</PlatformTarget>
-    <DebugType>pdbonly</DebugType>
-    <Optimize>true</Optimize>
-    <OutputPath>..\bin\UnitTest\Release\</OutputPath>
-    <DefineConstants>TRACE</DefineConstants>
-    <ErrorReport>prompt</ErrorReport>
-    <WarningLevel>4</WarningLevel>
-    <Prefer32Bit>false</Prefer32Bit>
-    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
-    <PlatformTarget>x86</PlatformTarget>
-    <OutputPath>..\bin\UnitTest\Debug\</OutputPath>
-    <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
-    <DefineConstants>DEBUG;TRACE</DefineConstants>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
-    <PlatformTarget>x86</PlatformTarget>
-    <OutputPath>..\bin\UnitTest\Release\</OutputPath>
-    <Optimize>true</Optimize>
-    <DefineConstants>TRACE</DefineConstants>
-  </PropertyGroup>
-  <ItemGroup>
-    <Reference Include="System" />
-    <Reference Include="System.Xml" />
-  </ItemGroup>
-  <ItemGroup>
-    <Compile Include="Program.cs" />
-    <Compile Include="Properties\AssemblyInfo.cs" />
-  </ItemGroup>
-  <ItemGroup>
-    <None Include="App.config" />
-  </ItemGroup>
-  <ItemGroup>
-    <ProjectReference Include="..\SharpHammer\SharpHammer.csproj">
-      <Project>{42ae9267-6a8a-49ac-8efe-a9da2bff6546}</Project>
-      <Name>SharpHammer</Name>
-    </ProjectReference>
-  </ItemGroup>
-  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
-  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
-       Other similar extension points exist, see Microsoft.Common.targets.
-  <Target Name="BeforeBuild">
-  </Target>
-  <Target Name="AfterBuild">
-  </Target>
-  -->
-</Project>