public override PlanOfAction Think()
    {
        if (owner == null)
        {
            return(null);
        }
        // determine where the player is
        var player = board.Units.FirstOrDefault(unit => unit.Value is Hero).Value;

        SetLowestAbilityCost();
        SetAttackRange();
        if (ShouldWait(player))
        {
            return(null);
        }

        var tilesOnBoard = RangeUtil.SurveyBoard(owner.Position, owner.Board);
        var targetData   = FindTarget(tilesOnBoard, player);
        var tilesFromPlayerPerspective = RangeUtil.SurveyBoard(targetData.tile.Position, owner.Board);

        if (WithinShockwaveRange(tilesOnBoard, targetData))
        {
            return(CloseRangePlan(tilesOnBoard, targetData, tilesFromPlayerPerspective));
        }
        else
        {
            return(LongRangePlan(tilesOnBoard, targetData, tilesFromPlayerPerspective));
        }
    }
    public override PlanOfAction Think()
    {
        // determine where the player is
        var player = board.Units.FirstOrDefault(unit => unit.Value is Hero).Value;

        SetLowestAbilityCost();
        SetAttackRange();
        if (ShouldWait(player))
        {
            return(null);
        }

        var tilesOnBoard = RangeUtil.SurveyBoard(owner.Position, owner.Board);
        var targetData   = FindTarget(tilesOnBoard, player);
        var tilesFromPlayerPerspective = RangeUtil.SurveyBoard(targetData.tile.Position, owner.Board);

        // 1: if we are in range attack the player
        if (CanAttack(tilesOnBoard, targetData))
        {
            return(Attack(tilesOnBoard, targetData));
        }

        // 2: move towards player
        return(Move(tilesOnBoard, targetData, tilesFromPlayerPerspective));
    }
Esempio n. 3
0
        public void RangeOrCurrentLine1()
        {
            var view = EditorUtil.CreateView("foo");
            var res  = RangeUtil.RangeOrCurrentLine(view, FSharpOption <SnapshotLineRange> .None);

            Assert.AreEqual(view.GetLineRange(0), res);
        }
Esempio n. 4
0
        public void ApplyCount1()
        {
            Create("foo", "bar", "baz", "jaz");
            var first  = _textBuffer.GetLineRange(0);
            var second = RangeUtil.ApplyCount(2, first);

            Assert.AreEqual(_textBuffer.GetLineRange(0, 1), second);
        }
Esempio n. 5
0
        public void ApplyCount3()
        {
            Create("foo", "bar", "baz");
            var v1 = _textBuffer.GetLineRange(0);
            var v2 = RangeUtil.ApplyCount(2, v1);

            Assert.AreEqual(_textBuffer.GetLineRange(0, 1), v2);
        }
Esempio n. 6
0
        public void Apply_CountOfOne()
        {
            Create("cat", "dog", "rabbit", "tree");
            var v1 = _textBuffer.GetLineRange(0, 1);
            var v2 = RangeUtil.ApplyCount(1, v1);

            Assert.AreEqual(SnapshotLineRangeUtil.CreateForLine(_textBuffer.GetLine(1)), v2);
        }
Esempio n. 7
0
        public override void doResize(int rowcount)
        {
            Range range = getRange();

            //range.Fill.BackgroundColor = Color.White;

            dname.Range = RangeUtil.rangeResize(range, rowcount);
        }
        public void Enumerate_Byte_ZeroLength()
        {
            IEnumerable <byte> actual, expected;

            actual   = RangeUtil.Enumerate((byte)0, (byte)0);
            expected = new byte[] { 0 };

            Assert.Equal(expected, actual);
        }
Esempio n. 9
0
        private void Create(params string[] lines)
        {
            _textView   = CreateTextView(lines);
            _textBuffer = _textView.TextBuffer;
            var vimBufferData = CreateVimBufferData(_textView);

            _vimTextBuffer = vimBufferData.VimTextBuffer;
            _rangeUtil     = new RangeUtil(vimBufferData);
        }
Esempio n. 10
0
        public void Enumerate_Byte_Down()
        {
            IEnumerable <byte> actual, expected;

            actual   = RangeUtil.Enumerate((byte)5, (byte)0);
            expected = new byte[] { 5, 4, 3, 2, 1, 0 };

            Assert.Equal(expected, actual);
        }
Esempio n. 11
0
        public void RangeOrCurrentLine2()
        {
            Create("foo", "bar");
            var mock  = new Moq.Mock <ITextView>(Moq.MockBehavior.Strict);
            var range = _textBuffer.GetLineRange(0);
            var res   = RangeUtil.RangeOrCurrentLine(mock.Object, FSharpOption <SnapshotLineRange> .Some(range));

            Assert.AreEqual(range, res);
        }
Esempio n. 12
0
 /// <summary>
 /// 指定したviewport座標がパネル範囲内に含まれる場合、true
 /// </summary>
 /// <param name="viewportPoint">Viewport point.</param>
 public bool Contains(Vector3 viewportPoint)
 {
     if (!RangeUtil.IsBetween(viewportPoint.x, leftX, leftX + width))
     {
         return(false);
     }
     if (!RangeUtil.IsBetween(viewportPoint.y, bottomY, bottomY + height))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 13
0
 /// <summary>
 /// 指定した座標が経路途上に含まれるかを返します。
 /// </summary>
 /// <returns><c>true</c>, if path range was withined, <c>false</c> otherwise.</returns>
 /// <param name="position">Position.</param>
 public bool OnPathWay(Vector3 position)
 {
     if (!RangeUtil.IsBetween(position.x, Origin.x, Destination.x))
     {
         return(false);
     }
     if (!RangeUtil.IsBetween(position.y, Origin.y, Destination.y))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 14
0
        //根据当前选择点,判断选择区域
        public void setSelectedNamed()
        {
            if (app == null)
            {
                app       = new XApp(this.spreadsheetMain.Document, null);
                app.statu = SysStatu.SheetError;
            }
            AreasCollection areas = spreadsheetMain.Selection.Areas;

            /*if (currentXRange != null && RangeUtil.isInRange(areas, currentXRange.getRange()) < 0)
             * {
             *  this.currentXRange = null;
             * }*/
            this.currentXRange = null;
            rightClickBarManager.SetPopupContextMenu(spreadsheetMain, null);
            if (currentSheet != null && currentSheet.sheetName == "Config")
            {
                IList <Table> tables = spreadsheetMain.ActiveWorksheet.Tables.GetTables(spreadsheetMain.ActiveCell);
                if (tables.Count > 0 && tables[0].Name == "CFG_DATA")
                {
                    if (RangeUtil.isInRange(areas, tables[0].DataRange) >= 0)
                    {
                        rightClickBarManager.SetPopupContextMenu(spreadsheetMain, menus["CfgData"]);
                    }
                }
            }
            else if ((int)app.statu > 0)
            {
                XRSheet opSheet = app.getRSheetByName(spreadsheetMain.ActiveWorksheet.Name);
                //遍历当前Sheet全部命名区域,依次判断是否在区域范围内
                if (opSheet != null)
                {
                    foreach (var dicname in opSheet.ranges)
                    {
                        XRange xname = dicname.Value;
                        int    i     = xname.isInRange(areas);
                        if (i >= 0)
                        {
                            this.currentXRange = xname;
                            rightClickBarManager.SetPopupContextMenu(spreadsheetMain, menus["Normal"]);
                            //当选择点为命名区域时,将当前坐标写入单元格
                            //this.currentXRange.onMouseDown();
                            break;//如果判断到第一个区域,将该区域存储为currentXRange,退出循环判断
                        }
                    }
                }
                else
                {
                    currentXRange = null;
                }
            }
        }
Esempio n. 15
0
        public override int isInRange(Range range)
        {
            AreasCollection areas = getRange().Areas;

            foreach (Range irange in areas)
            {
                if (RangeUtil.isInRange(range, irange) > 0)
                {
                    return(1);
                }
            }
            return(-1);
        }
Esempio n. 16
0
        public void Enumerate_Byte_Up()
        {
            IEnumerable <byte> actual, expected;

            actual   = RangeUtil.Enumerate((byte)0, (byte)5);
            expected = new byte[] { 0, 1, 2, 3, 4, 5 };

            Assert.Equal(expected, actual);

            actual   = RangeUtil.Enumerate((byte)254, (byte)255);
            expected = new byte[] { 254, 255 };

            Assert.Equal(expected, actual);
        }
Esempio n. 17
0
    private List <PathfindingData> GetTilesInRange()
    {
        // return normal range if the area is a cleared mob room
        // or we are not using a movement ability
        bool useMovementAbility = abilityComponent.CurrentAbility is MovementAbility;

        if (!AreaStateHandler.AreaIsCleared(Owner.Board) || !useMovementAbility)
        {
            return(abilityComponent.GetTilesInRange());
        }

        // return all tiles if we are in a cleared room
        return(RangeUtil.SurveyBoard(Owner.Position, Owner.Board));
    }
Esempio n. 18
0
        public override void doResize(int rowcount)
        {
            if (rowcount == 1)
            {
                rowcount = 2;
            }
            if (!isFilled)
            {
                AlertUtil.Show("错误!", "Table" + Name + "需先查询才能Update");
                return;
            }
            Range range    = this.table.Range;
            Range newrange = RangeUtil.rangeResize(range, rowcount);

            changeDefinedRange(newrange);
        }
Esempio n. 19
0
    private void HandleIndicator(List <PathfindingData> tilesInRange, Point mousePosition)
    {
        var selectedTile = Owner.Board.TileAt(mousePosition);
        var isValid      = tilesInRange.Exists(data => data.tile == selectedTile);

        // tile is not valid or already is highlighted, return
        if (!isValid)
        {
            return;
        }

        if (abilityComponent.CurrentAbility.AreaOfEffect > 0)
        {
            var aoeRange       = RangeUtil.GetAoERangeFromMousePosition(mousePosition, abilityComponent.CurrentAbility);
            var curFrameCenter = aoeRange.Find(data => data.shadow.distance == 0).tile;
            if (curFrameCenter == AoECenter)
            {
                return;
            }
            else
            {
                CleanIndicator();
                aoeRange.ForEach(data => {
                    if (data.shadow.distance == 0)
                    {
                        AoECenter = data.tile;
                    }
                    indicatorList.Add(data.tile);
                });
            }
        }
        else
        {
            if (indicatorList.Contains(selectedTile))
            {
                return;
            }
            CleanIndicator();
            indicatorList.Add(selectedTile);
        }
        BoardVisuals.AddIndicator(Owner, indicatorList);
    }
Esempio n. 20
0
    public override PlanOfAction Think()
    {
        // determine where the player is
        var player = board.Units.FirstOrDefault(unit => unit.Value is Hero).Value;

        if (ShouldWait(player))
        {
            return(null);
        }

        SetLowestAbilityCost();

        var tilesOnBoard = RangeUtil.SurveyBoard(owner.Position, owner.Board);
        var targetData   = FindTarget(tilesOnBoard, player);
        var tilesFromPlayerPerspective = RangeUtil.SurveyBoard(targetData.tile.Position, owner.Board);

        // 1: if too close, move away from player

        if (WeAreTooClose(tilesOnBoard, targetData))
        {
            return(Move(tilesOnBoard, targetData, tilesFromPlayerPerspective, true));
        }
        // 2: attack player
        if (WeOccupyTheSameAxis(tilesOnBoard, targetData))
        {
            if (ThereAreNoObstacles(tilesOnBoard, targetData))
            {
                return(Attack(tilesOnBoard, targetData, tilesFromPlayerPerspective));
            }
            else
            {
                return(Move(tilesOnBoard, targetData, tilesFromPlayerPerspective, false, false));
            }
        }
        // 3: move towards player
        return(Move(tilesOnBoard, targetData, tilesFromPlayerPerspective, false));
    }
Esempio n. 21
0
        /// <summary>
        /// 尝试从字符串<paramref name="formula"/>中位置<paramref name="index"/>的位置开始构建区间
        /// </summary>
        /// <param name="formula"></param>
        /// <param name="index"></param>
        /// <param name="expressionStack"></param>
        /// <returns>返回新的位置index,如果返回的位置与传入的相同则表示没有获取到</returns>
        private static int TryRangeBuild(string formula, int index, Stack <Expression> expressionStack)
        {
            if (!(formula[index] == '(' || formula[index] == '['))
            {
                return(index);
            }

            var endIndex = Int32.MaxValue;

            var findIndex = formula.IndexOf(')', index);

            if (findIndex > 0)
            {
                endIndex = Math.Min(endIndex, findIndex);
            }

            findIndex = formula.IndexOf(')', index);
            if (findIndex > 0)
            {
                endIndex = Math.Min(endIndex, findIndex);
            }

            if (endIndex == Int32.MaxValue)
            {
                return(index);
            }

            var range = formula.Substring(index, endIndex - index + 1);

            if (RangeUtil.IsRange(range))
            {
                expressionStack.Push(RangeConstant(range));
                return(endIndex + 1);
            }

            return(index);
        }
Esempio n. 22
0
 /// <summary>
 /// 指定したステップでステージをクリアしたかどうか判定します。
 /// </summary>
 /// <returns><c>true</c> if this instance is stage cleared the specified currentStepIndex; otherwise, <c>false</c>.</returns>
 /// <param name="stage">Stage.</param>
 /// <param name="currentStepIndex">Current step index.</param>
 /// <see cref="StageManager.IsStageCleared"/>
 protected bool IsStageCleared(StageInfo stage, int currentStepIndex)
 {
     return(!RangeUtil.IsBetween(GetRealStepIndex(stage, currentStepIndex), 0, stage.stepInfos.Count - 1));
 }
Esempio n. 23
0
 private ParseRangeResult CaptureComplete(ITextSnapshotLine line, string input, IMarkMap map = null)
 {
     map = map ?? new MarkMap(new TrackingLineColumnService());
     return(RangeUtil.ParseRange(line, map, ListModule.OfSeq(input)));
 }
Esempio n. 24
0
 public override string ToString()
 {
     return(string.IsNullOrEmpty(this.Name)? RangeUtil.GetColumnName(this.columnIndex):this.Name);
 }
Esempio n. 25
0
        public override ResultExpression Invoke(Parameters parameters)
        {
            if (Type == ExpressionType.Add)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                double           result      = leftResult.NumberResult + rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Subtract)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                double           result      = leftResult.NumberResult - rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Multiply)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                double           result      = leftResult.NumberResult * rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Divide)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                double           result      = leftResult.NumberResult / rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Greater)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.NumberResult > rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.GreaterEqual)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.NumberResult >= rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Less)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.NumberResult < rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.LessEqual)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.NumberResult <= rightResult.NumberResult;
                return(Result(result));
            }
            if (Type == ExpressionType.Equal)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);

                if (leftResult.IsNumber() && rightResult.IsNumber())
                {
                    bool result = ExpressionSetting.Instance.AreEquals(leftResult.NumberResult, rightResult.NumberResult);
                    return(Result(result));
                }
                else if (leftResult.IsNumber() && rightResult.DataType == ResultType.Range)
                {
                    bool result = RangeUtil.IsInRange(leftResult.NumberResult, rightResult.Data.ToString());
                    return(Result(result));
                }
                else
                {
                    bool result = leftResult.Data == rightResult.Data;
                    return(Result(result));
                }
            }
            if (Type == ExpressionType.NotEqual)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);

                if (leftResult.IsNumber() && rightResult.IsNumber())
                {
                    bool result = !ExpressionSetting.Instance.AreEquals(leftResult.NumberResult, rightResult.NumberResult);
                    return(Result(result));
                }
                else if (leftResult.IsNumber() && rightResult.DataType == ResultType.Range)
                {
                    bool result = !RangeUtil.IsInRange(leftResult.NumberResult, rightResult.Data.ToString());
                    return(Result(result));
                }
                else
                {
                    bool result = leftResult.Data != rightResult.Data;
                    return(Result(result));
                }
            }

            if (Type == ExpressionType.Power)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                double           result      = Math.Pow(leftResult.NumberResult, rightResult.NumberResult);
                return(Result(result));
            }

            if (Type == ExpressionType.Modulo)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                int result = (int)leftResult.NumberResult % (int)rightResult.NumberResult;
                return(Result(result));
            }

            if (Type == ExpressionType.BooleanAnd)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.BooleanResult && rightResult.BooleanResult;
                return(Result(result));
            }

            if (Type == ExpressionType.BooleanOr)
            {
                ResultExpression leftResult  = Left.Invoke(parameters);
                ResultExpression rightResult = Right.Invoke(parameters);
                bool             result      = leftResult.BooleanResult || rightResult.BooleanResult;
                return(Result(result));
            }
            return(null);
        }
Esempio n. 26
0
    /// <summary>
    /// ステージをクリアしたかどうか判定します。
    /// </summary>
    /// <returns><c>true</c> if this instance is stage cleared the specified currentStepIndex; otherwise, <c>false</c>.</returns>
    /// <param name="currentStepIndex">Current step index.</param>
    public bool IsStageCleared(int currentStepIndex)
    {
        StageInfo stage = GetCurrentStage();

        return(!RangeUtil.IsBetween(GetRealStepIndex(stage, currentStepIndex), 0, stage.stepInfos.Count - 1));
    }
Esempio n. 27
0
 //1:参数区域在本区域内;2:参数区域在本区域内,但包含表头;-1参数区域不在本区域内
 //range为鼠标选择区域
 public override int isInRange(Range range)
 {
     return(RangeUtil.isInRange(range, this.getRange()));
 }
Esempio n. 28
0
 private void Create(params string[] lines)
 {
     _textView = CreateTextView(lines);
     _textBuffer = _textView.TextBuffer;
     var vimBufferData = CreateVimBufferData(_textView);
     _vimTextBuffer = vimBufferData.VimTextBuffer;
     _rangeUtil = new RangeUtil(vimBufferData);
 }