mirror of
https://github.com/inf112-v20/Fiasko.git
synced 2025-06-27 11:44:42 +02:00
Made a laser function that fires all lasers
made a firealllasers function in roborallygame and added many support function in board to actually fire the lasers. added som of the needed tests.
This commit is contained in:
@ -46,6 +46,21 @@ public class Board {
|
||||
this.deadRobots = new ArrayList<>();
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires all lasers on the board and kills any robot that has taken to much damage after all lasers have fired.
|
||||
*/
|
||||
public void fireAllLasers(){
|
||||
List<BoardElementContainer<Wall>> listOfWallLasers = getPositionsOfWallOnBoard(WallType.WALL_LASER_SINGLE,
|
||||
WallType.WALL_LASER_DOUBLE);
|
||||
for (Robot robot:robots.values()) {
|
||||
fireOneRobotLaser(robot.getPosition(),robot.getFacingDirection());
|
||||
}
|
||||
for (BoardElementContainer<Wall> laser:listOfWallLasers) {
|
||||
fireOneWallLaser(laser);
|
||||
}
|
||||
killAllDeadRobot();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the height of the board
|
||||
* @return The height of the board
|
||||
@ -408,4 +423,74 @@ public class Board {
|
||||
}
|
||||
return objList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Kills all robots that has taken too much damage
|
||||
*/
|
||||
private void killAllDeadRobot(){
|
||||
for (Robot robot:robots.values()) {
|
||||
if(robot.getDamageTaken()>=10){
|
||||
killRobot(robot);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Fires one wall laser
|
||||
* @param laser the wall laser that is being fired
|
||||
*/
|
||||
private void fireOneWallLaser(BoardElementContainer<Wall> laser){
|
||||
Position hitPosition = lineForTheLaser(Direction.getReverseDirection(laser.getElement().getDirection()),laser.getPosition());
|
||||
if(getRobotOnPosition(hitPosition)!=null){
|
||||
laserDamage(laser.getElement().getWallType(),robots.get(getRobotOnPosition(hitPosition)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* fires on robot laser
|
||||
* @param robotPosition the position of the robot firing the laser
|
||||
* @param robotDirection the direction the robot is facing
|
||||
*/
|
||||
private void fireOneRobotLaser(Position robotPosition, Direction robotDirection){
|
||||
Position positionInFront = getNewPosition(robotPosition,robotDirection);
|
||||
|
||||
if(!isValidPosition(positionInFront)||robotMoveIsStoppedByWall(robotPosition,positionInFront,robotDirection)){
|
||||
return;
|
||||
}
|
||||
Position hitPosition = lineForTheLaser(robotDirection,positionInFront);
|
||||
if(getRobotOnPosition(hitPosition)!=null){
|
||||
laserDamage(WallType.WALL_LASER_SINGLE,robots.get(getRobotOnPosition(hitPosition)));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies the damage form the laser to the robot the laser hit
|
||||
* @param laserType the type of laser that hit the robot
|
||||
* @param robot the robot getting hit by the robot
|
||||
*/
|
||||
private void laserDamage(WallType laserType, Robot robot){
|
||||
robot.setDamageTaken(robot.getDamageTaken()+laserType.getWallTypeID()-2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Position of where the laser hits something
|
||||
* @param direction the direction of the laser
|
||||
* @param startPosition the start positon of the laser
|
||||
* @return the position of the element that stopped the laser
|
||||
*/
|
||||
private Position lineForTheLaser(Direction direction, Position startPosition){
|
||||
Position newPosition = getNewPosition(startPosition,direction);
|
||||
if(!isValidPosition(newPosition) || robotMoveIsStoppedByWall(startPosition,newPosition,direction)){
|
||||
return startPosition;
|
||||
}
|
||||
else if(getRobotOnPosition(newPosition)!=null){
|
||||
return newPosition;
|
||||
}
|
||||
else{
|
||||
return lineForTheLaser(direction,newPosition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -1,10 +1,6 @@
|
||||
package inf112.fiasko.roborally.objects;
|
||||
|
||||
import inf112.fiasko.roborally.element_properties.Action;
|
||||
import inf112.fiasko.roborally.element_properties.Direction;
|
||||
import inf112.fiasko.roborally.element_properties.Position;
|
||||
import inf112.fiasko.roborally.element_properties.RobotID;
|
||||
import inf112.fiasko.roborally.element_properties.TileType;
|
||||
import inf112.fiasko.roborally.element_properties.*;
|
||||
import inf112.fiasko.roborally.utility.BoardLoaderUtil;
|
||||
|
||||
import java.io.IOException;
|
||||
@ -311,4 +307,8 @@ public class RoboRallyGame implements IDrawableGame {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fireAllLasers(){
|
||||
gameBoard.fireAllLasers();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user