private void UpdateHints()
    {
        HideAllHints();

        if (!piece.Selected.IsPresent)
        {
            return;
        }

        var obj      = piece.Selected.Value;
        var movement = obj.GetComponent <MovementEnabled>();

        if (movement == null)
        {
            return;
        }

        var sourceTile       = new TilePoint(piece.Selected.Value);
        var movableLocations = map.Walkables
                               .Select(w => new TilePoint(w))
                               .Where(tile =>
        {
            var simpleMove        = new MoveToRequested(obj, sourceTile, tile);
            var possibleMoveTypes = map.MovementOptions
                                    .Where(r => movement.Types.Contains(r.Type))
                                    .Where(r => r.IsPossible(simpleMove))
                                    .Select(m => m.Type)
                                    .ToList();

            if (possibleMoveTypes.None())
            {
                return(false);
            }

            var typedMoves = possibleMoveTypes.Select(p => new MovementProposed(p, obj, sourceTile, tile));
            return(typedMoves.Any(t => map.MovementRestrictions.All(r => r.IsValid(t))));
        })
                               .Distinct()
                               .ToArray();

        //Debug.Log($"{movableLocations.Length} Possible Moves for {obj.name}");
        for (var i = 0; i < movableLocations.Length; i++)
        {
            _hints[i].transform.SetParent(currentLevel.Transform);
            _hints[i].transform.localPosition = new Vector3(movableLocations[i].X, movableLocations[i].Y, 0);
            _hints[i].transform.localRotation = Quaternion.identity;
            _hints[i].transform.parent        = transform;
            _hints[i].SetActive(true);
        }
    }
Exemplo n.º 2
0
 public override bool IsPossible(MoveToRequested m) => m.To.InBetween(m.From).Count == 1 && map.IsJumpable(m.To.InBetween(m.From)[0]);
Exemplo n.º 3
0
 public override bool IsPossible(MoveToRequested m) => m.Delta.IsCardinal() && m.Delta.TotalMagnitude() == 3;
 public abstract bool IsPossible(MoveToRequested m);
Exemplo n.º 5
0
 public override bool IsPossible(MoveToRequested m) => (m.Delta.X == 0 && Math.Abs(m.Delta.Y) == 1) || (Math.Abs(m.Delta.X) == 1 && m.Delta.Y == 0);