From b3569db9504f8b05947cbc71fde6d012ec95f730 Mon Sep 17 00:00:00 2001 From: Lucas Scharenbroich Date: Fri, 25 Nov 2016 00:05:29 -0600 Subject: [PATCH] Added initial set of generic AI search files --- .gitattributes | 63 +++++ .gitignore | 275 ++++++++++++++++++++++ README.md | 19 ++ SpriteCompiler.sln | 22 ++ SpriteCompiler/AI/AStarComparer.cs | 21 ++ SpriteCompiler/AI/AStarSearch.cs | 17 ++ SpriteCompiler/AI/AbstractAISearch.cs | 79 +++++++ SpriteCompiler/AI/AbstractSearchNode.cs | 47 ++++ SpriteCompiler/AI/BestFirstSearch.cs | 35 +++ SpriteCompiler/AI/HeuristicSearchNode.cs | 16 ++ SpriteCompiler/AI/INodeExpander.cs | 19 ++ SpriteCompiler/AI/IPathCost.cs | 9 + SpriteCompiler/AI/IQueue.cs | 12 + SpriteCompiler/AI/ISearch.cs | 24 ++ SpriteCompiler/AI/ISearchNode.cs | 21 ++ SpriteCompiler/AI/ISearchProblem.cs | 14 ++ SpriteCompiler/App.config | 6 + SpriteCompiler/Program.cs | 9 + SpriteCompiler/Properties/AssemblyInfo.cs | 36 +++ SpriteCompiler/SpriteCompiler.csproj | 78 ++++++ SpriteCompiler/packages.config | 4 + 21 files changed, 826 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 README.md create mode 100644 SpriteCompiler.sln create mode 100644 SpriteCompiler/AI/AStarComparer.cs create mode 100644 SpriteCompiler/AI/AStarSearch.cs create mode 100644 SpriteCompiler/AI/AbstractAISearch.cs create mode 100644 SpriteCompiler/AI/AbstractSearchNode.cs create mode 100644 SpriteCompiler/AI/BestFirstSearch.cs create mode 100644 SpriteCompiler/AI/HeuristicSearchNode.cs create mode 100644 SpriteCompiler/AI/INodeExpander.cs create mode 100644 SpriteCompiler/AI/IPathCost.cs create mode 100644 SpriteCompiler/AI/IQueue.cs create mode 100644 SpriteCompiler/AI/ISearch.cs create mode 100644 SpriteCompiler/AI/ISearchNode.cs create mode 100644 SpriteCompiler/AI/ISearchProblem.cs create mode 100644 SpriteCompiler/App.config create mode 100644 SpriteCompiler/Program.cs create mode 100644 SpriteCompiler/Properties/AssemblyInfo.cs create mode 100644 SpriteCompiler/SpriteCompiler.csproj create mode 100644 SpriteCompiler/packages.config diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..45f512c --- /dev/null +++ b/.gitignore @@ -0,0 +1,275 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates +*.vcxproj.filters + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..bf1b294 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +## Synopsis + +A sprite compiler that targets 16-bit 65816 assembly code on the Apple IIgs computer. The sprite compiler uses informed search techniques to generate optimal code for whole-sprite rendering. + +## Code Example + +## Motivation + +## Installation + +## API Reference + +## Tests + +## Contributors + +## License + +MIT License \ No newline at end of file diff --git a/SpriteCompiler.sln b/SpriteCompiler.sln new file mode 100644 index 0000000..639647d --- /dev/null +++ b/SpriteCompiler.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpriteCompiler", "SpriteCompiler/SpriteCompiler.csproj", "{56F54CA9-17C1-45C6-915B-6FABF4DAE5D0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {56F54CA9-17C1-45C6-915B-6FABF4DAE5D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {56F54CA9-17C1-45C6-915B-6FABF4DAE5D0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {56F54CA9-17C1-45C6-915B-6FABF4DAE5D0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {56F54CA9-17C1-45C6-915B-6FABF4DAE5D0}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SpriteCompiler/AI/AStarComparer.cs b/SpriteCompiler/AI/AStarComparer.cs new file mode 100644 index 0000000..e59e109 --- /dev/null +++ b/SpriteCompiler/AI/AStarComparer.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SpriteCompiler.AI +{ + public class AStarComparator : IComparer + where T : HeuristicSearchNode + where C : IPathCost + { + public int Compare(T x, T y) + { + var cost1 = x.Heuristic.Add(x.PathCost); + var cost2 = y.Heuristic.Add(y.PathCost); + + return cost1.CompareTo(cost2); + } + } +} diff --git a/SpriteCompiler/AI/AStarSearch.cs b/SpriteCompiler/AI/AStarSearch.cs new file mode 100644 index 0000000..981bf4e --- /dev/null +++ b/SpriteCompiler/AI/AStarSearch.cs @@ -0,0 +1,17 @@ +namespace SpriteCompiler.AI +{ + public class AStarSearch : BestFirstSearch + where T : HeuristicSearchNode + where C : IPathCost + { + public AStarSearch(AbstractAISearch search) + : base(search, new AStarComparator()) + { + } + + public AStarSearch(AbstractAISearch search, IQueue fringe) + : base(search, fringe) + { + } + } +} diff --git a/SpriteCompiler/AI/AbstractAISearch.cs b/SpriteCompiler/AI/AbstractAISearch.cs new file mode 100644 index 0000000..e6e8534 --- /dev/null +++ b/SpriteCompiler/AI/AbstractAISearch.cs @@ -0,0 +1,79 @@ +namespace SpriteCompiler.AI +{ + using System; + using System.Collections.Generic; + using System.Linq; + + public abstract class AbstractAISearch + where T : ISearchNode + where C : IComparable + { + // Conceptually the expander is responsible for two things: + // + // 1. Creating a node's successors via the Successor Function + // and wrapping them in SearchNodes (computing path costs + // and heuristics, as well). + // + // 2. Creating a search node from a state. This lets us + // decouple the search algorithm from the state expansion + + private INodeExpander expander; + + public AbstractAISearch(INodeExpander expander) + { + this.expander = expander; + } + + public INodeExpander Expander { get { return expander; } } + + public IEnumerable Solution(T node) + { + var sequence = new List(); + + while (node != null) + { + sequence.Add(node); + node = node.Parent; + } + + sequence.Reverse(); + + return sequence; + } + + public IEnumerable ExtendSearch(ISearchProblem problem, IQueue fringe) + { + while (!fringe.Empty) + { + var node = fringe.Remove(); + + if (problem.IsGoal(node.State)) + { + return Solution(node); + } + + AddNodes(fringe, node, problem); + } + + return Enumerable.Empty(); + } + + public IEnumerable Expand(ISearchProblem problem, T node) + { + return expander.Expand(problem, node); + } + + public bool IsFailure(IEnumerable solution) + { + return !solution.Any(); + } + + public IEnumerable Search(ISearchProblem problem, IQueue fringe, S initialState) + { + fringe.Enqueue(expander.CreateNode(default(T), initialState)); + return ExtendSearch(problem, fringe); + } + + protected abstract void AddNodes(IQueue fringe, T node, ISearchProblem problem); + } +} diff --git a/SpriteCompiler/AI/AbstractSearchNode.cs b/SpriteCompiler/AI/AbstractSearchNode.cs new file mode 100644 index 0000000..dcce7a6 --- /dev/null +++ b/SpriteCompiler/AI/AbstractSearchNode.cs @@ -0,0 +1,47 @@ +namespace SpriteCompiler.AI +{ + using System; + using System.Collections.Generic; + + public abstract class AbstractSearchNode : ISearchNode + where T : ISearchNode + where C : IPathCost + { + protected readonly S state; + protected readonly T parent; + protected A action = default(A); + + protected C pathCost = default(C); + protected C stepCost = default(C); + protected readonly int depth; + + public AbstractSearchNode(T node, S state) + { + this.state = state; + this.parent = node; + this.depth = HasParent ? parent.Depth + 1 : 0; + } + + private bool HasParent { get { return !EqualityComparer.Default.Equals(parent, default(T)); } } + + public A Action { get { return action; } set { action = value; } } + public T Parent { get { return parent; } } + public C PathCost { get { return pathCost; } } + public int Depth { get { return depth; } } + public S State { get { return state; } } + + public C StepCost + { + get + { + return stepCost; + } + + set + { + stepCost = value; + pathCost = HasParent ? parent.PathCost.Add(value) : value; + } + } + } +} diff --git a/SpriteCompiler/AI/BestFirstSearch.cs b/SpriteCompiler/AI/BestFirstSearch.cs new file mode 100644 index 0000000..a647340 --- /dev/null +++ b/SpriteCompiler/AI/BestFirstSearch.cs @@ -0,0 +1,35 @@ +namespace SpriteCompiler.AI +{ + using System.Collections.Generic; + + public class BestFirstSearch : ISearch + where T : ISearchNode + where C : IPathCost + { + protected readonly AbstractAISearch search; + protected readonly IQueue fringe; + + public BestFirstSearch(AbstractAISearch search, IQueue fringe) + { + this.search = search; + this.fringe = fringe; + } + + public BestFirstSearch(AbstractAISearch search, IComparer comparator) + { + this.search = search; + // this.fringe = new PriorityQueue(INITIAL_CAPACITY, comparator); + } + + public IEnumerable Search(ISearchProblem problem, S initialState) + { + fringe.Clear(); + return search.Search(problem, fringe, initialState); + } + + public IEnumerable ExtendSearch(ISearchProblem problem) + { + return search.ExtendSearch(problem, fringe); + } + } +} diff --git a/SpriteCompiler/AI/HeuristicSearchNode.cs b/SpriteCompiler/AI/HeuristicSearchNode.cs new file mode 100644 index 0000000..5f8a0aa --- /dev/null +++ b/SpriteCompiler/AI/HeuristicSearchNode.cs @@ -0,0 +1,16 @@ +namespace SpriteCompiler.AI +{ + using System; + + public class HeuristicSearchNode : AbstractSearchNode, ISearchNode + where T : HeuristicSearchNode + where C : IPathCost + { + public HeuristicSearchNode(T node, S state) + : base(node, state) + { + } + + public C Heuristic { get; set; } + } +} diff --git a/SpriteCompiler/AI/INodeExpander.cs b/SpriteCompiler/AI/INodeExpander.cs new file mode 100644 index 0000000..6415d62 --- /dev/null +++ b/SpriteCompiler/AI/INodeExpander.cs @@ -0,0 +1,19 @@ +namespace SpriteCompiler.AI +{ + using System; + using System.Collections.Generic; + + /// + /// The NodeExpander class encapsulates a strategy of how the expand one state + /// into its successor states.In the simplest case, a node's state is expanded + /// using a problem-specific sucessor function, new search nodes are created and + /// the list is returned. + /// + public interface INodeExpander + where T : ISearchNode + where C : IComparable + { + IEnumerable Expand(ISearchProblem problem, T node); + T CreateNode(T parent, S state); + } +} diff --git a/SpriteCompiler/AI/IPathCost.cs b/SpriteCompiler/AI/IPathCost.cs new file mode 100644 index 0000000..cbfb127 --- /dev/null +++ b/SpriteCompiler/AI/IPathCost.cs @@ -0,0 +1,9 @@ +namespace SpriteCompiler.AI +{ + using System; + + public interface IPathCost : IComparable + { + C Add(C value); + } +} diff --git a/SpriteCompiler/AI/IQueue.cs b/SpriteCompiler/AI/IQueue.cs new file mode 100644 index 0000000..1f1d4fd --- /dev/null +++ b/SpriteCompiler/AI/IQueue.cs @@ -0,0 +1,12 @@ +namespace SpriteCompiler.AI +{ + using System; + + public interface IQueue + { + void Clear(); + bool Empty { get; } + T Remove(); + void Enqueue(T item); + } +} diff --git a/SpriteCompiler/AI/ISearch.cs b/SpriteCompiler/AI/ISearch.cs new file mode 100644 index 0000000..6d58ed0 --- /dev/null +++ b/SpriteCompiler/AI/ISearch.cs @@ -0,0 +1,24 @@ +namespace SpriteCompiler.AI +{ + using System.Collections.Generic; + + public interface ISearch + where T : ISearchNode + where C : IPathCost + { + /// Perform a new search on the specified search problem using the given + /// initial state as a starting point. The method will return an empty + /// list on failure. + IEnumerable Search(ISearchProblem problem, S initialState); + + /** + * Continues to run a search after a solution is found. This can + * be useful for enumerating over all the solutions to a search problem. + * + * @param problem + * @return Sequence of search nodes desribing a solution + */ + IEnumerable ExtendSearch(ISearchProblem problem); + + } +} diff --git a/SpriteCompiler/AI/ISearchNode.cs b/SpriteCompiler/AI/ISearchNode.cs new file mode 100644 index 0000000..e0b18e4 --- /dev/null +++ b/SpriteCompiler/AI/ISearchNode.cs @@ -0,0 +1,21 @@ +namespace SpriteCompiler.AI +{ + using System; + + /// + /// + /// + /// Action on a node + /// State of the search + /// Type of the parent + /// Cost type + public interface ISearchNode where C : IComparable + { + A Action { get; set; } + C StepCost { get; set; } + C PathCost { get; } + int Depth { get; } + S State { get; } + T Parent { get; } + } +} diff --git a/SpriteCompiler/AI/ISearchProblem.cs b/SpriteCompiler/AI/ISearchProblem.cs new file mode 100644 index 0000000..fef1cf3 --- /dev/null +++ b/SpriteCompiler/AI/ISearchProblem.cs @@ -0,0 +1,14 @@ +namespace SpriteCompiler.AI +{ + using System; + using System.Collections.Generic; + + public interface ISearchProblem + where C : IComparable + { + IDictionary Successors(S state); + bool IsGoal(S state); + C StepCost(S fromState, A action, S toState); + C Heuristic(S state); + } +} diff --git a/SpriteCompiler/App.config b/SpriteCompiler/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/SpriteCompiler/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/SpriteCompiler/Program.cs b/SpriteCompiler/Program.cs new file mode 100644 index 0000000..4b46979 --- /dev/null +++ b/SpriteCompiler/Program.cs @@ -0,0 +1,9 @@ +namespace SpriteCompiler +{ + public class Program + { + static void Main(string[] args) + { + } + } +} diff --git a/SpriteCompiler/Properties/AssemblyInfo.cs b/SpriteCompiler/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..0ec6e42 --- /dev/null +++ b/SpriteCompiler/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +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("SpriteCompiler")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SpriteCompiler")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[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("56f54ca9-17c1-45c6-915b-6fabf4dae5d0")] + +// 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")] diff --git a/SpriteCompiler/SpriteCompiler.csproj b/SpriteCompiler/SpriteCompiler.csproj new file mode 100644 index 0000000..b36e83d --- /dev/null +++ b/SpriteCompiler/SpriteCompiler.csproj @@ -0,0 +1,78 @@ + + + + + Debug + AnyCPU + {56F54CA9-17C1-45C6-915B-6FABF4DAE5D0} + Exe + Properties + SpriteCompiler + SpriteCompiler + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\OptimizedPriorityQueue.4.0.0\lib\net45\Priority Queue.dll + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SpriteCompiler/packages.config b/SpriteCompiler/packages.config new file mode 100644 index 0000000..2fddea5 --- /dev/null +++ b/SpriteCompiler/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file