(Obstacle obstacle, Player players[], int numPlayers, int currentTurn, boolean inverted)
| 343 | } |
| 344 | |
| 345 | public void processRK4Range(Obstacle obstacle, Player players[], int numPlayers, int currentTurn, boolean inverted) |
| 346 | { |
| 347 | playersHit = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER]; |
| 348 | soldiersHit = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER]; |
| 349 | soldierHitPosition = new int[numPlayers*Constants.MAX_SOLDIERS_PER_PLAYER]; |
| 350 | numPlayersHit = 0; |
| 351 | |
| 352 | valuesX = new double[Constants.FUNC_MAX_STEPS]; |
| 353 | valuesY = new double[Constants.FUNC_MAX_STEPS]; |
| 354 | |
| 355 | double stepSize = Constants.STEP_SIZE; |
| 356 | |
| 357 | Soldier currentTurnSoldier = players[currentTurn].getCurrentTurnSoldier(); |
| 358 | |
| 359 | valuesX[0] = currentTurnSoldier.getX(); |
| 360 | valuesY[0] = currentTurnSoldier.getY(); |
| 361 | |
| 362 | if(inverted) |
| 363 | { |
| 364 | valuesX[0] = Constants.PLANE_LENGTH - valuesX[0]; |
| 365 | } |
| 366 | |
| 367 | valuesX[0] = (Constants.PLANE_GAME_LENGTH*(valuesX[0] - Constants.PLANE_LENGTH/2))/Constants.PLANE_LENGTH; |
| 368 | valuesY[0] = (Constants.PLANE_GAME_LENGTH*(-valuesY[0] + Constants.PLANE_HEIGHT/2))/Constants.PLANE_LENGTH; |
| 369 | |
| 370 | double gameCoordinateRadius = ((double)(Constants.PLANE_GAME_LENGTH*Constants.SOLDIER_RADIUS))/Constants.PLANE_LENGTH; |
| 371 | |
| 372 | fireAngle = getRK4StartAngle(valuesX[0], valuesY[0], gameCoordinateRadius); |
| 373 | |
| 374 | valuesX[0] = valuesX[0] + gameCoordinateRadius*Math.cos(fireAngle); |
| 375 | valuesY[0] = valuesY[0] + gameCoordinateRadius*Math.sin(fireAngle); |
| 376 | |
| 377 | |
| 378 | numSteps = Constants.FUNC_MAX_STEPS; |
| 379 | for(int i=1; i<Constants.FUNC_MAX_STEPS; i++) |
| 380 | { |
| 381 | double tempStepSize = stepSize; |
| 382 | |
| 383 | double k1 = polishFunc.evaluateFunction( valuesX[i-1], valuesY[i-1], 0); |
| 384 | double k2 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k1, 0); |
| 385 | double k3 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k2, 0); |
| 386 | double k4 = polishFunc.evaluateFunction( valuesX[i-1] + tempStepSize, valuesY[i-1] + tempStepSize*k3, 0); |
| 387 | |
| 388 | valuesY[i] = valuesY[i-1] + (tempStepSize/6)*(k1 + 2*k2 + 2*k3 + k4); |
| 389 | valuesX[i] = valuesX[i-1] + tempStepSize; |
| 390 | |
| 391 | boolean endFunc = false; |
| 392 | |
| 393 | for(int j=0; Math.pow(valuesX[i]-valuesX[i-1], 2)+Math.pow(valuesY[i]-valuesY[i-1], 2) > Constants.FUNC_MAX_STEP_DISTANCE_SQUARED && valuesX[i]-valuesX[i-1]>Constants.FUNC_MIN_X_STEP_DISTANCE;j++) |
| 394 | { |
| 395 | if(valuesX[i]-valuesX[i-1]>Constants.FUNC_MIN_X_STEP_DISTANCE) |
| 396 | { |
| 397 | tempStepSize = tempStepSize/2; |
| 398 | |
| 399 | k1 = polishFunc.evaluateFunction( valuesX[i-1], valuesY[i-1], 0); |
| 400 | k2 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k1, 0); |
| 401 | k3 = polishFunc.evaluateFunction( valuesX[i-1] + 0.5*tempStepSize, valuesY[i-1] + 0.5*tempStepSize*k2, 0); |
| 402 | k4 = polishFunc.evaluateFunction( valuesX[i-1] + tempStepSize, valuesY[i-1] + tempStepSize*k3, 0); |
no test coverage detected