/* * Copyright (C) 2014 Saeed Masoumi & Saeed Rajabzade * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package engine.gameController; import Logic.Cell; import Logic.Game; import Logic.GameState; import com.sun.javafx.cursor.CursorFrame; import engine.gameScene.GameScene; import engine.gameScene.SceneBuilder; import engine.gameScene.url.Url; import engine.gameView.Prefs; import engine.gameView.animation.Explode; import engine.gameView.animation.GameAnimation; import engine.gameView.animation.InfantryAnimation; import engine.gameView.mapGenerator.MapCell; import engine.gameView.mapGenerator.MapGenerator; import java.io.File; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.animation.FadeTransition; import javafx.animation.PauseTransition; import javafx.embed.swing.SwingFXUtils; import javafx.event.ActionEvent; import javafx.event.Event; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.CacheHint; import javafx.scene.Cursor; import javafx.scene.ImageCursor; import javafx.scene.Node; import javafx.scene.SnapshotParameters; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane.ScrollBarPolicy; import javafx.scene.control.TextField; import javafx.scene.control.ToolBar; import javafx.scene.effect.Glow; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.image.WritableImage; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.input.MouseEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Line; import javafx.scene.shape.LineBuilder; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.util.Duration; import javax.imageio.ImageIO; import mahyarise.common.exceptions.MahyariseExceptionBase; import mahyarise.judge.GameManager; /** * * @author Saeed Masoumi */ public class GameController implements Initializable{ //debug public static boolean DEBUG_MODE = false; @FXML Rectangle DEBUG_REC; @FXML Label DEBUG_LB1,DEBUG_LB2,DEBUG_LB3,DEBUG_LB4; private Stage stage; //hero private ImageView hero; private ImageView healthIcon; private Label lbHealth; private double STAGE_WIDTH; private double STAGE_HEIGHT; public static double GAME_WIDTH = 2000; public static double GAME_HEIGHT = 2000; public static double GAME_CELL_SIZE = 50; private double STAGE_DIFF = 10; private double HERO_POS_X = 75; private double HERO_POS_Y = 75; @FXML ToolBar toolBar; @FXML StackPane gameStack; @FXML BorderPane borderPane; @FXML ScrollPane scrollPane; @FXML StackPane mainStack; //fxml toolbar buttons @FXML Button pause,save,load,exit; //fxml toolbar icons & text @FXML Text tGold; @FXML ImageView flagIcon; @FXML ImageView heroIcon; @FXML Label teamName; public void setMyToolbar(){ flagIcon.setImage(new Image(Prefs.MY_FLAG)); heroIcon.setImage(new Image(Prefs.MY_HERO_ICON)); teamName.setText(Prefs.MY_TEAM_NAME); } public void setEnemyToolbar(){ flagIcon.setImage(new Image(Prefs.ENEMY_FLAG)); heroIcon.setImage(new Image(Prefs.ENEMY_HEARO_ICON)); teamName.setText(Prefs.ENEMY_TEAM_NAME); } @FXML ImageView goldIcon; @FXML ImageView debug,capture; //fxml bottom scene @FXML ImageView tableLeft; @FXML ImageView tableRight; @FXML TextField terminal; //right private final ImageView scoutTower = new ImageView(Url.SCOUT_TOWER_ICON); private final ImageView hammerHeadTower = new ImageView(Url.HAMMERHEAD_TOWER_ICON); private final ImageView bulletTower = new ImageView(Url.BULLET_TOWER_ICON); private final ImageView teamUpgrade = new ImageView(Url.TEAM_UPGRADE_ICON); private final ImageView teamUpgrade2 = new ImageView(Url.TEAM_UPGRADE_ICON_2); private final ImageView teamUpgrade3 = new ImageView(Url.TEAM_UPGRADE_ICON_3); private final ImageView scout = new ImageView(Url.SCOUT); private final ImageView hammerhead = new ImageView(Url.HAMMERHEAD); private final ImageView bullet = new ImageView(Url.BULLET); //left private final ImageView infantrySoldier = new ImageView(Url.INFANTRY); private final ImageView kingLong = new ImageView(Url.INFANTRY); private final ImageView destroyer = new ImageView(Url.INFANTRY); private final ImageView tankSoldier = new ImageView(Url.TANK); private final ImageView towerReloadUpgrade = new ImageView(Url.TOWER_RELOAD_UP); private final ImageView towerPowerUpgrade = new ImageView(Url.TOWER_POWER_UP); private final ImageView towerRangeUpgrade = new ImageView(Url.TOWER_RANGE_UP); private final ImageView towerAutoRepair = new ImageView(Url.TOWER_AUTO_REPAIR); public ImageView test = new ImageView(Url.ICON);//@TEST public GameController(Stage stage) { this.stage = stage; } @Override public void initialize(URL url, ResourceBundle rb) { //set cursor Image image = new Image(Url.CURSOR); //pass in the image path stage.getScene().setCursor(new ImageCursor(image)); gameStack.setCursor(new ImageCursor(image)); //TODO: add hero flag initialize sth like hero hero icon etc. note:each node should -=gamewifht/height STAGE_WIDTH = stage.getWidth(); STAGE_HEIGHT = stage.getHeight(); /* change position of nodes for better view */ mainStack.setPrefSize(STAGE_WIDTH,STAGE_HEIGHT); mainStack.setMaxSize(STAGE_WIDTH,STAGE_HEIGHT); scrollPane.setPrefSize(STAGE_WIDTH,STAGE_HEIGHT); // scrollPane.setMaxSize(GAME_WIDTH, GAME_HEIGHT); // scrollPane.setMinSize(GAME_WIDTH, GAME_HEIGHT); scrollPane.setHbarPolicy(ScrollBarPolicy.NEVER); scrollPane.setVbarPolicy(ScrollBarPolicy.NEVER); gameStack.setPrefSize(GAME_WIDTH,GAME_HEIGHT); gameStack.setMaxSize(GAME_WIDTH, GAME_HEIGHT); gameStack.setMinSize(GAME_WIDTH, GAME_HEIGHT); /* add style and effect */ terminal.getStyleClass().add("terminal"); /* Engine Resolution Checker */ fixNodeResolution(); /* Engine Performance Optimizer */ saeedOptimizer(); /* initialize some game Views using scenBuilder */ //change posotion of bottom images SceneBuilder.createTableBoardRight(scoutTower,hammerHeadTower,bulletTower,teamUpgrade,teamUpgrade2,teamUpgrade3,mainStack); SceneBuilder.createTableBoardLeftMap(mainStack); SceneBuilder.createTableBoardLeftSoldier(infantrySoldier,tankSoldier,mainStack); SceneBuilder.createTableBoarderLeftTower(towerAutoRepair,towerPowerUpgrade,towerRangeUpgrade,towerReloadUpgrade,mainStack); //map creator MapGenerator.createMapGrass(gameStack); // MapGenerator.createMapTree(gameStack); MapGenerator.createMapLake1(gameStack); MapGenerator.createMapLake2(gameStack); MapGenerator.createMapPath2(gameStack); MapGenerator.createMapTree(gameStack); //set my and enemy building MapGenerator.setMyHQBase(gameStack); MapGenerator.setEnemyHQBase(gameStack); MapGenerator.setMyMilitaryBases(gameStack); MapGenerator.setEnemyMilitaryBases(gameStack); // set starter of the game setMyToolbar(); /* buttons Listeners */ scrollPane.setVvalue(1); scrollPane.setHvalue(0); exit.setOnMouseClicked((Event t) -> { stage.close(); System.exit(0); }); debug.setImage(new Image(Url.DEBUG)); debug.setOnMouseClicked((Event t)->{ if(!DEBUG_MODE){ DEBUG_MODE = true; // showCells(50); DEBUG_REC.setVisible(DEBUG_MODE); DEBUG_LB1.setVisible(DEBUG_MODE); DEBUG_LB2.setVisible(DEBUG_MODE); DEBUG_LB3.setVisible(DEBUG_MODE); DEBUG_LB4.setVisible(DEBUG_MODE); DEBUG_LB1.setText("Available processors (cores): " + Runtime.getRuntime().availableProcessors()); DEBUG_LB2.setText("Free memory (bytes): " + Runtime.getRuntime().freeMemory()); long maxMemory = Runtime.getRuntime().maxMemory(); DEBUG_LB3.setText("Maximum memory (bytes): " + (maxMemory == Long.MAX_VALUE ? "no limit" : maxMemory)); DEBUG_LB4.setText("Total memory available to JVM (bytes): " + Runtime.getRuntime().totalMemory()); } else { DEBUG_MODE= false; DEBUG_REC.setVisible(DEBUG_MODE); DEBUG_LB1.setVisible(DEBUG_MODE); DEBUG_LB2.setVisible(DEBUG_MODE); DEBUG_LB3.setVisible(DEBUG_MODE); DEBUG_LB4.setVisible(DEBUG_MODE); } }); capture.setOnMouseClicked((Event t)->{ capture(); GameAnimation.fadeText("Captured", mainStack, 0,0,Color.BLUE); }); /* KeyBoard listener */ pause.setOnMouseClicked((Event t)->{ if(Prefs.PAUSE == true) Prefs.PAUSE = false; else Prefs.PAUSE = true; }); terminal.setOnKeyPressed(ke->{ KeyCode key = ke.getCode(); if(key.equals(KeyCode.ENTER)){ //TODO: network & cheat double x =0; double y = mainStack.getHeight()/2-50; if(terminal.getText().equals("exit") || terminal.getText().equals("Exit")){ GameAnimation.fadeText("Good Bye :-)", mainStack, x,y,Color.BLUE); PauseTransition delay = new PauseTransition(Duration.seconds(2)); delay.setOnFinished((ActionEvent event) -> { System.exit(0); }); delay.play(); } else if(terminal.getText().equals("hero") ){ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)) GameAnimation.fadeImage(new ImageView(Prefs.MY_HERO), mainStack, 0,0); else GameAnimation.fadeImage(new ImageView(Prefs.ENEMY_HEARO), mainStack, 0,0); } else GameAnimation.fadeText(terminal.getText(), mainStack, x,y,Color.RED); terminal.setText(""); } }); gameStack.getChildren().addAll(kingLong,destroyer,scout,hammerhead,bullet); kingLong.setVisible(false); destroyer.setVisible(false); scout.setVisible(false); hammerhead.setVisible(false); bullet.setVisible(false); //@TEST add for bg setGold(5000); // showCells(50); setTowerShopVisible(); //@TEST } private void showCells(int d) { for(int i=0;i<40;i++){ Line redLine = LineBuilder.create() .startY(-1000) .endY(1000) .fill(Color.ALICEBLUE) .strokeWidth(1.0f) .build(); redLine.setTranslateX(-1000+i*d); gameStack.getChildren().add(redLine); } for(int i=0;i<40;i++){ Line redLine = LineBuilder.create() .startX(-1000) .endX(1000) .fill(Color.RED) .strokeWidth(1.0f) .build(); redLine.setTranslateY(-1000+i*d); gameStack.getChildren().add(redLine); } // test3.setTranslateY(GAME_WIDTH); } public void setGold(int i){ tGold.setText(i+""); } public void addGold(int i){ int currentValue = Integer.parseInt(tGold.getText()); tGold.setText((currentValue+i)+""); } public void setHeroIcon(String url){ heroIcon.setImage(new Image(url)); } public void setHeroInfo(double health){ hero = new ImageView(Url.HERO_ICON); healthIcon = new ImageView(Url.HERO_HEALTH_ICON); healthIcon.setFitHeight(48); healthIcon.setFitWidth(48); lbHealth = new Label(health+""); lbHealth.setTextFill(Color.WHITE); mainStack.getChildren().add(hero); mainStack.getChildren().add(healthIcon); mainStack.getChildren().add(lbHealth); StackPane.setAlignment(hero,Pos.BOTTOM_RIGHT); StackPane.setAlignment(healthIcon,Pos.BOTTOM_RIGHT); StackPane.setAlignment(lbHealth,Pos.BOTTOM_RIGHT); hero.setTranslateX(hero.getX()-HERO_POS_X); hero.setTranslateY(hero.getY()-HERO_POS_Y); healthIcon.setTranslateX(hero.getX()-2*HERO_POS_X-20); healthIcon.setTranslateY(hero.getY()-HERO_POS_Y/3); lbHealth.setTranslateX(hero.getX()-HERO_POS_X-10); lbHealth.setTranslateY(hero.getY()-HERO_POS_Y/3); } public void setHeroInfoVisible(boolean t ){ if(t){ hero.setVisible(true); // tableRight.setVisible(false); } else{ hero.setVisible(false); // tableRight.setVisible(true); } } private void fixNodeResolution() { terminal.setMaxWidth(stage.getWidth()-2*300);//TODO stage.getWidht declared & 300 should be a var if(stage.getHeight()>=700 && stage.getWidth()>=1000) return ; if(stage.getHeight()>=600 && stage.getWidth()>=1200) return; //change bottom tables size tableLeft.setFitHeight(150); tableLeft.setFitWidth(200); tableRight.setFitHeight(150); tableRight.setFitWidth(200); terminal.setMaxWidth(stage.getWidth()-2*200); } /** * Bottom Controller for mainStack * It check left and right tables */ public void checkBottomBoards(){ checkTableRight(); checkTableLeft(); } /** * check right side table * setting glow for them */ private void checkTableRight(){ scoutTower.setOnMouseMoved((Event t) -> { scoutTower.setEffect(new Glow(0.5)); }); hammerHeadTower.setOnMouseMoved((Event t) -> { hammerHeadTower.setEffect(new Glow(0.5)); }); bulletTower.setOnMouseMoved((Event t) -> { bulletTower.setEffect(new Glow(0.5)); }); teamUpgrade.setOnMouseMoved((Event t) -> { teamUpgrade.setEffect(new Glow(0.5)); }); teamUpgrade2.setOnMouseMoved((Event t) -> { teamUpgrade2.setEffect(new Glow(0.5)); }); teamUpgrade3.setOnMouseMoved((Event t) -> { teamUpgrade3.setEffect(new Glow(0.5)); }); tableRight.setOnMouseMoved((Event t)->{ scoutTower.setEffect(new Glow(0)); hammerHeadTower.setEffect(new Glow(0)); bulletTower.setEffect(new Glow(0)); teamUpgrade.setEffect(new Glow(0)); teamUpgrade2.setEffect(new Glow(0)); teamUpgrade3.setEffect(new Glow(0)); }); } /** * check left side table * setting glow for them(if mouse moved on each item) */ private void checkTableLeft(){ if(towerAutoRepair.isVisible()){ towerAutoRepair.setOnMouseMoved((Event t)->{ towerAutoRepair.setEffect(new Glow(0.5)); }); towerPowerUpgrade.setOnMouseMoved((Event t)->{ towerPowerUpgrade.setEffect(new Glow(0.5)); }); towerRangeUpgrade.setOnMouseMoved((Event t)->{ towerRangeUpgrade.setEffect(new Glow(0.5)); }); towerReloadUpgrade.setOnMouseMoved((Event t)->{ towerReloadUpgrade.setEffect(new Glow(0.5)); }); tableLeft.setOnMouseMoved((Event t)->{ towerAutoRepair.setEffect(new Glow(0)); towerPowerUpgrade.setEffect(new Glow(0)); towerRangeUpgrade.setEffect(new Glow(0)); towerReloadUpgrade.setEffect(new Glow(0)); }); //clicked } else if(infantrySoldier.isVisible()){ infantrySoldier.setOnMouseMoved((Event t)->{ infantrySoldier.setEffect(new Glow(0.5)); }); tankSoldier.setOnMouseMoved((Event t)->{ tankSoldier.setEffect(new Glow(0.5)); }); tableLeft.setOnMouseMoved((Event t)->{ infantrySoldier.setEffect(new Glow(0)); tankSoldier.setEffect(new Glow(0)); }); } } /** * if user clicked on a tower */ public void setTowerShopVisible(){ towerAutoRepair.setVisible(true); towerPowerUpgrade.setVisible(true); towerRangeUpgrade.setVisible(true); towerReloadUpgrade.setVisible(true); infantrySoldier.setVisible(false); tankSoldier.setVisible(false); } /** * if user clicked on a military base * then it will show MilitaryBase property */ public void setMilitaryShopVisible(){ towerAutoRepair.setVisible(false); towerPowerUpgrade.setVisible(false); towerRangeUpgrade.setVisible(false); towerReloadUpgrade.setVisible(false); infantrySoldier.setVisible(true); tankSoldier.setVisible(true); } public void buyTeamUpgrade(){ teamUpgrade.setOnMouseClicked((Event t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ try { if(!Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_CE_ARMOR); else GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_MATH_DEC_VAL); } catch (MahyariseExceptionBase ex) { } }else { try { if(!Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_CE_ARMOR); else GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_MATH_DEC_VAL); } catch (MahyariseExceptionBase ex) { } } }); teamUpgrade2.setOnMouseClicked((Event t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ try { if(!Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_CE_ARMOR); else GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_MATH_DEC_VAL); } catch (MahyariseExceptionBase ex) { } }else { try { if(!Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_CE_PACE); else GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_MATH_ECO); } catch (MahyariseExceptionBase ex) { } } }); teamUpgrade3.setOnMouseClicked((Event t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ try { if(!Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_CE_HEALTH); else GameManager.purchaseTeamPowerup(GameScene.My_Team, GameState.PU_MATH_PROFIT); } catch (MahyariseExceptionBase ex) { } }else { try { if(!Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)) GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_CE_HEALTH); else GameManager.purchaseTeamPowerup(GameScene.Enemy_Team, GameState.PU_MATH_PROFIT); } catch (MahyariseExceptionBase ex) { } } }); } public void buyUpgrade() { towerAutoRepair.setOnMouseClicked((MouseEvent t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ }else { } }); towerPowerUpgrade.setOnMouseClicked((MouseEvent t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ }else { } }); towerRangeUpgrade.setOnMouseClicked((MouseEvent t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ }else { } }); towerReloadUpgrade.setOnMouseClicked((MouseEvent t)->{ if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)){ }else { } }); } public void buySoldier() { infantrySoldier.setOnMouseClicked((MouseEvent t) -> { if(kingLong.isVisible()){ kingLong.setVisible(false); } else { kingLong.setVisible(true); destroyer.setVisible(false); kingLong.setTranslateX(t.getX()-GAME_WIDTH/2); kingLong.setTranslateY(t.getY()-GAME_HEIGHT/2); } }); tankSoldier.setOnMouseClicked((MouseEvent t)->{ if(destroyer.isVisible()){ destroyer.setVisible(false); } else{ kingLong.setVisible(false); destroyer.setVisible(true); destroyer.setTranslateX(t.getX()-GAME_WIDTH/2); destroyer.setTranslateY(t.getY()-GAME_HEIGHT/2); } }); } public void buyTower(){ scoutTower.setOnMouseClicked((MouseEvent t)->{ if(scout.isVisible()){ scout.setVisible(false); } else { kingLong.setVisible(false); hammerhead.setVisible(false); bullet.setVisible(false); destroyer.setVisible(false); scout.setVisible(true); scout.setTranslateX(t.getX()-GAME_WIDTH/2); scout.setTranslateY(t.getY()-GAME_HEIGHT/2); } }); hammerHeadTower.setOnMouseClicked((MouseEvent t)->{ if(hammerhead.isVisible()){ hammerhead.setVisible(false); } else { kingLong.setVisible(false); hammerhead.setVisible(true); bullet.setVisible(false); destroyer.setVisible(false); scout.setVisible(false); hammerhead.setTranslateX(t.getX()-GAME_WIDTH/2); hammerhead.setTranslateY(t.getY()-GAME_HEIGHT/2); } }); bulletTower.setOnMouseClicked((MouseEvent t)->{ if(bullet.isVisible()){ bullet.setVisible(false); } else { kingLong.setVisible(false); hammerhead.setVisible(false); bullet.setVisible(true); destroyer.setVisible(false); scout.setVisible(false); bullet.setTranslateX(t.getX()-GAME_WIDTH/2); bullet.setTranslateY(t.getY()-GAME_HEIGHT/2); } }); } /** * * @return stack of the game */ public StackPane getGameStack(){ return gameStack; } public ScrollPane getScrollPane(){ return scrollPane; } /** * optimize game stack */ private void saeedOptimizer() { gameStack.setCache(true); gameStack.setCacheHint(CacheHint.SPEED); } /** * capture gameStack and save it in the root of application */ private void capture(){ WritableImage image = gameStack.snapshot(new SnapshotParameters(), null); File file = new File("sample.png"); try { ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file); } catch (IOException ex) { Logger.getLogger(GameController.class.getName()).log(Level.SEVERE, null, ex); } } /** * if user clicked on his MB then change the team to My_Team */ public void checkMyMilitaryBase() { Prefs.MY_MB1_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.MY_TEAM_NAME; setMilitaryShopVisible(); setMyToolbar(); }); Prefs.MY_MB2_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.MY_TEAM_NAME; setMilitaryShopVisible(); setMyToolbar(); }); Prefs.MY_MB3_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.MY_TEAM_NAME; setMilitaryShopVisible(); setMyToolbar(); }); } /** * if user clicked on enemy MBs then change the team to Enemy_Team * Note:only for 2in1 mode */ public void checkEnemyMilitaryBase() { Prefs.ENEMY_MB1_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.ENEMY_TEAM_NAME; setMilitaryShopVisible(); setEnemyToolbar(); }); Prefs.ENEMY_MB2_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.ENEMY_TEAM_NAME; setMilitaryShopVisible(); setEnemyToolbar(); }); Prefs.ENEMY_MB3_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.ENEMY_TEAM_NAME; setMilitaryShopVisible(); setEnemyToolbar(); }); } /** * if user clicked on his HQ then change the team to My_team */ public void checkHQBase() { Prefs.MY_HQ_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.MY_TEAM_NAME; setTowerShopVisible(); setMyToolbar(); }); } /** * if user clicked on enemy HQ then change the team to ENEmy_team */ public void checkEnemyHQBase() { Prefs.ENEMY_HQ_IMG.setOnMouseClicked((Event t)->{ Prefs.CURRENT_TEAM = Prefs.ENEMY_TEAM_NAME; setEnemyToolbar(); setTowerShopVisible(); }); } public void checkMouseBehavior() { gameStack.setOnMouseMoved((MouseEvent t )->{ //it means we should buy kinLong(infantrysoldier) if(kingLong.isVisible()){ kingLong.setTranslateX(t.getX()-2000/2); kingLong.setTranslateY(t.getY()-2000/2); } else if(destroyer.isVisible()){ destroyer.setTranslateX(t.getX()-2000/2); destroyer.setTranslateY(t.getY()-2000/2); } else if(scout.isVisible()){ scout.setTranslateX(t.getX()-2000/2); scout.setTranslateY(t.getY()-2000/2); } else if(hammerhead.isVisible()){ hammerhead.setTranslateX(t.getX()-2000/2); hammerhead.setTranslateY(t.getY()-2000/2); } else if(bullet.isVisible()){ bullet.setTranslateX(t.getX()-2000/2); bullet.setTranslateY(t.getY()-2000/2); } }); gameStack.setOnMouseClicked((MouseEvent t )->{ int col = Game.getMap().getCell(MapCell.posCol(t.getX()-1000), MapCell.posRow(t.getY()-1000)).getCol(); int row = Game.getMap().getCell(MapCell.posCol(t.getX()-1000), MapCell.posRow(t.getY()-1000)).getRow(); int lane =Game.getMap().getCell(MapCell.posCol(t.getX()-1000), MapCell.posRow(t.getY()-1000)).getLaneNum(); int path =Game.getMap().getCell(MapCell.posCol(t.getX()-1000), MapCell.posRow(t.getY()-1000)).getPathNum(); if(kingLong.isVisible() ){ kingLong.setVisible(false); if(lane<1 || lane>3){ return; } if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)) { try { //path lane GameManager.createAttacker(GameScene.My_Team,GameState.ATTACKER_INFANTRY,path, lane, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createAttacker(GameScene.Enemy_Team,GameState.ATTACKER_INFANTRY, path, lane, gameStack); } catch (MahyariseExceptionBase ex) { } } } else if(destroyer.isVisible()){ destroyer.setVisible(false); if(lane<1 || lane>3){ return; } if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME)) { try { //path lane GameManager.createAttacker(GameScene.My_Team,GameState.ATTACKER_TANK,path, lane, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createAttacker(GameScene.Enemy_Team,GameState.ATTACKER_TANK, path, lane, gameStack); } catch (MahyariseExceptionBase ex) { } } } else if(scout.isVisible()){ //black tower ce / scout.setVisible(false); if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME) ){ if(Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_GENERAL_MATH, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_GAME, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } } }else { if(Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_GENERAL_MATH, col, row, gameStack); } catch (MahyariseExceptionBase ex) { Logger.getLogger(GameController.class.getName()).log(Level.SEVERE, null, ex); } }else { try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_GAME, col, row, gameStack); } catch (MahyariseExceptionBase ex) { Logger.getLogger(GameController.class.getName()).log(Level.SEVERE, null, ex); } } } } else if(hammerhead.isVisible()){ hammerhead.setVisible(false); if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME) ){ if(Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_TANK, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_BLACK, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } } }else { if(Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_TANK, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_BLACK, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } } } }else if(bullet.isVisible()){ bullet.setVisible(false ); if(Prefs.CURRENT_TEAM.equals(Prefs.MY_TEAM_NAME) ){ if(Prefs.MY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_ELECTRICITY, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createTower(GameScene.My_Team, GameState.TOWER_TYPE_POISON, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } } }else { if(Prefs.ENEMY_REGION.equals(Prefs.TOP_RIGHT)){ try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_ELECTRICITY, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } }else { try { GameManager.createTower(GameScene.Enemy_Team, GameState.TOWER_TYPE_POISON, col, row, gameStack); } catch (MahyariseExceptionBase ex) { } } } } }); } }