//void OnDrawGizmosSelected()
        //{
        //    Gizmos.DrawSphere(transform.position, circleRangeForDetection);

        //}
        //update the block pos here
        public override void UpdateMovementState(bool isPrimaryMoveActive, bool isSecondaryMoveActive)
        {
            if (isPhysicsControlled)
            {
                return;
            }
            if (isPushed)
            {
                return;
            }
            if (isPetrified)
            {
                return;
            }
            if (isMovementFreezed)
            {
                return;
            }
            if (!isPrimaryMoveActive && !isSecondaryMoveActive)
            {
                if (waitingForNextActionToCheckForPath.isWaitingForNextActionCheck)
                {
                    waitingForNextActionToCheckForPath.Perform();
                    return;
                }
                if (completedMotionToMovePoint)
                {
                    if (IsActorOnArrows())
                    {
                        if (GridManager.instance.IsCellContainingUpArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Up);
                        }
                        else if (GridManager.instance.IsCellContainingDownArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Down);
                        }
                        else if (GridManager.instance.IsCellContainingLeftArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Left);
                        }
                        else if (GridManager.instance.IsCellContainingRightArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Right);
                        }
                    }
                    else if (IsActorOnMirror())
                    {
                        if (GridManager.instance.IsCellBlockedForUnitMotionAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) || (GridManager.instance.HasPetrifiedObject(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) && GridManager.instance.IsCellContainingPushedMonsterOnCell(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)), this)))
                        {
                            currentMapper = wandererMapper;
                            CheckSwitchCellIndex();
                            currentMapper = new OneDNonCheckingMapper(Facing);
                            return;
                        }
                        else
                        {
                            currentMapper = new OneDNonCheckingMapper(Facing);
                        }
                    }
                    else
                    {
                        currentMapper = wandererMapper;
                    }
                    CheckSwitchCellIndex();
                }
            }
        }
        //update the block pos here
        public override void UpdateMovementState(bool isPrimaryMoveActive, bool isSecondaryMoveActive)
        {
            if (isPhysicsControlled)
            {
                return;
            }
            if (isPushed)
            {
                return;
            }
            if (isPetrified)
            {
                return;
            }
            if (isMovementFreezed)
            {
                return;
            }
            if (!isPrimaryMoveActive && !isSecondaryMoveActive)
            {
                inLineRange = senseInLineAction.Perform();
                heroToChase = senseInLineAction.heroInLineOfAction;
                if (!followingTarget)
                {
                    if (followingTarget != inLineRange)
                    {
                        //Triggered ai motion
                        if (ie != null)
                        {
                            StopCoroutine(ie);
                        }
                        ie = PrepareToDashCor();
                        StartCoroutine(ie);
                    }
                    //normal aimless wanderer
                }
                else
                {
                    if ((IsActorOnArrows() || IsActorOnMirror()))
                    {
                        FinishDash();
                    }
                }
                if (waitingForNextActionToCheckForPath.isWaitingForNextActionCheck)
                {
                    waitingForNextActionToCheckForPath.Perform();
                    return;
                }

                if (currentMapper is DashMapper dashMap)
                {
                    if (dashMap.IsDashComplete())
                    {
                        FinishDash();
                        currentMovePointCellPosition = previousMovePointCellPosition;
                        return;
                    }

                    if (completedMotionToMovePoint && !inLineRange)
                    {
                        FinishDash();
                        currentMovePointCellPosition = previousMovePointCellPosition;
                        return;
                    }
                }
                if (completedMotionToMovePoint && !isPreparingToDash)
                {
                    if (IsActorOnArrows())
                    {
                        if (GridManager.instance.IsCellContainingUpArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Up);
                        }
                        else if (GridManager.instance.IsCellContainingDownArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Down);
                        }
                        else if (GridManager.instance.IsCellContainingLeftArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Left);
                        }
                        else if (GridManager.instance.IsCellContainingRightArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Right);
                        }
                    }
                    else if (IsActorOnMirror())
                    {
                        if (GridManager.instance.IsCellBlockedForUnitMotionAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) || (GridManager.instance.HasPetrifiedObject(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) && GridManager.instance.IsCellContainingPushedMonsterOnCell(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)), this)))
                        {
                            currentMapper = wandererMapper;
                            CheckSwitchCellIndex();
                            currentMapper = new OneDNonCheckingMapper(Facing);
                            return;
                        }
                        else
                        {
                            currentMapper = new OneDNonCheckingMapper(Facing);
                        }
                    }
                    else
                    {
                        if (currentMapper is OneDNonCheckingMapper)
                        {
                            FinishDash();
                        }
                    }
                    CheckSwitchCellIndex();
                }
            }
        }
        //void OnDrawGizmosSelected()
        //{
        //    Gizmos.DrawSphere(transform.position, circleRangeForDetection);

        //}
        //update the block pos here
        public override void UpdateMovementState(bool isPrimaryMoveActive, bool isSecondaryMoveActive)
        {
            if (isPhysicsControlled)
            {
                return;
            }
            if (isPushed)
            {
                return;
            }
            if (isPetrified)
            {
                return;
            }
            if (isMovementFreezed)
            {
                return;
            }

            if (!isPrimaryMoveActive && !isSecondaryMoveActive)
            {
                if (!waitForPathFindingToWearOff.Perform())
                {
                    inLineRange = senseInLineAction.Perform();
                    heroToChase = senseInLineAction.heroInLineOfAction;
                    if (!followingTarget)
                    {
                        if (followingTarget != inLineRange)
                        {
                            //Triggered ai motion
                            currentMapper   = null;
                            currentMapper   = pathfindingMapper;
                            followingTarget = true;
                        }
                        //normal aimless wanderer
                    }
                    else
                    {
                        if (!senseInCircleAction.Perform() || (IsActorOnArrows() || IsActorOnMirror()))
                        {
                            FinishFollowing();
                        }
                    }

                    if (waitingForNextActionToCheckForPath.isWaitingForNextActionCheck)
                    {
                        waitingForNextActionToCheckForPath.Perform();
                        return;
                    }
                }
                else
                {
                    if (waitingForNextActionToCheckForPath.isWaitingForNextActionCheck)
                    {
                        waitingForNextActionToCheckForPath.CompleteTimer();
                    }
                }
                if (completedMotionToMovePoint)
                {
                    if (IsActorOnArrows())
                    {
                        if (GridManager.instance.IsCellContainingUpArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Up);
                        }
                        else if (GridManager.instance.IsCellContainingDownArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Down);
                        }
                        else if (GridManager.instance.IsCellContainingLeftArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Left);
                        }
                        else if (GridManager.instance.IsCellContainingRightArrowAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position)))
                        {
                            currentMapper = new OneDNonCheckingMapper(FaceDirection.Right);
                        }
                    }
                    else if (IsActorOnMirror())
                    {
                        if (GridManager.instance.IsCellBlockedForUnitMotionAtPos(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) || (GridManager.instance.HasPetrifiedObject(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing))) && GridManager.instance.IsCellContainingPushedMonsterOnCell(GridManager.instance.grid.WorldToCell(actorTransform.position + GridManager.instance.GetFacingDirectionOffsetVector3(Facing)), this)))
                        {
                            currentMapper = wandererMapper;
                            CheckSwitchCellIndex();
                            currentMapper = new OneDNonCheckingMapper(Facing);
                            return;
                        }
                        else
                        {
                            currentMapper = new OneDNonCheckingMapper(Facing);
                        }
                    }
                    else
                    {
                        currentMapper = wandererMapper;
                    }
                    CheckSwitchCellIndex();
                }
            }
        }