JobHandle ProcessViewEntities(bool mapRegenerated, DynamicBuffer <MapTiles> map, MapData mapData, JobHandle inputDeps) { // Process Entities with only a view and no memory return(Entities .WithReadOnly(map) .WithChangeFilter <Position>() .WithNone <TilesInMemory>() .ForEach((ref DynamicBuffer <TilesInView> view, in Position pos, in ViewRange range) => { if (view.Length != map.Length || mapRegenerated) { view.ResizeUninitialized(map.Length); } // Always reset view before rebuilding for (int i = 0; i < view.Length; ++i) { view[i] = false; } var visibility = new VisibilityMap( mapData.width, mapData.height, map.Reinterpret <TileType>().AsNativeArray(), view.Reinterpret <bool>().AsNativeArray() ); FOV.Compute(pos, range, visibility); }).Schedule(inputDeps));
public void ViewshedContainsNoDuplicates() { var map = new TestMap(20, 20, Allocator.TempJob, new int2(1, 1), new int2(2, 1)); FOV.Compute(0, 5, map); var points = map.visiblePoints; Assert.AreEqual(points.Length, points.ToArray().Distinct().ToArray().Length); map.Dispose(); }
public void TestFOV() { var map = new TestMap(20, 20, Allocator.TempJob, new int2(1, 1), new int2(2, 1)); FOV.Compute(0, 5, map); var points = map.visiblePoints; Assert.False(points.Contains(new int2(3, 3))); Assert.True(points.Contains(new int2(2, 1))); //Assert.True(points.Contains(new int2(1, 1))); map.Dispose(); }
private void Update() { var fovPos = WorldToConsolePos(transform.position); _testMap.visiblePoints.Clear(); //var points = FOV.GetVisiblePoints(fovPos, _range, _testMap, Allocator.Temp).ToNativeArray(); FOV.Compute(fovPos, _range, _testMap); _console.ClearScreen(); foreach (var p in _testMap.visiblePoints) { char ch = _testMap.IsOpaque(p) ? '#' : '.'; _console.Set(p.x, p.y, Color.white, Color.black, CodePage437.ToCP437(ch)); } }
protected override JobHandle OnUpdate(JobHandle inputDeps) { if (_FOVQuery.CalculateEntityCount() == 0) { return(inputDeps); } var mapEntity = _mapQuery.GetSingletonEntity(); var map = EntityManager.GetBuffer <MapTiles>(mapEntity); var mapData = EntityManager.GetComponentData <MapData>(mapEntity); var fovEntity = _FOVQuery.GetSingletonEntity(); int2 origin = EntityManager.GetComponentData <Position>(fovEntity); int range = EntityManager.GetComponentData <FOVRange>(fovEntity); DynamicBuffer <TilesInView> fovTiles = EntityManager.GetBuffer <TilesInView>(fovEntity); var visibilityMap = new VisibilityMap( mapData.width, mapData.height, map.Reinterpret <TileType>().AsNativeArray(), Allocator.TempJob); inputDeps = Job.WithCode(() => { FOV.Compute(origin, range, visibilityMap); fovTiles.Clear(); var visibleTiles = visibilityMap.visibleTiles; for (int i = 0; i < visibleTiles.Length; ++i) { fovTiles.Add(visibleTiles[i]); } }).Schedule(inputDeps); visibilityMap.Dispose(inputDeps); return(inputDeps); }
public void Execute() { FOV.Compute(origin, range, map); }
public void Execute() { FOV.Compute(Origin, Range, Map); }