private void HandleAStarRouteMessage(SharedAiDebug.AStarRouteMessage message) { if ((_tooltips & AiDebugMode.Paths) != 0) { var entityManager = IoCManager.Resolve <IEntityManager>(); var entity = entityManager.GetEntity(message.EntityUid); TryCreatePanel(entity); var label = (Label)_aiBoxes[entity].GetChild(0).GetChild(1); label.Text = $"Pathfinding time (ms): {message.TimeTaken * 1000:0.0000}\n" + $"Nodes traversed: {message.CameFrom.Count}\n" + $"Nodes per ms: {message.CameFrom.Count / (message.TimeTaken * 1000)}"; } }
private void DispatchAStarDebug(SharedAiDebug.AStarRouteDebug routeDebug) { var mapManager = IoCManager.Resolve <IMapManager>(); var route = new List <Vector2>(); foreach (var tile in routeDebug.Route) { var tileGrid = mapManager.GetGrid(tile.GridIndex).GridTileToLocal(tile.GridIndices); route.Add(mapManager.GetGrid(tile.GridIndex).LocalToWorld(tileGrid).Position); } var cameFrom = new Dictionary <Vector2, Vector2>(); foreach (var(from, to) in routeDebug.CameFrom) { var tileOneGrid = mapManager.GetGrid(from.GridIndex).GridTileToLocal(from.GridIndices); var tileOneWorld = mapManager.GetGrid(from.GridIndex).LocalToWorld(tileOneGrid).Position; var tileTwoGrid = mapManager.GetGrid(to.GridIndex).GridTileToLocal(to.GridIndices); var tileTwoWorld = mapManager.GetGrid(to.GridIndex).LocalToWorld(tileTwoGrid).Position; cameFrom.Add(tileOneWorld, tileTwoWorld); } var gScores = new Dictionary <Vector2, float>(); foreach (var(tile, score) in routeDebug.GScores) { var tileGrid = mapManager.GetGrid(tile.GridIndex).GridTileToLocal(tile.GridIndices); gScores.Add(mapManager.GetGrid(tile.GridIndex).LocalToWorld(tileGrid).Position, score); } var closedTiles = new List <Vector2>(); foreach (var tile in routeDebug.ClosedTiles) { var tileGrid = mapManager.GetGrid(tile.GridIndex).GridTileToLocal(tile.GridIndices); closedTiles.Add(mapManager.GetGrid(tile.GridIndex).LocalToWorld(tileGrid).Position); } var systemMessage = new SharedAiDebug.AStarRouteMessage( routeDebug.EntityUid, route, cameFrom, gScores, closedTiles, routeDebug.TimeTaken ); EntityManager.EntityNetManager.SendSystemNetworkMessage(systemMessage); }
private void HandleAStarRouteMessage(SharedAiDebug.AStarRouteMessage message) { if ((_modes & PathfindingDebugMode.Nodes) != 0 || (_modes & PathfindingDebugMode.Route) != 0) { _overlay.AStarRoutes.Add(message); Timer.Spawn(TimeSpan.FromSeconds(_routeDuration), () => { if (_overlay == null) { return; } _overlay.AStarRoutes.Remove(message); }); } }
private void DispatchAStarDebug(SharedAiDebug.AStarRouteDebug routeDebug) { var mapManager = IoCManager.Resolve <IMapManager>(); var route = new List <Vector2>(); foreach (var tile in routeDebug.Route) { var tileGrid = mapManager.GetGrid(tile.GridIndex).GridTileToLocal(tile.GridIndices); route.Add(tileGrid.ToMapPos(EntityManager)); } var cameFrom = new Dictionary <Vector2, Vector2>(); foreach (var(from, to) in routeDebug.CameFrom) { var tileOneGrid = mapManager.GetGrid(from.GridIndex).GridTileToLocal(from.GridIndices); var tileOneWorld = tileOneGrid.ToMapPos(EntityManager); var tileTwoGrid = mapManager.GetGrid(to.GridIndex).GridTileToLocal(to.GridIndices); var tileTwoWorld = tileTwoGrid.ToMapPos(EntityManager); cameFrom[tileOneWorld] = tileTwoWorld; } var gScores = new Dictionary <Vector2, float>(); foreach (var(tile, score) in routeDebug.GScores) { var tileGrid = mapManager.GetGrid(tile.GridIndex).GridTileToLocal(tile.GridIndices); gScores[tileGrid.ToMapPos(EntityManager)] = score; } var systemMessage = new SharedAiDebug.AStarRouteMessage( routeDebug.EntityUid, route, cameFrom, gScores, routeDebug.TimeTaken ); RaiseNetworkEvent(systemMessage); }