diff --git a/CityGame.sln b/CityGame.sln index 5109268..5f86bc4 100644 --- a/CityGame.sln +++ b/CityGame.sln @@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.3.32929.385 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CityGame", "CityGame\CityGame.csproj", "{5D76B596-FC17-4F47-B5C6-D811DE04F806}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CityGame", "CityGame\CityGame.csproj", "{5D76B596-FC17-4F47-B5C6-D811DE04F806}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WPFGame", "..\WPFGame\WPFGame\WPFGame.csproj", "{4F2DC7EE-24BA-4383-9AB6-EBA46EB191DF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,6 +17,10 @@ Global {5D76B596-FC17-4F47-B5C6-D811DE04F806}.Debug|Any CPU.Build.0 = Debug|Any CPU {5D76B596-FC17-4F47-B5C6-D811DE04F806}.Release|Any CPU.ActiveCfg = Release|Any CPU {5D76B596-FC17-4F47-B5C6-D811DE04F806}.Release|Any CPU.Build.0 = Release|Any CPU + {4F2DC7EE-24BA-4383-9AB6-EBA46EB191DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F2DC7EE-24BA-4383-9AB6-EBA46EB191DF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F2DC7EE-24BA-4383-9AB6-EBA46EB191DF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F2DC7EE-24BA-4383-9AB6-EBA46EB191DF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/CityGame/App.xaml.cs b/CityGame/App.xaml.cs index f5fe8e0..5f28270 100644 --- a/CityGame/App.xaml.cs +++ b/CityGame/App.xaml.cs @@ -1,17 +1 @@ -using System; -using System.Collections.Generic; -using System.Configuration; -using System.Data; -using System.Linq; -using System.Threading.Tasks; -using System.Windows; - -namespace CityGame -{ - /// - /// Interaction logic for App.xaml - /// - public partial class App : Application - { - } -} + \ No newline at end of file diff --git a/CityGame/AssemblyInfo.cs b/CityGame/AssemblyInfo.cs index 8b5504e..e69de29 100644 --- a/CityGame/AssemblyInfo.cs +++ b/CityGame/AssemblyInfo.cs @@ -1,10 +0,0 @@ -using System.Windows; - -[assembly: ThemeInfo( - ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located - //(used if a resource is not found in the page, - // or application resource dictionaries) - ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located - //(used if a resource is not found in the page, - // app, or any theme specific resource dictionaries) -)] diff --git a/CityGame/Car.cs b/CityGame/Car.cs index 4a13f93..5fd9838 100644 --- a/CityGame/Car.cs +++ b/CityGame/Car.cs @@ -1,7 +1,8 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Linq; -using System.Numerics; using System.Windows; +using WPFGame; namespace CityGame { @@ -25,7 +26,7 @@ namespace CityGame Y = (float)value.Y * MainWindow.TileSize; } } - public float Speed { get; set; } = 256; + public float Speed { get; set; } = 128; public override OCanvas Render() { return new SourcedImage("Car.png"); @@ -40,7 +41,7 @@ namespace CityGame { if (Target is not null) { - if(Object is not null) Object.ToolTip = Target.ToString(); + //if(Object is not null) Object.ToolTip = Target.ToString(); if (Path is null) { Path = MainWindow.pathfinder.FindPath(Point.Convert(), ((Point)Target).Convert()).Select(x => x.Convert()).ToArray(); diff --git a/CityGame/CityGame.csproj b/CityGame/CityGame.csproj index d48a3b7..dd3bdf2 100644 --- a/CityGame/CityGame.csproj +++ b/CityGame/CityGame.csproj @@ -4,13 +4,9 @@ WinExe net6.0-windows enable - true + False - - - - @@ -19,7 +15,7 @@ - + @@ -39,82 +35,100 @@ - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest - Always + PreserveNewest diff --git a/CityGame/CustomShader.cs b/CityGame/CustomShader.cs index 451c60b..dc7ac84 100644 --- a/CityGame/CustomShader.cs +++ b/CityGame/CustomShader.cs @@ -1,9 +1,6 @@ using System; using System.IO; -using System.Windows; -using System.Windows.Media; -using System.Windows.Media.Effects; - +/* namespace CityGame { public class CustomShader : ShaderEffect @@ -32,4 +29,4 @@ namespace CityGame ShaderEffect.RegisterPixelShaderSamplerProperty("Input", typeof(CustomShader), 0); } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/CityGame/Entity.cs b/CityGame/Entity.cs index cb9f616..1631935 100644 --- a/CityGame/Entity.cs +++ b/CityGame/Entity.cs @@ -1,13 +1,40 @@ namespace CityGame { - public abstract class Entity + public abstract class Entity : ISelectable { public float X { get; set; } public float Y { get; set; } public float Rotation { get; set; } public long Time { get; set; } public OCanvas Object { get; set; } + + public OCanvas GetImage() + { + return Object; + } + public abstract OCanvas Render(); + + public bool RunAction(ISelectable target) + { + if(this is Helicopter heli) + { + heli.Target = target; + return true; + } + return false; + } + public abstract void Tick(long deltaTime); + + int ISelectable.X() + { + return (int)X; + } + + int ISelectable.Y() + { + return (int)Y; + } } } \ No newline at end of file diff --git a/CityGame/Extensions.cs b/CityGame/Extensions.cs index abb201b..0bcf6a5 100644 --- a/CityGame/Extensions.cs +++ b/CityGame/Extensions.cs @@ -1,4 +1,5 @@ -using System; +using Microsoft.Xna.Framework; +using System; using System.Windows; namespace CityGame diff --git a/CityGame/Helicopter.cs b/CityGame/Helicopter.cs new file mode 100644 index 0000000..7d1da92 --- /dev/null +++ b/CityGame/Helicopter.cs @@ -0,0 +1,69 @@ +using System; +using System.Numerics; +using WPFGame; + +namespace CityGame +{ + public class Helicopter : Entity + { + public float Speed { get; set; } = 256; + public bool Landed = false; + Image Heli1; + Image Heli2; + Image Blades1; + Image Blades2; + int RotorState = 0; + public ISelectable Target; + bool Move; + public override OCanvas Render() + { + OCanvas canvas = new OCanvas(); + Heli1 = new SourcedImage("Helicopter.png"); + Heli2 = new SourcedImage("HelicopterFlight.png"); + Blades1 = new SourcedImage("HelicopterBlades.png"); + Blades2 = new SourcedImage("HelicopterBlades2.png"); + + Heli1.Visible = false; + Blades2.Visible = false; + + canvas.Children.Add(Heli1); + canvas.Children.Add(Heli2); + canvas.Children.Add(Blades1); + canvas.Children.Add(Blades2); + + return canvas; + } + + public override void Tick(long deltaTime) + { + if (Heli1 is null) return; + long ms = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + if (ms / 250 % 2 == 0) + { + Blades1.Visible = false; + Blades2.Visible = true; + } else + { + Blades1.Visible = true; + Blades2.Visible = false; + } + if (Target is not null) + { + IntPoint nextTarget = new IntPoint(Target.X(), Target.Y()); + Vector2 travel = new Vector2((float)nextTarget.X - X, (float)nextTarget.Y - Y); + if (travel.Length() < MainWindow.TileSize * 1) Move = false; + if (travel.Length() > MainWindow.TileSize * 3) Move = true; + Vector2 direction = Vector2.Normalize(travel); + float degrees = (float)(Math.Atan2(direction.Y, direction.X) * (180 / Math.PI)) + 90; + Rotation = degrees; + float Speedmulti = 1; + if (travel.Length() < MainWindow.TileSize * 3) Speedmulti = (travel.Length() - MainWindow.TileSize) / (MainWindow.TileSize * 2); + var possibleDistance = Speed * Speedmulti * deltaTime / 1000; + var finalDistance = Math.Min(possibleDistance, travel.Length()); + Vector2 travelFinal = direction * finalDistance; + X += travelFinal.X; + Y += travelFinal.Y; + } + } + } +} \ No newline at end of file diff --git a/CityGame/ISelectable.cs b/CityGame/ISelectable.cs new file mode 100644 index 0000000..36299f3 --- /dev/null +++ b/CityGame/ISelectable.cs @@ -0,0 +1,10 @@ +namespace CityGame +{ + public interface ISelectable + { + public OCanvas GetImage(); + public bool RunAction(ISelectable target); + public int X(); + public int Y(); + } +} \ No newline at end of file diff --git a/CityGame/MainWindow.xaml.cs b/CityGame/MainWindow.xaml.cs index 0f9eb49..bf913aa 100644 --- a/CityGame/MainWindow.xaml.cs +++ b/CityGame/MainWindow.xaml.cs @@ -1,32 +1,58 @@ using AStar; using AStar.Options; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; using SimplexNoise; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; -using System.Net.WebSockets; -using System.Reflection.Metadata; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Data; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Navigation; -using System.Windows.Shapes; -using System.Windows.Threading; +using WPFGame; namespace CityGame { + + public class Program { public static void Main() { new MainWindow(); } } /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { + public ISelectable GetSelectableFromClick(MouseState click) + { + Point point = new Point(click.X, click.Y); + point.X -= (int)Canvas.GetLeft(CameraCanvas); + point.Y -= (int)Canvas.GetTop(CameraCanvas); + point.X = (int)(point.X / CameraCanvas.ScaleX); + point.Y = (int)(point.Y / CameraCanvas.ScaleY); + + foreach (Entity entity in Entities) + { + double diff = new Vector2((int)entity.X + TileSize / 2 - point.X, (int)entity.Y + TileSize / 2 - point.Y).Length(); + if (diff < TileSize / 2) return entity; + } + int x = point.X / TileSize; + int y = point.Y / TileSize; + if (x < 0 || y < 0) return null; + if (x > Grid.GetLength(0) - 1 || y > Grid.GetLength(1) - 1) return null; + + return Grid[x, y]; + } + public static Entity GetEntityFromImage(Image image) + { + foreach (Entity entity in Entities) + { + if (entity.Object == image.Parent) return entity; + } + return null; + } + public static Tile? GetTileFromImage(Image image) + { + double x = Canvas.GetLeft(image.Parent) / TileSize; + double y = Canvas.GetTop(image.Parent) / TileSize; + if (x % 1 != 0 || y % 1 != 0) return null; + return Grid[(int)x, (int)y]; + } public static Random random; public static bool MouseIsDown = false; public static Point MousePos = new Point(0, 0); @@ -36,6 +62,15 @@ namespace CityGame public static List npcWalkable = new List(); public static List Entities { get; set; } = new List(); public const int TileSize = 64; + public static Tile[,] Grid; + public static ISelectable Selected; + public static OCanvas[,] ImageGrid; + + Canvas MainCanvas = new OCanvas(); + Canvas BGCanvas = new OCanvas(); + Canvas GameCanvas = new OCanvas(); + Canvas CameraCanvas = new OCanvas(); + Canvas UICanvas = new OCanvas(); public MainWindow() { #region | Texture Conversions | @@ -63,11 +98,7 @@ namespace CityGame ImageConverter.ChangeColor("Error", "ErrorRed", new Dictionary { { "#000000", "#ff0000" } }); #endregion - InitializeComponent(); - - #region | Map Generation | - #region | Map Generation Constants | - int seed = 3; + int seed = 8; Noise.Seed = seed; @@ -93,12 +124,10 @@ namespace CityGame int minBlockHeight = 3; int minBlockWidth = 3; - int NPCCount = 1; + int NPCCount = (int)Math.Ceiling(mapHeight * mapWidth / 100f); random = new Random(seed); - #endregion - #region | Map Initialization | Tile[,] InitialGrid = new Tile[mapWidth, mapHeight]; @@ -179,9 +208,6 @@ namespace CityGame IntermediateGrid[x * 2 + 1, y * 2].Y = y * 2; } } - #endregion - - #region | Roads and Bridges | Dictionary decidedBridges = new Dictionary(); pathfindingGrid = new short[doubleWidth, doubleHeight]; pathfindingGridDesperate = new short[doubleWidth, doubleHeight]; @@ -214,10 +240,6 @@ namespace CityGame } } - #endregion - - #region | Pathfinding | - int mainRoadCount = random.Next(1, 5); for (int m = 0; m < mainRoadCount; m++) { @@ -228,20 +250,20 @@ namespace CityGame if (variant == 0) { int x = 0; - int y = random.Next(0, doubleHeight); + int y = random.Next(0 + 2, doubleHeight - 2); startPoint = new IntPoint(x, y); endPoint = new IntPoint(doubleWidth, y); step = new IntPoint(1, 0); } else { - int x = random.Next(0, doubleWidth); + int x = random.Next(0 + 2, doubleWidth - 2); int y = 0; startPoint = new IntPoint(x, y); endPoint = new IntPoint(x, doubleHeight); step = new IntPoint(0, 1); } - while(startPoint != endPoint) + while (startPoint != endPoint) { int x = (int)startPoint.X; int y = (int)startPoint.Y; @@ -280,7 +302,7 @@ namespace CityGame #endregion - Tile[,] Grid = IntermediateGrid; + Grid = IntermediateGrid; //for(int y = 0; y < mapHeight; y++) //{ // for(int x = 0; x < mapWidth; x++) @@ -292,33 +314,18 @@ namespace CityGame mapHeight *= 2; mapWidth *= 2; - #endregion - - Show(); - - #region | Rendering | - - Canvas MainCanvas = new OCanvas(); - Canvas BGCanvas = new OCanvas(); - Canvas GameCanvas = new OCanvas(); - Canvas CameraCanvas = new OCanvas(); - Canvas UICanvas = new OCanvas(); + ImageGrid = new OCanvas[doubleWidth, doubleHeight]; Canvas.SetLeft(CameraCanvas, 0); Canvas.SetTop(CameraCanvas, 0); - RenderOptions.SetEdgeMode(GameCanvas, EdgeMode.Aliased); - MainCanvas.Children.Add(CameraCanvas); MainCanvas.Children.Add(UICanvas); CameraCanvas.Children.Add(BGCanvas); CameraCanvas.Children.Add(GameCanvas); - MainCanvas.HorizontalAlignment = HorizontalAlignment.Left; - MainCanvas.VerticalAlignment = VerticalAlignment.Top; - - Content = MainCanvas; + ContentCanvas = MainCanvas; int tileSize = TileSize; for (int x = 0; x < mapWidth; x++) @@ -327,95 +334,24 @@ namespace CityGame { Canvas image = Renderer.Render(Grid[x, y].Type, x, y, Grid); - image.Height = tileSize; - image.Width = tileSize; - - RenderOptions.SetBitmapScalingMode(image, BitmapScalingMode.NearestNeighbor); - Canvas.SetLeft(image, x * tileSize); Canvas.SetTop(image, y * tileSize); + ImageGrid[x, y] = (OCanvas)image; + //image.Opacity = pathfindingGrid[y, x]; GameCanvas.Children.Add(image); } } - #endregion - - #region | Controls | - - MainCanvas.MouseDown += (a, b) => MouseIsDown = true; - MainCanvas.MouseUp += (a, b) => MouseIsDown = false; - MainCanvas.MouseMove += (a, b) => + foreach (Image image in SourcedImage.GetObjectsBySourceFile("Helipad.png")) { - if (MouseIsDown) - { - var newpos = PointToScreen(Mouse.GetPosition(this)); - var diff = newpos - MousePos; - Canvas.SetLeft(CameraCanvas, Canvas.GetLeft(CameraCanvas) + diff.X); - Canvas.SetTop(CameraCanvas, Canvas.GetTop(CameraCanvas) + diff.Y); - } - MousePos = PointToScreen(Mouse.GetPosition(this)); - }; + float x = (float)Canvas.GetLeft(image.Parent); + float y = (float)Canvas.GetTop(image.Parent); - ScaleTransform scale = new ScaleTransform(1, 1); - CameraCanvas.RenderTransform = scale; - - MainCanvas.MouseWheel += (a, b) => - { - float multi = 0.952f; - if (b.Delta > 0) multi = 1.05f; - - scale.ScaleX *= multi; - scale.ScaleY *= multi; - - if (b.Delta < 0) - { - scale.ScaleX = Math.Floor(scale.ScaleX * 100) / 100f; - scale.ScaleY = Math.Floor(scale.ScaleY * 100) / 100f; - } - else - { - scale.ScaleX = Math.Ceiling(scale.ScaleX * 100) / 100f; - scale.ScaleY = Math.Ceiling(scale.ScaleY * 100) / 100f; - } - - Debug.WriteLine(scale.ScaleX); - }; - #endregion - - #region | Entities | - - DispatcherTimer EntityLoop = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1 / 10) }; - EntityLoop.Tick += (a, b) => - { - long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; - foreach (Entity entity in Entities) - { - long delta = milliseconds - entity.Time; - entity.Time = milliseconds; - entity.Tick(delta); - - if (entity.Object is null) - { - entity.Object = entity.Render(); - RenderOptions.SetBitmapScalingMode(entity.Object, BitmapScalingMode.NearestNeighbor); - var rt = new RotateTransform(entity.Rotation); - rt.CenterX = MainWindow.TileSize / 2; - rt.CenterY = MainWindow.TileSize / 2; - entity.Object.RenderTransform = rt; - GameCanvas.Children.Add(entity.Object); - } - ((RotateTransform)entity.Object.RenderTransform).Angle = entity.Rotation; - Canvas.SetLeft(entity.Object, entity.X); - Canvas.SetTop(entity.Object, entity.Y); - - } - }; - EntityLoop.Start(); - - #endregion + Entities.Add(new Helicopter { X = x, Y = y }); + } for (int n = 0; n < NPCCount; n++) { @@ -430,13 +366,7 @@ namespace CityGame Car.CarEvent reset = car => { Tile targetTile = npcWalkable[random.Next(0, npcWalkable.Count)]; - DispatcherTimer delay = new DispatcherTimer { Interval = TimeSpan.FromSeconds(random.Next(1, 5)) }; - delay.Tick += (a, b) => - { - car.Target = new Point(targetTile.X, targetTile.Y); - delay.Stop(); - }; - delay.Start(); + car.Target = new Point(targetTile.X, targetTile.Y); }; car.JourneyFinished += reset; @@ -444,6 +374,75 @@ namespace CityGame Entities.Add(car); } + + Show(); + } + int swv; + protected override void Update(GameTime time) + { + MouseState state = Mouse.GetState(); + + if (state.MiddleButton == ButtonState.Pressed) + { + var newpos = new Point(state.X, state.Y); + var diff = newpos - MousePos; + Canvas.SetLeft(CameraCanvas, Canvas.GetLeft(CameraCanvas) + diff.X); + Canvas.SetTop(CameraCanvas, Canvas.GetTop(CameraCanvas) + diff.Y); + } + MousePos = new Point(state.X, state.Y); + + + float delta = state.ScrollWheelValue - swv; + swv = state.ScrollWheelValue; + if (delta != 0) + { + Debug.WriteLine(delta); + } + float multi = 1.05f; + if (delta < 0) multi = 1 / multi; + + if (delta != 0) + { + CameraCanvas.ScaleX *= multi; + CameraCanvas.ScaleY *= multi; + } + + if (state.LeftButton == ButtonState.Pressed) + { + ISelectable select = GetSelectableFromClick(state); + if (select is not null) + { + if (Selected is not null) Selected.GetImage().Opacity = 1; + Selected = select; + Selected.GetImage().Opacity = 0.5f; + } + } + else if (state.RightButton == ButtonState.Pressed) + { + ISelectable select = GetSelectableFromClick(state); + if (select is not null) + { + Selected.RunAction(select); + } + } + + long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + foreach (Entity entity in Entities) + { + long deltaTime = milliseconds - entity.Time; + entity.Time = milliseconds; + entity.Tick(deltaTime); + + if (entity.Object is null) + { + entity.Object = entity.Render(); + GameCanvas.Children.Add(entity.Object); + } + entity.Object.Rotation = (int)entity.Rotation; + Canvas.SetLeft(entity.Object, entity.X); + Canvas.SetTop(entity.Object, entity.Y); + + } } } } \ No newline at end of file diff --git a/CityGame/OCanvas.cs b/CityGame/OCanvas.cs index c4d8ce8..a6b089f 100644 --- a/CityGame/OCanvas.cs +++ b/CityGame/OCanvas.cs @@ -1,4 +1,4 @@ -using System.Windows.Controls; +using WPFGame; namespace CityGame { @@ -12,8 +12,6 @@ namespace CityGame } public OCanvas() : base() { - this.Height = 100; - this.Width = 100; } } } \ No newline at end of file diff --git a/CityGame/Renderer.cs b/CityGame/Renderer.cs index 59b257a..f109ff9 100644 --- a/CityGame/Renderer.cs +++ b/CityGame/Renderer.cs @@ -1,4 +1,4 @@ -using System.Windows.Controls; +using WPFGame; namespace CityGame { @@ -32,7 +32,10 @@ namespace CityGame if (pattern.PatternCode == "3" && MainWindow.random.Next(0, 12) == 1) pattern.PatternCode = "3ab"; OCanvas canvas = new SourcedImage("Building"+ theme + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip); - if (MainWindow.random.Next(0, 10) == 0 && pattern.PatternCode != "3a") canvas.Children.Add(new SourcedImage("Vent" + (MainWindow.random.Next(0, 3) + 1) + ".png:" + (MainWindow.random.Next(0, 4) * 90))); + if (theme == "Blue" && pattern.PatternCode == "8" && MainWindow.random.Next(0, 4) == 0) canvas.Children.Add(new SourcedImage("Helipad.png")); + else if (theme == "Blue" && pattern.PatternCode == "5" && MainWindow.random.Next(0, 2) == 0) canvas.Children.Add(new SourcedImage("Garage.png:" + pattern.Rotation)); + else if (theme == "Blue" && pattern.PatternCode == "0") canvas.Children.Add(new SourcedImage("Garage.png:270")); + else if (MainWindow.random.Next(0, 10) == 0 && pattern.PatternCode != "3a") canvas.Children.Add(new SourcedImage("Vent" + (MainWindow.random.Next(0, 3) + 1) + ".png:" + (MainWindow.random.Next(0, 4) * 90))); return canvas; } diff --git a/CityGame/Resources/BlueTint.hlsl b/CityGame/Resources/BlueTint.hlsl deleted file mode 100644 index b356f0d..0000000 --- a/CityGame/Resources/BlueTint.hlsl +++ /dev/null @@ -1,9 +0,0 @@ -Texture2D inputTexture : register(t0); -SamplerState inputSampler : register(s0); - -float4 main(float2 uv : TEXCOORD) : SV_Target -{ - float4 color = inputTexture.Sample(inputSampler, uv); - float4 grayscaleColor = float4(dot(color.rgb, float3(0.299, 0.587, 0.114)), dot(color.rgb, float3(0.299, 0.587, 0.114)), dot(color.rgb, float3(0.299, 0.587, 0.114)), color.a); - return grayscaleColor; -} \ No newline at end of file diff --git a/CityGame/Resources/Garage.png b/CityGame/Resources/Garage.png new file mode 100644 index 0000000..5257f7d Binary files /dev/null and b/CityGame/Resources/Garage.png differ diff --git a/CityGame/Resources/Helicopter.png b/CityGame/Resources/Helicopter.png new file mode 100644 index 0000000..85ce622 Binary files /dev/null and b/CityGame/Resources/Helicopter.png differ diff --git a/CityGame/Resources/HelicopterBlades.png b/CityGame/Resources/HelicopterBlades.png new file mode 100644 index 0000000..62cf8b0 Binary files /dev/null and b/CityGame/Resources/HelicopterBlades.png differ diff --git a/CityGame/Resources/HelicopterBlades2.png b/CityGame/Resources/HelicopterBlades2.png new file mode 100644 index 0000000..2920951 Binary files /dev/null and b/CityGame/Resources/HelicopterBlades2.png differ diff --git a/CityGame/Resources/HelicopterFlight.png b/CityGame/Resources/HelicopterFlight.png new file mode 100644 index 0000000..e0976d3 Binary files /dev/null and b/CityGame/Resources/HelicopterFlight.png differ diff --git a/CityGame/Resources/Helipad.png b/CityGame/Resources/Helipad.png new file mode 100644 index 0000000..80a2461 Binary files /dev/null and b/CityGame/Resources/Helipad.png differ diff --git a/CityGame/SourcedImage.cs b/CityGame/SourcedImage.cs index 8a5fe05..f6102c0 100644 --- a/CityGame/SourcedImage.cs +++ b/CityGame/SourcedImage.cs @@ -3,15 +3,24 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; -using System.Windows.Media.Imaging; +using WPFGame; +/* -namespace CityGame +namespace CityGame.OldSourcedImage { public class SourcedImage : Image { + public static List GetObjectsBySourceFile(params string[] files) + { + List objects = new List(); + foreach(string file in files) + { + if (!ObjectsBySourceFile.ContainsKey(file)) continue; + foreach (var image in ObjectsBySourceFile[file]) objects.Add(image); + } + return objects; + } + static Dictionary> ObjectsBySourceFile = new Dictionary>(); public Dictionary Alternatives = new Dictionary() { {"Path3.png", "Path3c.png" } @@ -49,6 +58,11 @@ namespace CityGame { uri = Alternatives[uri]; } + if(!ObjectsBySourceFile.ContainsKey(uri)) + { + ObjectsBySourceFile.Add(uri, new List()); + } + ObjectsBySourceFile[uri].Add(this); uri = Environment.CurrentDirectory + "\\Resources\\" + uri; if (loadedSources.ContainsKey(src)) { @@ -65,4 +79,4 @@ namespace CityGame } } } -} \ No newline at end of file +}*/ \ No newline at end of file diff --git a/CityGame/Tile.cs b/CityGame/Tile.cs index b95e8bc..c77eece 100644 --- a/CityGame/Tile.cs +++ b/CityGame/Tile.cs @@ -1,10 +1,30 @@ namespace CityGame { - public struct Tile + public struct Tile : ISelectable { public int BlockID; public TileType Type; public int X; public int Y; + + public OCanvas GetImage() + { + return MainWindow.ImageGrid[X, Y]; + } + + public bool RunAction(ISelectable target) + { + return false; + } + + int ISelectable.X() + { + return X * MainWindow.TileSize; + } + + int ISelectable.Y() + { + return Y * MainWindow.TileSize; + } } } \ No newline at end of file