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); } }
public override bool IsPossible(MoveToRequested m) => m.To.InBetween(m.From).Count == 1 && map.IsJumpable(m.To.InBetween(m.From)[0]);
public override bool IsPossible(MoveToRequested m) => m.Delta.IsCardinal() && m.Delta.TotalMagnitude() == 3;
public abstract bool IsPossible(MoveToRequested m);
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);