protected override List <IUnitController> CheckHit(List <HexEntry> recentPath) { if (recentPath.Count < 2) { return(new List <IUnitController>()); } HexEntry current = recentPath[recentPath.Count - 1]; HexEntry last = recentPath[recentPath.Count - 2]; Vector2 displacement = current.BoardPos - last.BoardPos; Vector2 targetPos1 = current.BoardPos + HexVectorUtil.RotateClockwise(displacement); Vector2 targetPos2 = current.BoardPos + HexVectorUtil.RotateCounterclockwise(displacement); List <IUnitController> results = new List <IUnitController>(); if (scenarioLoader.HexGrid.ContainsKey(targetPos1)) { results.Add(scenarioLoader.HexGrid[targetPos1].SimOccupant); } if (scenarioLoader.HexGrid.ContainsKey(targetPos2)) { results.Add(scenarioLoader.HexGrid[targetPos2].SimOccupant); } return(results); }
protected override List <IUnitController> CheckHit(List <HexEntry> recentPath) { if (recentPath.Count < 2) { return(new List <IUnitController>()); } HexEntry current = recentPath[recentPath.Count - 1]; HexEntry last = recentPath[recentPath.Count - 2]; Vector2 displacement = current.BoardPos - last.BoardPos; List <Vector2> targetPositions = new List <Vector2>(); targetPositions.Add(current.BoardPos + displacement); targetPositions.Add(current.BoardPos + HexVectorUtil.RotateClockwise(displacement)); targetPositions.Add(current.BoardPos + HexVectorUtil.RotateClockwise(HexVectorUtil.RotateClockwise(displacement))); targetPositions.Add(current.BoardPos + HexVectorUtil.RotateCounterclockwise(displacement)); targetPositions.Add(current.BoardPos + HexVectorUtil.RotateCounterclockwise(HexVectorUtil.RotateCounterclockwise(displacement))); /* // For some unknowable reason this implementation doesn't work right * // The unit tries to attack itself I guess (includes current position)? * // But the behavior it creates depends on where you hover your mouse prior to clicking * List<Vector2> targetPositions = new List<Vector2>(); * foreach (Bearing b in Enum.GetValues(typeof(Bearing))) { * targetPositions.Add(current.BoardPos + HexVectorUtil.NeighborOffsetFromBearing(b)); * }*/ List <IUnitController> results = new List <IUnitController>(); foreach (Vector2 targetPos in targetPositions) { if (scenarioLoader.HexGrid.ContainsKey(targetPos)) { results.Add(scenarioLoader.HexGrid[targetPos].SimOccupant); } } return(results); }