📄 gamelisteners.java
字号:
else
gameFrame.setLeftPanelSamantha();
game.getSamantha().getTeam().undoGroup();
// Different tiles ? We build a new group
} else {
List<Insect> insGroup = game.getSamantha().getTeam().createGroup(pos1, pos2);
gameFrame.setLeftPanelGroup(insGroup);
}
break;
// Move button
case BTN_MOUSE_MOVE:
Insect samantha = game.getSamantha();
samantha.setDirection(pos2);
for(Insect insect : samantha.getTeam().getTabInsect())
if(insect.getIsInGroup() == true) {
insect.setDirection(pos2, Order.FOLLOW_GROUP, samantha);
insect.setRefPoint(pos2);
}
break;
}
}
};
// Listener on the antWorker percentage's JSlider
gameFrame.addSliderListener(GameFrame.SlideControls.SLI_WORKER, new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int percent = source.getValue();
game.getWorld().getTeams().get(0).setPercentWorker(percent);
}
}
});
// Listener on the knowledges / food JSlider
gameFrame.addSliderListener(GameFrame.SlideControls.SLI_KNOWLEDGE, new ChangeListener() {
public void stateChanged(ChangeEvent e) {
JSlider source = (JSlider)e.getSource();
if (!source.getValueIsAdjusting()) {
int percent = source.getValue();
game.getWorld().getTeams().get(0).setPercentKnowledge(100 - percent);
}
}
});
// Listener for the 'Employ a bug' button
gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Bug, new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
Team team = game.getWorld().getTeams().get(0);
int food = team.getFoodStock();
if (food > Team.FOOD_NEEDED_FOR_A_BUG) {
team.getMaster().addBug();
if (team.getFoodStock() < Team.FOOD_NEEDED_FOR_A_BUG) {
gameFrame.updateGameButton(GameFrame.GameControls.GAM_Bug, false);
game.desactivateBugButton();
}
}
}
});
// Listener for the 'Add a kamikaze' button
gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Kamikaze, new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
Team team = game.getWorld().getTeams().get(0);
int food = team.getFoodStock();
if (food > Team.FOOD_NEEDED_FOR_A_KAMIKAZE) {
team.getMaster().addKamikaze();
if (team.getFoodStock() < Team.FOOD_NEEDED_FOR_A_KAMIKAZE) {
gameFrame.updateGameButton(GameFrame.GameControls.GAM_Kamikaze, false);
game.desactivateKamikazeButton();
}
}
}
});
// Listener for the 'Develop Shields' button
gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Shield, new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
Team team = game.getWorld().getTeams().get(0);
int food = team.getKnowledges();
if (food > Team.FOOD_NEEDED_FOR_SHIELD) {
team.activateShield();
gameFrame.updateGameButton(GameFrame.GameControls.GAM_Shield, false);
gameFrame.updateToolTip(GameFrame.GameControls.GAM_Shield, "You have already developped shields", false);
} else
SelectBuilder.showMessageInfo(gameFrame.getTitle(), "You don't have enough food to develop shields. Sorry !");
}
});
// Listener for the 'Develop veterans' button
gameFrame.addGameButtonListener(GameFrame.GameControls.GAM_Veteran, new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
Team team = game.getWorld().getTeams().get(0);
updateVeteransButton(team);
}
});
// Play menu
gameFrame.addButtonListener(GameFrame.BtnControls.BTN_Play, new MouseAdapter() {
@Override public void mouseClicked(MouseEvent e) {
// Before we launch the game, we verify that we have at least one antHill of each sort
if (game.getAntHill() == null || game.getAntHillOpp().isEmpty())
SelectBuilder.showMessageInfo(gameFrame.getTitle(), "You must have at least one antHill of each sort !");
else {
// If all is good, we remove buttons and events and we indicate that we have finished
game.setNewGame(true);
game.setInitBreak(true);
}
}
});
// New level menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelNew, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (game.confirmLostModifications())
game.defineNewWorld(Game.typeWorld.plain);
}
});
// Load level menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelOpen, new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!game.confirmLostModifications())
return;
if (game.loadStateFromFile(Game.TypeFile.LEVEL)) {
game.getAntHillsPositions();
game.getWorld().updateAllModel();
}
}
});
// Save level menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileLevelSave, new ActionListener() {
public void actionPerformed(ActionEvent e) {
game.saveStateToFile(Game.TypeFile.LEVEL);
}
});
// Load game menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameOpen, new ActionListener() {
public void actionPerformed(ActionEvent e) {
game.setGamePaused(true);
if (game.loadStateFromFile(Game.TypeFile.GAME)) {
game.getWorld().updateAllModel();
game.setInitBreak(true);
game.setGameBreak(true);
game.setNewGame(false);
game.getWorld().updateAllModel();
}
game.setGamePaused(false);
}
});
// Save game menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameSave, new ActionListener() {
public void actionPerformed(ActionEvent e) {
game.setGamePaused(true);
game.saveStateToFile(Game.TypeFile.GAME);
game.setGamePaused(false);
}
});
// Close game menu
gameFrame.addActionListener(GameFrame.MnuControls.MNU_FileGameClose, new ActionListener() {
public void actionPerformed(ActionEvent e) {
game.setGamePaused(true);
if (!SelectBuilder.showMessageConfirm(gameFrame.getTitle(), "Your game will be lost if you not save before. Continue anyway ?")) {
game.setGamePaused(false);
return;
}
game.setGameBreak(true);
gameFrame.prepareGraphicForLevelEditor();
game.setGamePaused(false);
}
});
// Frame resizing ?
gameFrame.addResizeFrameListener(new ComponentAdapter() {
@Override public void componentResized(ComponentEvent e) {
gameFrame.resizeMenu();
}
});
}
/**
* Replace the listener associated to the GridPane.
* If an old one was associated, we remove it
* @param listener the new listener
*/
void replaceMainListener(MainLst listener) {
gameFrame.removeInputListener(inputEditor);
gameFrame.removeGridPaneListener(gridPaneListener);
if (listener == MainLst.LST_Level)
gameFrame.addGridPaneListener(inputEditor);
else
gameFrame.addGridPaneListener(gridPaneListener);
}
/**
* Update the veteran button so that the player could buy the next element
* @param team the player's team
*/
private void updateVeteransButton(Team team) {
// Variables
int needKnown = 0;
int nextKnown = 0;
Rank nextRank = null;
String devel = null;
String toolTip = null;
// We get the actual variables
int knowledge = team.getKnowledges();
int food = team.getFoodStock();
Rank rank = team.getRank();
// If we are already generals, we do nothing
if (rank == Rank.GENERAL)
return;
// We get all the information wee need
switch(rank) {
case PRIVATE:
needKnown = Team.KNOWLEDGE_FOR_SERGEANTS;
nextKnown = Team.KNOWLEDGE_FOR_CAPTAINS;
nextRank = Rank.SERGEANT;
devel = "captains";
break;
case SERGEANT:
needKnown = Team.KNOWLEDGE_FOR_CAPTAINS;
nextKnown = Team.KNOWLEDGE_FOR_MAJORS;
nextRank = Rank.CAPTAIN;
devel = "majors";
break;
case CAPTAIN:
needKnown = Team.KNOWLEDGE_FOR_MAJORS;
nextKnown = Team.KNOWLEDGE_FOR_COLONELS;
nextRank = Rank.MAJOR;
devel = "colonels";
break;
case MAJOR:
needKnown = Team.KNOWLEDGE_FOR_COLONELS;
nextKnown = Team.KNOWLEDGE_FOR_GENERALS;
nextRank = Rank.COLONEL;
devel = "generals";
break;
case COLONEL:
needKnown = Team.KNOWLEDGE_FOR_GENERALS;
nextRank = Rank.GENERAL;
break;
}
// Not enough food or knowledges ? We exit
if (food < Team.FOOD_NEEDED_FOR_VETERANS || knowledge < needKnown) {
return;
}
if (devel == null)
toolTip = "You reached the maximum. You can't develop this any further!";
else
toolTip = "Develop " + devel + ": $" + Team.FOOD_NEEDED_FOR_VETERANS + ", (K) " + nextKnown;
gameFrame.updateToolTip(GameFrame.GameControls.GAM_Veteran, toolTip, true);
gameFrame.updateToolTip(GameFrame.GameControls.GAM_Veteran, toolTip + " (unvailable)", false);
gameFrame.updateGameButton(GameFrame.GameControls.GAM_Veteran, false);
team.setFoodStock(food - Team.FOOD_NEEDED_FOR_VETERANS);
team.setRank(nextRank);
game.desactivateVeteranButton();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -