Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package it.polimi.se2019.model.optionalEffectWeapon;
- import it.polimi.se2019.controller.OptionalEffectWeaponManager;
- import it.polimi.se2019.controller.TurnManager;
- import it.polimi.se2019.controller.WeaponManagerStatus;
- import it.polimi.se2019.model.*;
- import it.polimi.se2019.view.VirtualView;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- public class GrenadeLauncher extends OptionalEffectWeapon {
- private Player targetPlayer;
- private Player currentPlayer;
- private ArrayList<Player> multipleTargets;
- private ArrayList<Player> playerICanSee;
- private Square firstTargetSquare;
- private Square optionalTargetSquare;
- private boolean optionalEffect;
- private boolean beforeMovement;
- private List<Player> damagedPlayers;
- public GrenadeLauncher(String weaponName, ArrayList<Cube> costToBuy, ArrayList<Cube> costToReload, boolean loadedWeapon, ArrayList<Cube> optionalCost, ArrayList<Cube> furtherOptionalCost) {
- super("GRENADELAUNCHER", null, (new ArrayList<Cube>(Arrays.asList(new Cube(GameColor.RED)))), true, (new ArrayList<Cube>(Arrays.asList(new Cube(GameColor.RED)))), null);
- this.damagedPlayers=new ArrayList<>();
- this.multipleTargets=new ArrayList<>();
- }
- @Override
- public void useWeapon() {
- shoot(targetPlayer,currentPlayer,1); //then I can move one step
- move(targetPlayer, Game.getInstance().getGamePlank().getPosition(firstTargetSquare));
- damagedPlayers.add(targetPlayer);
- if(optionalEffect){
- for(int i=0;i<multipleTargets.size();i++){
- shoot(multipleTargets.get(i),currentPlayer,1);
- }
- damagedPlayers.addAll(multipleTargets);
- }
- this.setLoadedWeapon(false);
- }
- @Override
- public WeaponManagerStatus setSquare(Position position) {
- Square temp;
- List<Square> exactlyOneMoveAway=Game.getInstance().getGamePlank().exactlyOneMoveAway(Game.getInstance().getGamePlank().getSquare(targetPlayer.getPosition()));
- if(!optionalEffect){
- if(firstTargetSquare==null){
- temp=Game.getInstance().getGamePlank().getSquare(position);
- if(exactlyOneMoveAway.contains(temp)) {
- firstTargetSquare = temp;
- if(!beforeMovement) {
- useWeapon();
- return WeaponManagerStatus.FINISHED;
- }
- return WeaponManagerStatus.OPTIONALEFFECTCHOICE;
- }
- else{
- return WeaponManagerStatus.SQUARE;
- }
- }
- }
- if(optionalTargetSquare==null){
- temp=Game.getInstance().getGamePlank().getSquare(position);
- if(currentPlayer.squareICanSee().contains(temp)){
- optionalTargetSquare=temp;
- multipleTargets.addAll(optionalTargetSquare.getPlayerInSquare());
- if(beforeMovement){
- optionalEffect=false;
- beforeMovement=false;
- return WeaponManagerStatus.SQUARE;
- }
- useWeapon();
- return WeaponManagerStatus.FINISHED;
- }
- else return WeaponManagerStatus.SQUARE;
- }
- return WeaponManagerStatus.UNEXPECTED;
- }
- @Override
- public WeaponManagerStatus setTarget(Player player) {
- playerICanSee=currentPlayer.playerICanSee(Game.getInstance().getGamePlank());
- if(targetPlayer==null){
- targetPlayer=player; // mainTarget set
- if(!currentPlayer.canISeeYou(targetPlayer,playerICanSee)){
- return WeaponManagerStatus.TARGET; // mainTarget
- }
- if (currentPlayer.canPay(getOptionalCost())) {
- if(firstTargetSquare==null){
- beforeMovement=true;
- }
- return WeaponManagerStatus.OPTIONALEFFECTCHOICE; // optional effect before Movement
- }
- else return WeaponManagerStatus.SQUARE; //firstTargetSquare and optionalEffectChoice
- }
- return WeaponManagerStatus.UNEXPECTED;
- }
- @Override
- public WeaponManagerStatus setEndOfStep() {
- return null;
- }
- @Override
- public WeaponManagerStatus setFurtherOptional(boolean choice) {
- return null;
- }
- @Override
- public WeaponManagerStatus payOptional() {
- optionalEffect=true;
- return WeaponManagerStatus.SQUARE;
- }
- @Override
- public WeaponManagerStatus setOptional(boolean choice) {
- if(choice){
- return WeaponManagerStatus.REDCUBE;
- }
- if(beforeMovement){
- return WeaponManagerStatus.SQUARE;
- }
- useWeapon();
- return WeaponManagerStatus.FINISHED;
- }
- @Override
- public WeaponManagerStatus setOptionalFirst(boolean choice) {
- return null;
- }
- @Override
- public void handle(VirtualView virtualView, TurnManager turnManager) {
- new OptionalEffectWeaponManager(this, virtualView, turnManager);
- }
- @Override
- public WeaponManagerStatus startingStatus(Player currentPlayer) {
- this.currentPlayer=currentPlayer;
- return WeaponManagerStatus.TARGET;
- }
- @Override
- public List<Player> resetWeapon() {
- targetPlayer=null;
- currentPlayer=null;
- playerICanSee=null;
- firstTargetSquare=null;
- optionalTargetSquare=null;
- multipleTargets=null;
- optionalEffect=false;
- beforeMovement=false;
- List<Player> temp=new ArrayList<>(damagedPlayers);
- damagedPlayers=null;
- return temp;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement