private void Update() { Vector2 movement = Vector2.zero; float x = Input.GetAxisRaw(_horizontalAxe); float y = Input.GetAxisRaw(_verticalAxe); MoveDirection direction = GetMoveDirection(x, y); if (direction != MoveDirection.None) { DirectionSetting setting = settings[(int)direction]; float time = Time.unscaledTime; if (_prevDirection == direction) { bool allow = setting.oneShotOnly == false && time > _prevTime + 1f / setting.actionPerSeconds; if (!allow) { return; } } _prevTime = time; if (OnChangeDirection != null) { OnChangeDirection(direction); } } _prevDirection = direction; }
public Settings() { Direction = new DirectionSetting(); Distance = new DistanceSetting(); Overlap = new OverlapSetting(); Touch = new TouchSetting(); Contain = new ContainSetting(); Equal = new EqualSetting(); Log = new LogSetting(); RsTreeSetting = new RTreeSetting(); RsTreeSetting.SmallM = 10; RsTreeSetting.BigM = 20; //Direction.PositiveOffset = 0.0001; //Direction.RaysPerSquareMeter = 300; //Distance.RoundToZero = 0.00001; //Distance.GlobalThreshold = 3; //Touch.PositiveOffset = 10; //Touch.NegativeOffsetAsRatio = 1; //Equal.GlobalThreshold = 0.50; //Equal.SamplePerSquareMeter = 10; }
public static bool PathExists(TileManager.Tile startTile, TileManager.Tile endTile, bool breakTooLong, int breakAfterTiles, WalkableSetting walkableSetting, DirectionSetting directionSetting) { PathfindingTile currentTile = new PathfindingTile(startTile, null, 0); List <PathfindingTile> frontier = new List <PathfindingTile>() { currentTile }; List <PathfindingTile> checkedTiles = new List <PathfindingTile>() { currentTile }; int breakCounter = 0; while (frontier.Count > 0) { currentTile = frontier[0]; frontier.RemoveAt(0); if (breakTooLong) { if (breakCounter >= breakAfterTiles) { break; } breakCounter += 1; } if (currentTile.tile == endTile) { return(true); } foreach (TileManager.Tile nTile in (directionSetting == DirectionSetting.Horizontal ? currentTile.tile.horizontalSurroundingTiles : (directionSetting == DirectionSetting.Diagonal ? currentTile.tile.diagonalSurroundingTiles : currentTile.tile.surroundingTiles))) { if (nTile != null && checkedTiles.Find(o => o.tile == nTile) == null && (walkableSetting == WalkableSetting.Walkable ? nTile.walkable : (walkableSetting != WalkableSetting.NonWalkable || !nTile.walkable))) { PathfindingTile pTile = new PathfindingTile(nTile, null, Vector2.Distance(nTile.obj.transform.position, endTile.obj.transform.position)); frontier.Add(pTile); checkedTiles.Add(pTile); } } frontier = frontier.OrderBy(o => o.cost).ToList(); } return(false); }