This commit is contained in:
pan.codes 2023-05-08 23:00:31 +02:00
parent bd93ae2f5f
commit e1f4d4ec11
9 changed files with 132 additions and 22 deletions

View file

@ -10,6 +10,8 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="AStarLite" Version="1.1.0" /> <PackageReference Include="AStarLite" Version="1.1.0" />
<PackageReference Include="Microsoft.HLSL.CSharpVB" Version="1.0.2" /> <PackageReference Include="Microsoft.HLSL.CSharpVB" Version="1.0.2" />
<PackageReference Include="NAudio" Version="2.1.0" />
<PackageReference Include="NAudio.Lame" Version="2.0.1" />
<PackageReference Include="SimplexNoise" Version="2.0.0" /> <PackageReference Include="SimplexNoise" Version="2.0.0" />
<PackageReference Include="System.Drawing.Common" Version="7.0.0" /> <PackageReference Include="System.Drawing.Common" Version="7.0.0" />
<PackageReference Include="System.Speech" Version="7.0.0" /> <PackageReference Include="System.Speech" Version="7.0.0" />
@ -86,6 +88,9 @@
<None Update="Resources\Garage.png"> <None Update="Resources\Garage.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>
<None Update="Resources\helicopter.mp3">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Resources\Helicopter.png"> <None Update="Resources\Helicopter.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None> </None>

View file

@ -3,6 +3,7 @@ using CityGame.Classes.World;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.Eventing.Reader;
using System.Linq; using System.Linq;
using System.Runtime.ConstrainedExecution; using System.Runtime.ConstrainedExecution;
using System.Windows; using System.Windows;
@ -10,27 +11,15 @@ using WPFGame;
namespace CityGame.Classes.Entities namespace CityGame.Classes.Entities
{ {
public class PoliceCar : Car
{
public static List<PoliceCar> Cars = new List<PoliceCar>();
public PoliceCar() : base()
{
Cars.Add(this);
Speed = 192;
PNGFile = "PoliceCar.png";
}
public override void Tick(long deltaTime)
{
base.Tick(deltaTime);
}
}
public class Car : Entity public class Car : Entity
{ {
public bool desperate = false;
public static List<Car> Cars = new List<Car>();
public delegate void CarEvent(Car car); public delegate void CarEvent(Car car);
public event CarEvent JourneyFinished; public event CarEvent JourneyFinished;
public event CarEvent JourneyImpossible; public event CarEvent JourneyImpossible;
public ISelectable Target { get; set; } = null; ISelectable target = null;
public ISelectable Target { get { return target; } set { target = value; Path = null; } }
public int NextTarget { get; set; } = 0; public int NextTarget { get; set; } = 0;
public Point[]? Path { get; set; } = null; public Point[]? Path { get; set; } = null;
public Point Point public Point Point
@ -84,20 +73,27 @@ namespace CityGame.Classes.Entities
lights.Add(blight); lights.Add(blight);
lights.Add(blight2); lights.Add(blight2);
debugRect = new ColoredRectangle();
MainWindow.GameCanvas.Children.Add(debugRect);
return canvas; return canvas;
} }
public Car() public Car()
{ {
Cars.Add(this);
JourneyFinished += c => { }; JourneyFinished += c => { };
JourneyImpossible += c => { }; JourneyImpossible += c => { };
} }
public override void Tick(long deltaTime) public override void Tick(long deltaTime)
{ {
//deltaTime *= 500;
Tuple<TileType, string>[] fullBlockTiles = new Tuple<TileType, string>[]
{
new Tuple<TileType, string>(TileType.Road, "4c"),
new Tuple<TileType, string>(TileType.Road, "3c"),
new Tuple<TileType, string>(TileType.Road, "1"),
new Tuple<TileType, string>(TileType.Garage, null)
};
Tile myTile = MainWindow.Grid[Point.X, Point.Y]; Tile myTile = MainWindow.Grid[Point.X, Point.Y];
bool fullBlock = fullBlockTiles.Any(x => (x.Item1 == myTile.Type || (x.Item1 == TileType.Road && (myTile.Type == TileType.Path || myTile.Type == TileType.Highway || myTile.Type == TileType.Bridge || myTile.Type == TileType.HighwayBridge))) && (x.Item2 == myTile.Pattern.PatternCode || x.Item2 is null));
if (myTile.Type == TileType.Garage) if (myTile.Type == TileType.Garage)
{ {
Rotation = ((Canvas)myTile.Element).Children[1].Rotation-90; Rotation = ((Canvas)myTile.Element).Children[1].Rotation-90;
@ -109,7 +105,9 @@ namespace CityGame.Classes.Entities
//if(Object is not null) Object.ToolTip = Target.ToString(); //if(Object is not null) Object.ToolTip = Target.ToString();
if (Path is null) if (Path is null)
{ {
Path = MainWindow.pathfinder.FindPath(Point.Convert(), new Point((int)(Target.X() / MainWindow.TileSize), (int)(Target.Y() / MainWindow.TileSize)).Convert()).Select(x => x.Convert()).ToArray(); var pf = MainWindow.pathfinder;
if (desperate) 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();
NextTarget = 0; NextTarget = 0;
} }
if (Path.Length == 0) if (Path.Length == 0)
@ -128,6 +126,16 @@ namespace CityGame.Classes.Entities
Path = null; Path = null;
NextTarget = 0; NextTarget = 0;
JourneyFinished(this); 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 (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);
}
return; return;
} }
if (X.CloselyEquals(nextTarget.X * MainWindow.TileSize) && Y.CloselyEquals(nextTarget.Y * MainWindow.TileSize)) if (X.CloselyEquals(nextTarget.X * MainWindow.TileSize) && Y.CloselyEquals(nextTarget.Y * MainWindow.TileSize))
@ -146,12 +154,14 @@ namespace CityGame.Classes.Entities
if (Math.Round(Rotation) == 0 || Math.Round(Rotation) == 90) if (Math.Round(Rotation) == 0 || Math.Round(Rotation) == 90)
{ {
if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.Add(myTile, this); if (!OccupiedTilesFill.ContainsKey(myTile)) OccupiedTilesFill.Add(myTile, this);
if (!OccupiedTilesFill2.ContainsKey(myTile) && fullBlock) OccupiedTilesFill2.Add(myTile, this);
if (OccupiedTiles.ContainsKey(targetTile) && OccupiedTiles[targetTile] != this) SpeedMulti = 0; if (OccupiedTiles.ContainsKey(targetTile) && OccupiedTiles[targetTile] != this) SpeedMulti = 0;
} }
if (Math.Round(Rotation) == 180 || Math.Round(Rotation) == 270) if (Math.Round(Rotation) == 180 || Math.Round(Rotation) == 270)
{ {
if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.Add(myTile, this); if (!OccupiedTilesFill2.ContainsKey(myTile)) OccupiedTilesFill2.Add(myTile, this);
if (OccupiedTiles2.ContainsKey(targetTile) && OccupiedTiles2[targetTile] != this) SpeedMulti = 0; if (OccupiedTiles2.ContainsKey(targetTile) && OccupiedTiles2[targetTile] != this) SpeedMulti = 0;
if (!OccupiedTilesFill.ContainsKey(myTile) && fullBlock) OccupiedTilesFill.Add(myTile, this);
} }
var possibleDistance = Speed * deltaTime / 1000 * SpeedMulti; var possibleDistance = Speed * deltaTime / 1000 * SpeedMulti;
@ -159,6 +169,18 @@ namespace CityGame.Classes.Entities
Vector2 travelFinal = direction * finalDistance; Vector2 travelFinal = direction * finalDistance;
X += travelFinal.X; X += travelFinal.X;
Y += travelFinal.Y; Y += travelFinal.Y;
} else
{
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 (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);
}
} }
} }
} }

View file

@ -1,6 +1,7 @@
using CityGame.Classes.Rendering; using CityGame.Classes.Rendering;
using CityGame.Classes.World; using CityGame.Classes.World;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using System; using System;
using WPFGame; using WPFGame;
@ -19,8 +20,17 @@ namespace CityGame.Classes.Entities
public ISelectable Target; public ISelectable Target;
bool Move; bool Move;
public LightSource Spotlight; public LightSource Spotlight;
SoundEffectInstance Sound;
AudioEmitter emitter;
public override OCanvas Render() public override OCanvas Render()
{ {
Sound = Window.GetSound("helicopter").CreateInstance();
Sound.IsLooped = true;
emitter = new AudioEmitter { Position = new Vector3(X, Y, 25) };
Sound.Apply3D(MainWindow.SoundEffectListener, emitter);
OCanvas canvas = new OCanvas(); OCanvas canvas = new OCanvas();
Heli1 = new SourcedImage("Helicopter.png"); Heli1 = new SourcedImage("Helicopter.png");
Heli2 = new SourcedImage("HelicopterFlight.png"); Heli2 = new SourcedImage("HelicopterFlight.png");
@ -52,9 +62,11 @@ namespace CityGame.Classes.Entities
public override void Tick(long deltaTime) public override void Tick(long deltaTime)
{ {
if (Heli1 is null) return; if (Heli1 is null) return;
emitter.Position = new Vector3(X, Y, 25);
Tile myTile = MainWindow.Grid[(int)(X / MainWindow.TileSize), (int)(Y / MainWindow.TileSize)]; Tile myTile = MainWindow.Grid[(int)(X / MainWindow.TileSize), (int)(Y / MainWindow.TileSize)];
if (myTile.Type != TileType.Helipad) if (myTile.Type != TileType.Helipad)
{ {
//if (Sound.State == SoundState.Paused || Sound.State == SoundState.Stopped) Sound.Play();
Spotlight.Visible = true; Spotlight.Visible = true;
Heli2.Visible = true; Heli2.Visible = true;
Heli1.Visible = false; Heli1.Visible = false;
@ -71,6 +83,7 @@ namespace CityGame.Classes.Entities
} }
} else } else
{ {
if (Sound.State == SoundState.Playing) Sound.Pause();
Spotlight.Visible = false; Spotlight.Visible = false;
Blades1.Visible = true; Blades1.Visible = true;
Blades2.Visible = false; Blades2.Visible = false;

View file

@ -0,0 +1,48 @@
using CityGame.Classes.Rendering;
using Microsoft.Xna.Framework;
using System;
using System.Collections.Generic;
using WPFGame;
namespace CityGame.Classes.Entities
{
public class PoliceCar : Car
{
public static List<PoliceCar> PCars = new List<PoliceCar>();
protected LightSource sirenLight;
public PoliceCar() : base()
{
desperate = true;
PCars.Add(this);
Speed = 192;
PNGFile = "PoliceCar.png";
}
public override OCanvas Render()
{
OCanvas canvas = base.Render();
sirenLight = new LightSource { Radius = 24, Angle = 24, Intensity = 4f, Color = Color.Red, Type = LightSourceType.PointLight, RotationOrigin = new Point(MainWindow.TileSize / 2) };
canvas.Children.Add(sirenLight);
lights.Add(sirenLight);
Canvas.SetLeft(sirenLight, 43);
Canvas.SetTop(sirenLight, 32);
return canvas;
}
public override void Tick(long deltaTime)
{
if (sirenLight is null) return;
long ms = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
if (ms / 250 % 2 == 0)
{
sirenLight.Color = Color.Red;
}
else
{
sirenLight.Color = Color.Blue;
}
base.Tick(deltaTime);
}
}
}

View file

@ -4,7 +4,7 @@ using CityGame.Classes.World;
namespace CityGame.Classes.Rendering namespace CityGame.Classes.Rendering
{ {
public class Pattern public struct Pattern
{ {
public string PatternCode { get; set; } public string PatternCode { get; set; }
public int Rotation { get; set; } public int Rotation { get; set; }

View file

@ -42,16 +42,20 @@ namespace CityGame.Classes.Rendering
if (pattern.PatternCode == "0" && Grid[x, y].Type == TileType.Garage) canvas.Children.Add(new SourcedImage("Garage.png:270")); if (pattern.PatternCode == "0" && Grid[x, y].Type == TileType.Garage) canvas.Children.Add(new SourcedImage("Garage.png:270"));
if (Grid[x,y].Type == TileType.Helipad) canvas.Children.Add(new SourcedImage("Helipad.png")); if (Grid[x,y].Type == TileType.Helipad) canvas.Children.Add(new SourcedImage("Helipad.png"));
Grid[x, y].Pattern = pattern;
return canvas; return canvas;
} }
if (type == TileType.Lake || type == TileType.River) if (type == TileType.Lake || type == TileType.River)
{ {
Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Lake, TileType.Bridge, TileType.River, TileType.HighwayBridge); Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Lake, TileType.Bridge, TileType.River, TileType.HighwayBridge);
Grid[x, y].Pattern = pattern;
return new SourcedImage("Lake" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip); return new SourcedImage("Lake" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip);
} }
if (type == TileType.Park) if (type == TileType.Park)
{ {
Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Park, TileType.Path); Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Park, TileType.Path);
Grid[x, y].Pattern = pattern;
OCanvas canvas = new SourcedImage("Park" + pattern.PatternCode + ".png:" + pattern.Rotation); OCanvas canvas = new SourcedImage("Park" + pattern.PatternCode + ".png:" + pattern.Rotation);
if (MainWindow.random.Next(0, 4) == 0) canvas.Children.Add(new SourcedImage("Tree.png:" + MainWindow.random.Next(0, 4) * 90, tooltip)); if (MainWindow.random.Next(0, 4) == 0) canvas.Children.Add(new SourcedImage("Tree.png:" + MainWindow.random.Next(0, 4) * 90, tooltip));
return canvas; return canvas;
@ -59,6 +63,7 @@ namespace CityGame.Classes.Rendering
if (type == TileType.Road) if (type == TileType.Road)
{ {
Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge); Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge);
Grid[x, y].Pattern = pattern;
if (pattern.PatternCode == "2c") pattern.Rotation += 270; if (pattern.PatternCode == "2c") pattern.Rotation += 270;
if (pattern.PatternCode == "1") pattern.Rotation += 180; if (pattern.PatternCode == "1") pattern.Rotation += 180;
return new SourcedImage("Road" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip); return new SourcedImage("Road" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip);
@ -66,6 +71,7 @@ namespace CityGame.Classes.Rendering
if (type == TileType.Highway) if (type == TileType.Highway)
{ {
Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge); Pattern pattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge);
Grid[x, y].Pattern = pattern;
if (pattern.PatternCode == "2c") pattern.Rotation += 270; if (pattern.PatternCode == "2c") pattern.Rotation += 270;
if (pattern.PatternCode == "1") pattern.Rotation += 180; if (pattern.PatternCode == "1") pattern.Rotation += 180;
return new SourcedImage("Highway" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip); return new SourcedImage("Highway" + pattern.PatternCode + ".png:" + pattern.Rotation, tooltip);
@ -74,6 +80,7 @@ namespace CityGame.Classes.Rendering
{ {
Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge); Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Path, TileType.Bridge, TileType.Highway, TileType.HighwayBridge);
Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Path, TileType.Park); Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Path, TileType.Park);
Grid[x, y].Pattern = roadpattern;
if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270; if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270;
if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180; if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180;
Image path = new SourcedImage("Path" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip); Image path = new SourcedImage("Path" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip);
@ -88,6 +95,7 @@ namespace CityGame.Classes.Rendering
{ {
Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Bridge, TileType.Path, TileType.Highway, TileType.HighwayBridge); Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Bridge, TileType.Path, TileType.Highway, TileType.HighwayBridge);
Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Bridge, TileType.Lake, TileType.River, TileType.HighwayBridge); Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Bridge, TileType.Lake, TileType.River, TileType.HighwayBridge);
Grid[x, y].Pattern = roadpattern;
if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270; if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270;
if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180; if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180;
Image path = new SourcedImage("Bridge" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip); Image path = new SourcedImage("Bridge" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip);
@ -102,6 +110,7 @@ namespace CityGame.Classes.Rendering
{ {
Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Bridge, TileType.Path, TileType.Highway, TileType.HighwayBridge); Pattern roadpattern = Pattern.Calculate(Grid, x, y, TileType.Road, TileType.Bridge, TileType.Path, TileType.Highway, TileType.HighwayBridge);
Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Bridge, TileType.Lake, TileType.River, TileType.HighwayBridge); Pattern parkpattern = Pattern.Calculate(Grid, x, y, TileType.Bridge, TileType.Lake, TileType.River, TileType.HighwayBridge);
Grid[x, y].Pattern = roadpattern;
if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270; if (roadpattern.PatternCode == "2c") roadpattern.Rotation += 270;
if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180; if (roadpattern.PatternCode == "1") roadpattern.Rotation += 180;
Image path = new SourcedImage("HighwayBridge" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip); Image path = new SourcedImage("HighwayBridge" + roadpattern.PatternCode + ".png:" + roadpattern.Rotation, tooltip);

View file

@ -7,6 +7,7 @@ namespace CityGame.Classes.World
{ {
public int BlockID; public int BlockID;
public TileType Type; public TileType Type;
public Pattern Pattern;
public int X; public int X;
public int Y; public int Y;
public UIElement Element; public UIElement Element;

View file

@ -4,6 +4,7 @@ using CityGame.Classes.Entities;
using CityGame.Classes.Rendering; using CityGame.Classes.Rendering;
using CityGame.Classes.World; using CityGame.Classes.World;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using SimplexNoise; using SimplexNoise;
using System; using System;
@ -12,6 +13,7 @@ using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Speech.Synthesis; using System.Speech.Synthesis;
using System.Speech.Synthesis.TtsEngine;
using WPFGame; using WPFGame;
namespace CityGame namespace CityGame
@ -61,6 +63,7 @@ namespace CityGame
public static bool MouseIsDown = false; public static bool MouseIsDown = false;
public static Vector2 MousePos = new Vector2(0, 0); public static Vector2 MousePos = new Vector2(0, 0);
public static PathFinder pathfinder; public static PathFinder pathfinder;
public static PathFinder pathfinderDesperate;
public static short[,] pathfindingGrid; public static short[,] pathfindingGrid;
public static short[,] pathfindingGridDesperate; public static short[,] pathfindingGridDesperate;
public static List<Tile> npcWalkable = new List<Tile>(); public static List<Tile> npcWalkable = new List<Tile>();
@ -75,6 +78,8 @@ namespace CityGame
internal static Canvas GameCanvas = new OCanvas(); internal static Canvas GameCanvas = new OCanvas();
Canvas CameraCanvas = new OCanvas(); Canvas CameraCanvas = new OCanvas();
Canvas UICanvas = new OCanvas(); Canvas UICanvas = new OCanvas();
public static AudioListener SoundEffectListener;
public MainWindow() public MainWindow()
{ {
AddPenumbra(); AddPenumbra();
@ -353,7 +358,8 @@ namespace CityGame
var worldGrid = new WorldGrid(pathfindingGrid); var worldGrid = new WorldGrid(pathfindingGrid);
pathfinder = new PathFinder(worldGrid, new PathFinderOptions { PunishChangeDirection = true, UseDiagonals = false, SearchLimit = int.MaxValue, HeuristicFormula = AStar.Heuristics.HeuristicFormula.Euclidean }); pathfinder = new PathFinder(worldGrid, new PathFinderOptions { PunishChangeDirection = true, UseDiagonals = false, SearchLimit = int.MaxValue, HeuristicFormula = AStar.Heuristics.HeuristicFormula.Euclidean });
var worldGridDesperate = new WorldGrid(pathfindingGridDesperate);
pathfinderDesperate = new PathFinder(worldGridDesperate, new PathFinderOptions { PunishChangeDirection = true, UseDiagonals = false, SearchLimit = int.MaxValue, HeuristicFormula = AStar.Heuristics.HeuristicFormula.Euclidean });
foreach (Image image in SourcedImage.GetObjectsBySourceFile("Helipad.png")) foreach (Image image in SourcedImage.GetObjectsBySourceFile("Helipad.png"))
{ {
@ -393,11 +399,14 @@ namespace CityGame
Entities.Add(car); Entities.Add(car);
} }
SoundEffectListener = new AudioListener { Position = new Vector3(0, 0, 100) };
Show(); Show();
} }
int swv; int swv;
protected override Color SkyColor(long SpeedFactor) protected override Color SkyColor(long SpeedFactor)
{ {
return Color.Black;
return base.SkyColor(180); return base.SkyColor(180);
} }
protected override void Update(GameTime time) protected override void Update(GameTime time)
@ -410,6 +419,7 @@ namespace CityGame
var diff = newpos - MousePos; var diff = newpos - MousePos;
diff /= CameraZoom; diff /= CameraZoom;
CameraPosition += diff; CameraPosition += diff;
SoundEffectListener.Position = new Vector3(CameraPosition, SoundEffectListener.Position.Z);
} }
MousePos = new Vector2(state.X, state.Y); MousePos = new Vector2(state.X, state.Y);
@ -425,6 +435,8 @@ namespace CityGame
if (delta != 0) if (delta != 0)
{ {
if (multi > 1) SoundEffectListener.Position = new Vector3(SoundEffectListener.Position.X, SoundEffectListener.Position.Y, SoundEffectListener.Position.Z - 10);
else SoundEffectListener.Position = new Vector3(SoundEffectListener.Position.X, SoundEffectListener.Position.Y, SoundEffectListener.Position.Z + 10);
CameraZoom *= multi; CameraZoom *= multi;
} }

Binary file not shown.