První 3 monstra z plánovaných pěti. Kompletní pathfinding i zrcadlení do clienta. Útoky implementované nejsou. Lurk a Neko jsou hardcoded aby útočili na P1.
This commit is contained in:
parent
4484b127c5
commit
9bfe63a166
27 changed files with 772 additions and 47 deletions
29
FNAF_Server/Enemies/RoamingPathfinder.cs
Normal file
29
FNAF_Server/Enemies/RoamingPathfinder.cs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
using FNAF_Server.Map;
|
||||
using GlobalClassLib;
|
||||
|
||||
namespace FNAF_Server.Enemies;
|
||||
|
||||
public abstract class RoamingPathfinder : Pathfinder{
|
||||
protected RoamingPathfinder(Enemy enemy) : base(enemy) {
|
||||
}
|
||||
|
||||
protected Dictionary<MapTile, int> Crawl(MapTile tile) {
|
||||
Dictionary<MapTile, int> distances = new(){ [tile] = 0 };
|
||||
CrawlStep(tile, distances);
|
||||
return distances;
|
||||
}
|
||||
|
||||
private void CrawlStep(MapTile tile, Dictionary<MapTile, int> distances) {
|
||||
List<MapTile> neighbours = GetNeighbours(tile,
|
||||
c => (!c.Blocked || c.Type == ConnectorType.DOOR_OFFICE) && tile != Enemy.Location,
|
||||
t =>
|
||||
(!distances.ContainsKey(t) || distances[t] > distances[tile]) &&
|
||||
(!Enemy.BlocksTile || EnemyManager.GetByLocation(t).All(e => !e.BlocksTile || e == Enemy)));
|
||||
|
||||
neighbours.ForEach(t => distances[t] = distances[tile] + tile.GetConnector(t)!.Value);
|
||||
|
||||
if (neighbours.Count != 0){
|
||||
neighbours.ForEach(t => CrawlStep(t, distances));
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue