public TankAction[] GetTankActionsFromTankToAttackTankAtPointAlongDirectionOfMovement( int playerIndex, int tankNumber, Point targetPoint, Direction finalMovementDir, EdgeOffset[] edgeOffsets, bool keepMovingCloserOnFiringLastBullet) { Tank tank = Game.Current.Players[playerIndex].Tanks[tankNumber]; MobileState tankState = GameState.GetMobileState(tank.Index); TurnCalculationCache turnCalcCache = Game.Current.Turns[GameState.Tick].CalculationCache; Cell targetCell = turnCalcCache.CellMatrix[targetPoint]; FiringLineMatrix firingLinesForTanksMatrix = GameState.CalculationCache.FiringLinesForTanksMatrix; AttackTargetDistanceCalculator attackCalculator = new AttackTargetDistanceCalculator( ElementType.TANK, firingLinesForTanksMatrix, GameState.CalculationCache, turnCalcCache); attackCalculator.MovementDirections = new Direction[] { finalMovementDir }; attackCalculator.EdgeOffsets = edgeOffsets; CombinedMovementAndFiringDistanceCalculation combinedDistCalc = attackCalculator.GetShortestAttackDistanceFromCurrentTankPosition(tank.Index, targetCell); return(PathCalculator.GetTanksActionsOnOutgoingShortestAttackPathFromCurrentTankPosition( tank.Index, combinedDistCalc, GameState.CalculationCache, keepMovingCloserOnFiringLastBullet)); /* was: * DirectionalMatrix<DistanceCalculation> incomingDistanceMatrix * = attackCalculator.CalculateMatrixOfShortestDistancesToTargetCell(targetCell); * DistanceCalculation distanceCalc = incomingDistanceMatrix[tankState]; * return PathCalculator.GetTankActionsOnIncomingShortestPath(incomingDistanceMatrix, tankState.Dir, tankState.Pos.X, tankState.Pos.Y, * targetPoint.X, targetPoint.Y, firingLinesForTanksMatrix, keepMovingCloserOnFiringLastBullet); */ }
public int GetAttackDistanceFromTankToTankAtPointAlongDirectionOfMovement( int playerIndex, int tankNumber, Point targetPoint, Direction finalMovementDir, EdgeOffset[] edgeOffsets) { Tank tank = Game.Current.Players[playerIndex].Tanks[tankNumber]; MobileState tankState = GameState.GetMobileState(tank.Index); TurnCalculationCache turnCalcCache = Game.Current.Turns[GameState.Tick].CalculationCache; Cell targetCell = turnCalcCache.CellMatrix[targetPoint]; FiringLineMatrix firingLinesForTanksMatrix = GameState.CalculationCache.FiringLinesForTanksMatrix; AttackTargetDistanceCalculator attackCalculator = new AttackTargetDistanceCalculator( ElementType.TANK, firingLinesForTanksMatrix, GameState.CalculationCache, turnCalcCache); attackCalculator.MovementDirections = new Direction[] { finalMovementDir }; attackCalculator.EdgeOffsets = edgeOffsets; CombinedMovementAndFiringDistanceCalculation combinedDistCalc = attackCalculator.GetShortestAttackDistanceFromCurrentTankPosition(tank.Index, targetCell); if (combinedDistCalc == null) { return(Constants.UNREACHABLE_DISTANCE); } else { return(combinedDistCalc.TicksTillTargetShot); } /* was: * DirectionalMatrix<DistanceCalculation> incomingDistanceMatrix * = attackCalculator.CalculateMatrixOfShortestDistancesToTargetCell(targetCell); * DistanceCalculation distanceCalc = incomingDistanceMatrix[tankState]; * return distanceCalc.Distance; */ }
public int GetAttackDistanceFromTankToHypotheticalTankAtPoint( int playerIndex, int tankNumber, Point targetTankPoint, EdgeOffset[] edgeOffsets) { Tank tank = Game.Current.Players[playerIndex].Tanks[tankNumber]; MobileState tankState = GameState.GetMobileState(tank.Index); TurnCalculationCache turnCalcCache = Game.Current.Turns[GameState.Tick].CalculationCache; Cell targetCell = turnCalcCache.CellMatrix[targetTankPoint]; FiringLineMatrix firingLinesForTanksMatrix = GameState.CalculationCache.FiringLinesForTanksMatrix; AttackTargetDistanceCalculator attackCalculator = new AttackTargetDistanceCalculator( ElementType.TANK, firingLinesForTanksMatrix, GameState.CalculationCache, turnCalcCache); attackCalculator.MovementDirections = BoardHelper.AllRealDirections; attackCalculator.EdgeOffsets = edgeOffsets; CombinedMovementAndFiringDistanceCalculation combinedDistCalc = attackCalculator.GetShortestAttackDistanceFromCurrentTankPosition(tank.Index, targetCell); return(combinedDistCalc.TicksTillTargetShot); }