some nondescript nonsense
This commit is contained in:
parent
59ae0bc41a
commit
b52c26cdcd
6 changed files with 83 additions and 57 deletions
|
|
@ -18,6 +18,7 @@
|
|||
<PackageReference Include="NAudio" Version="2.1.0" />
|
||||
<PackageReference Include="NAudio.Lame" Version="2.0.1" />
|
||||
<PackageReference Include="SimplexNoise" Version="2.0.0" />
|
||||
<PackageReference Include="System.Collections.Concurrent" Version="4.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
|
|||
|
|
@ -7,6 +7,10 @@ using System.Diagnostics;
|
|||
using System.Linq;
|
||||
using OrpticonGameHelper;
|
||||
using OrpticonGameHelper.Classes.Elements;
|
||||
using System.Threading;
|
||||
using AStar;
|
||||
using System.Threading.Tasks;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace CityGame.Classes.Entities
|
||||
{
|
||||
|
|
@ -37,10 +41,10 @@ namespace CityGame.Classes.Entities
|
|||
}
|
||||
public float Speed { get; set; } = 128;
|
||||
float currentSpeed = 0;
|
||||
public static Dictionary<Tile, Car> OccupiedTilesFill = new Dictionary<Tile, Car>();
|
||||
public static Dictionary<Tile, Car> OccupiedTiles = new Dictionary<Tile, Car>();
|
||||
public static Dictionary<Tile, Car> OccupiedTilesFill2 = new Dictionary<Tile, Car>();
|
||||
public static Dictionary<Tile, Car> OccupiedTiles2 = new Dictionary<Tile, Car>();
|
||||
public static ConcurrentDictionary<Tile, Car> OccupiedTilesFill = new ConcurrentDictionary<Tile, Car>();
|
||||
public static ConcurrentDictionary<Tile, Car> OccupiedTiles = new ConcurrentDictionary<Tile, Car>();
|
||||
public static ConcurrentDictionary<Tile, Car> OccupiedTilesFill2 = new ConcurrentDictionary<Tile, Car>();
|
||||
public static ConcurrentDictionary<Tile, Car> OccupiedTiles2 = new ConcurrentDictionary<Tile, Car>();
|
||||
protected string PNGFile = "NPCCar.png";
|
||||
protected ColoredRectangle debugRect;
|
||||
protected Tile lastTile;
|
||||
|
|
@ -96,8 +100,15 @@ namespace CityGame.Classes.Entities
|
|||
private int curveMode;
|
||||
private float curveModePixelDuration;
|
||||
private int curveModeStartedAt;
|
||||
|
||||
public override void Tick(long deltaTime)
|
||||
private bool pathfindingInProgress;
|
||||
private async Task<Point[]> CalculatePathAsync(Point start, Point target, PathFinder pathfinder)
|
||||
{
|
||||
return await Task.Run(() =>
|
||||
{
|
||||
return pathfinder.FindPath(start.Convert(), target.Convert()).Select(x => x.Convert()).ToArray();
|
||||
});
|
||||
}
|
||||
public override async void Tick(long deltaTime)
|
||||
{
|
||||
//deltaTime /= 10;
|
||||
//deltaTime *= 500;
|
||||
|
|
@ -119,15 +130,23 @@ namespace CityGame.Classes.Entities
|
|||
else lights.ForEach(x => x.Visible = true);
|
||||
if (Target is not null)
|
||||
{
|
||||
if (pathfindingInProgress) return;
|
||||
//if(Object is not null) Object.ToolTip = Target.ToString();
|
||||
if (Path is null)
|
||||
if (Path is null && !pathfindingInProgress)
|
||||
{
|
||||
pathfindingInProgress = true;
|
||||
var pf = MainWindow.pathfinder;
|
||||
if (grid == 2) pf = MainWindow.pathfinderDesperate;
|
||||
Path = pf.FindPath(Point.Convert(), new Point((int)(Target.X() / MainWindow.TileSize), (int)(Target.Y() / MainWindow.TileSize)).Convert()).Select(x => x.Convert()).ToArray();
|
||||
|
||||
Point start = Point;
|
||||
Point target = new Point((int)(Target.X() / MainWindow.TileSize), (int)(Target.Y() / MainWindow.TileSize));
|
||||
|
||||
Path = await CalculatePathAsync(start, target, pf);
|
||||
NextTarget = 0;
|
||||
pathfindingInProgress = false;
|
||||
}
|
||||
if (new Point(Target.X() / 64, Target.Y() / 64) != Point) Move(this);
|
||||
if (Path is null) return;
|
||||
if (Path.Length == 0)
|
||||
{
|
||||
JourneyImpossible(this);
|
||||
|
|
@ -146,13 +165,13 @@ namespace CityGame.Classes.Entities
|
|||
JourneyFinished(this);
|
||||
if (Math.Round(Rotation) == 0 || Math.Round(Rotation) == 90)
|
||||
{
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
}
|
||||
if (Math.Round(Rotation) == 180 || Math.Round(Rotation) == 270)
|
||||
{
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
@ -172,8 +191,8 @@ namespace CityGame.Classes.Entities
|
|||
|
||||
if (Math.Round(Rotation) == 0 || Math.Round(Rotation) == 90)
|
||||
{
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
if (OccupiedTiles.ContainsKey(targetTile) && OccupiedTiles[targetTile] != this)
|
||||
{
|
||||
SpeedMulti = 0;
|
||||
|
|
@ -182,8 +201,8 @@ namespace CityGame.Classes.Entities
|
|||
}
|
||||
if (Math.Round(Rotation) == 180 || Math.Round(Rotation) == 270)
|
||||
{
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
if (OccupiedTiles2.ContainsKey(targetTile) && OccupiedTiles2[targetTile] != this)
|
||||
{
|
||||
SpeedMulti = 0;
|
||||
|
|
@ -285,13 +304,13 @@ namespace CityGame.Classes.Entities
|
|||
{
|
||||
if (Math.Round(Rotation) == 0 || Math.Round(Rotation) == 90)
|
||||
{
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
}
|
||||
if (Math.Round(Rotation) == 180 || Math.Round(Rotation) == 270)
|
||||
{
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.Add(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.Add(myTile, this);
|
||||
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.TryAdd(myTile, this);
|
||||
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.TryAdd(myTile, this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
34
CityGame/Classes/Misc/StaticDataManager.cs
Normal file
34
CityGame/Classes/Misc/StaticDataManager.cs
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CityGame.Classes.Misc
|
||||
{
|
||||
public class StaticData
|
||||
{
|
||||
protected object obj;
|
||||
static List<StaticData> list = new List<StaticData>();
|
||||
public static void Reset()
|
||||
{
|
||||
list.ForEach(x => x.obj = null);
|
||||
}
|
||||
}
|
||||
public class StaticData<T> : StaticData
|
||||
{
|
||||
public StaticData(T obj)
|
||||
{
|
||||
this.obj = obj;
|
||||
}
|
||||
public T Value { get => (T)obj; }
|
||||
public static implicit operator StaticData<T>(T obj)
|
||||
{
|
||||
return new StaticData<T>(obj);
|
||||
}
|
||||
public static implicit operator T(StaticData<T> d)
|
||||
{
|
||||
return d.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,33 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace CityGame.Classes.Rendering
|
||||
{
|
||||
public class ImageConverter
|
||||
{
|
||||
public static void ChangeColor(string srcFile, string destFile, Dictionary<string, string> conversions)
|
||||
{
|
||||
destFile = Environment.CurrentDirectory + "\\Resources\\" + destFile + ".png";
|
||||
//if (File.Exists(destFile)) return;
|
||||
srcFile = Environment.CurrentDirectory + "\\Resources\\" + srcFile + ".png";
|
||||
if (!File.Exists(srcFile)) return;
|
||||
|
||||
Dictionary<System.Drawing.Color, System.Drawing.Color> Conversions = conversions.Select(x => new KeyValuePair<System.Drawing.Color, System.Drawing.Color>(System.Drawing.ColorTranslator.FromHtml(x.Key), System.Drawing.ColorTranslator.FromHtml(x.Value))).ToDictionary(x => x.Key, x => x.Value);
|
||||
System.Drawing.Bitmap bmp = (System.Drawing.Bitmap)System.Drawing.Image.FromFile(srcFile);
|
||||
for (int x = 0; x < bmp.Width; x++)
|
||||
{
|
||||
for (int y = 0; y < bmp.Height; y++)
|
||||
{
|
||||
var color = bmp.GetPixel(x, y);
|
||||
if (Conversions.ContainsKey(color))
|
||||
{
|
||||
bmp.SetPixel(x, y, Conversions[color]);
|
||||
}
|
||||
}
|
||||
}
|
||||
bmp.Save(destFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -13,6 +13,7 @@ using System.Linq;
|
|||
using OrpticonGameHelper;
|
||||
using OrpticonGameHelper.Classes.Elements;
|
||||
using static CityGame.Classes.Entities.Car;
|
||||
using OrpticonGameHelper.Classes.Misc;
|
||||
|
||||
namespace CityGame
|
||||
{
|
||||
|
|
@ -190,6 +191,8 @@ namespace CityGame
|
|||
int NPCCount = (int)Math.Ceiling(mapHeight * mapWidth / 100f);
|
||||
//NPCCount = 1;
|
||||
//NPCCount = 0;
|
||||
//NPCCount /= 2;
|
||||
//NPCCount *= 8;
|
||||
|
||||
random = new Random(seed);
|
||||
|
||||
|
|
@ -533,9 +536,9 @@ namespace CityGame
|
|||
Canvas.SetTop(entity.Object, entity.VisualY);
|
||||
}
|
||||
Car.OccupiedTiles = Car.OccupiedTilesFill;
|
||||
Car.OccupiedTilesFill = new Dictionary<Tile, Car>();
|
||||
Car.OccupiedTilesFill = new System.Collections.Concurrent.ConcurrentDictionary<Tile, Car>();
|
||||
Car.OccupiedTiles2 = Car.OccupiedTilesFill2;
|
||||
Car.OccupiedTilesFill2 = new Dictionary<Tile, Car>();
|
||||
Car.OccupiedTilesFill2 = new System.Collections.Concurrent.ConcurrentDictionary<Tile, Car>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
namespace CityGame
|
||||
using CityGame.Classes.Menu;
|
||||
|
||||
namespace CityGame
|
||||
{
|
||||
public class Program {
|
||||
public static void Main() {
|
||||
var menu = new MainWindow();
|
||||
var game = new MainWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue