Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
        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;
        }
Exemplo n.º 3
0
    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);
    }