Skip to content
Snippets Groups Projects
Commit 53811628 authored by Luboš Horáček's avatar Luboš Horáček
Browse files

#31 Generating targets

parent a1e82dd4
No related branches found
No related tags found
No related merge requests found
...@@ -60,6 +60,9 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> { ...@@ -60,6 +60,9 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> {
target.setShot(true); target.setShot(true);
target.addAction(Actions.scaleTo(1, 0, 0.1f)); target.addAction(Actions.scaleTo(1, 0, 0.1f));
getData().addHit(); getData().addHit();
if (getData().getHitLimit() == 0) {
newTarget();
}
} else if (target.getTextureType().equals(TextureType.BOX_BAD)) { } else if (target.getTextureType().equals(TextureType.BOX_BAD)) {
target.setShot(true); target.setShot(true);
getData().addBoxBad(); getData().addBoxBad();
...@@ -80,7 +83,6 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> { ...@@ -80,7 +83,6 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> {
sfxLibrary.getSound(SoundType.BOX_SMOKE); sfxLibrary.getSound(SoundType.BOX_SMOKE);
break; break;
default: default:
throw new IllegalStateException("Unknown state");
} }
} else if (target.getTextureType().equals(TextureType.BOX_GOOD)) { } else if (target.getTextureType().equals(TextureType.BOX_GOOD)) {
target.setShot(true); target.setShot(true);
...@@ -148,7 +150,7 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> { ...@@ -148,7 +150,7 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> {
targetGenerator = new TargetGenerator(getGameDifficulty(), getRandom(), gfxLibrary, clickListener, hitEvaluator); targetGenerator = new TargetGenerator(getGameDifficulty(), getRandom(), gfxLibrary, clickListener, hitEvaluator);
targetPositionController = new TargetPositionController(scene, targetGenerator, getRandom(), getStage().getWidth()); targetPositionController = new TargetPositionController(scene, targetGenerator, getRandom(), getGameDifficulty(), getStage().getWidth());
for (Row row : scene.getRows()) { // init each row with starting flowers for (Row row : scene.getRows()) { // init each row with starting flowers
row.setWave(Wave.getWave(getGameDifficulty(), row.getRowIndex())); row.setWave(Wave.getWave(getGameDifficulty(), row.getRowIndex()));
row.addTargets(targetGenerator.generateTargetRow(row)); row.addTargets(targetGenerator.generateTargetRow(row));
...@@ -180,17 +182,22 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> { ...@@ -180,17 +182,22 @@ public class ShootingRangeGame extends AbstractTablexiaGame<GameState> {
* Generate new target and hit limit a show it in carousel * Generate new target and hit limit a show it in carousel
*/ */
private void newTarget() { private void newTarget() {
getData().setCurrentHitLimit(getNewHitLimit()); getData().setHitLimit(getNewHitLimit());
getData().setCurrentTarget(getRandomFlower()); getData().setCurrentTarget(getRandomFlower());
carousel.showNextFlower(getData().getCurrentTarget()); carousel.showNextFlower(getData().getCurrentTarget());
targetPositionController.setTargetType(getData().getCurrentTarget());
} }
/** /**
* Get random flower from target bag. Currently ignoring if target type is on the screen * Get random flower from target bag.
* *
* @return * @return
*/ */
private TextureType getRandomFlower() { private TextureType getRandomFlower() {
if (targetPositionController.getAvailableTypes().size() > 0) {
TextureType[] types = targetPositionController.getAvailableTypes().toArray(new TextureType[0]);
return types[getRandom().nextInt(types.length)];
}
TextureType flowerType = targetGenerator.getRandomFlowerType(getGameDifficulty()); TextureType flowerType = targetGenerator.getRandomFlowerType(getGameDifficulty());
return flowerType; return flowerType;
} }
......
...@@ -19,19 +19,19 @@ public class GameState { ...@@ -19,19 +19,19 @@ public class GameState {
private int boxesGoodHit = 0; private int boxesGoodHit = 0;
private float time = 0f; private float time = 0f;
private TextureType currentTarget; private TextureType currentTarget;
private int currentHitLimit = 0; private int hitLimit = 0;
private float gameSpeed = Properties.GAME_SPEED_NORMAL; private float gameSpeed = Properties.GAME_SPEED_NORMAL;
public int getCurrentHitLimit() { public int getHitLimit() {
return currentHitLimit; return hitLimit;
} }
public void setGameSpeed(float gameSpeed) { public void setGameSpeed(float gameSpeed) {
this.gameSpeed = gameSpeed; this.gameSpeed = gameSpeed;
} }
public void setCurrentHitLimit(int currentHitLimit) { public void setHitLimit(int limit) {
this.currentHitLimit = currentHitLimit; this.hitLimit = limit;
} }
public int getScore() { public int getScore() {
...@@ -68,6 +68,7 @@ public class GameState { ...@@ -68,6 +68,7 @@ public class GameState {
public void addHit() { public void addHit() {
this.hits++; this.hits++;
addScore(2); addScore(2);
hitLimit--;
} }
public int getMisses() { public int getMisses() {
......
...@@ -84,7 +84,7 @@ public class TargetGenerator { ...@@ -84,7 +84,7 @@ public class TargetGenerator {
int flowerNumber = row.getWave().getFlowersOnScreen(); int flowerNumber = row.getWave().getFlowersOnScreen();
float targetPeriod = row.getWave().getRunningTime() / row.getWave().getFlowersOnScreen(); float targetPeriod = row.getWave().getRunningTime() / row.getWave().getFlowersOnScreen();
// přidáme jeden terč za okraj na prvn obrazovce // add one more target off the screen
for (int i = -flowerNumber; i <= 0; i++) { for (int i = -flowerNumber; i <= 0; i++) {
Target target = getRandomTarget(textureTypeBag, targetPeriod * i, row); Target target = getRandomTarget(textureTypeBag, targetPeriod * i, row);
flowers.add(target); flowers.add(target);
......
...@@ -6,6 +6,7 @@ import java.util.List; ...@@ -6,6 +6,7 @@ import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.Set; import java.util.Set;
import cz.nic.tablexia.game.difficulty.GameDifficulty;
import cz.nic.tablexia.game.games.shooting_range.actors.Row; import cz.nic.tablexia.game.games.shooting_range.actors.Row;
import cz.nic.tablexia.game.games.shooting_range.actors.Scene; import cz.nic.tablexia.game.games.shooting_range.actors.Scene;
import cz.nic.tablexia.game.games.shooting_range.actors.Target; import cz.nic.tablexia.game.games.shooting_range.actors.Target;
...@@ -23,14 +24,16 @@ public class TargetPositionController { ...@@ -23,14 +24,16 @@ public class TargetPositionController {
private final float width; private final float width;
private final Scene scene; private final Scene scene;
private TextureType targetType; private TextureType targetType;
private GameDifficulty gameDifficulty;
Set<TextureType> availableTypes = new HashSet<TextureType>();
public TargetPositionController(Scene scene, TargetGenerator targetGenerator, Random random, GameDifficulty gameDifficulty, float width) {
public TargetPositionController(Scene scene, TargetGenerator targetGenerator, Random random, float width) {
super(); super();
this.scene = scene; this.scene = scene;
this.targetGenerator = targetGenerator; this.targetGenerator = targetGenerator;
this.random = random; this.random = random;
this.width = width; this.width = width;
this.gameDifficulty = gameDifficulty;
} }
...@@ -38,10 +41,14 @@ public class TargetPositionController { ...@@ -38,10 +41,14 @@ public class TargetPositionController {
this.targetType = targetType; this.targetType = targetType;
} }
public Set<TextureType> getAvailableTypes() {
return availableTypes;
}
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.andengine.engine.handler.IUpdateHandler#onUpdate(float) * @see org.andengine.engine.handler.IUpdateHandler#onUpdate(float)
*/ */
public void onUpdate(float pSecondsElapsed) { public void onUpdate(float pSecondsElapsed) {
elapsedTime += pSecondsElapsed; elapsedTime += pSecondsElapsed;
Set<TextureType> availableTypes = new HashSet<TextureType>(); Set<TextureType> availableTypes = new HashSet<TextureType>();
...@@ -55,31 +62,28 @@ public class TargetPositionController { ...@@ -55,31 +62,28 @@ public class TargetPositionController {
// is last target in row // is last target in row
if (targetGenerator.getLastTargetInRow(row).equals(target)) { if (targetGenerator.getLastTargetInRow(row).equals(target)) {
// last invisible target is on scene - add new one // last invisible target is on scene - add new one
row.addTarget(targetGenerator.addNewTargetToRow(row, TextureType.FLOWER_1)); List<TextureType> textures = TextureType.getTargetPack(gameDifficulty);
//Log.info(getClass(), "Adding " + target); row.addTarget(targetGenerator.addNewTargetToRow(row, textures.get(random.nextInt(textures.size()))));
} }
target.setX(x); target.setX(x);
target.setY(row.getHeight() - 50 + row.getWave().getY(elapsedTime - target.getStartTime(), row.getHeight())); target.setY(row.getHeight() - 50 + row.getWave().getY(elapsedTime - target.getStartTime(), row.getHeight()));
// is target in first half of its way? to get available target types not immediately leaving screen // is target in first half of its way? to get available target types not immediately leaving screen
if ((x > (Direction.RIGHT == row.getWave().getDirection() ? 0 : width / 2)) && (x < (Direction.RIGHT == row.getWave().getDirection() ? width / 2 : width))) { if ((x > (Direction.RIGHT == row.getWave().getDirection() ? 0 : width / 2)) && (x < (Direction.RIGHT == row.getWave().getDirection() ? width / 2 : width))) {
// pouze nesestřelené // only not hit
if (!target.isShot()) { if (!target.isShot()) {
availableTypes.add(target.getTextureType()); availableTypes.add(target.getTextureType());
} }
} }
// target is not on scene // target is not on scene
} else { } else {
if (target.getParent() != null) { if (((row.getWave().getDirection() == Direction.LEFT) && (x < 0)) || ((row.getWave().getDirection() == Direction.RIGHT) && (x > width))) {
if (((row.getWave().getDirection() == Direction.LEFT) && (x < 0)) || ((row.getWave().getDirection() == Direction.RIGHT) && (x > width))) { // gone out of screen
// už je mimo obraz row.removeTarget(target);
// TODO remove with row.removeTarget method } else {
row.removeTarget(target); // comming to the screen
//Log.info(getClass(), "Removing target " + target); invisibles.add(target);
} else { availableTypes.add(target.getTextureType()); // TODO count available to make them more available or select tartgetType, tha has multiple occurences
// teprve přichází do obrazu
availableTypes.add(target.getTextureType()); // TODO zkusime vypnout ocekavane kytky, aby jich rovnou pridaval vic
}
} }
} }
} }
...@@ -91,7 +95,6 @@ public class TargetPositionController { ...@@ -91,7 +95,6 @@ public class TargetPositionController {
Target swap = invisibles.get(index); Target swap = invisibles.get(index);
Target swapTo = targetGenerator.addNewTargetToRow(swap.getRow(), targetType, swap.getStartTime(), targetGenerator.getLastTargetInRow(swap.getRow()).equals(swap)); Target swapTo = targetGenerator.addNewTargetToRow(swap.getRow(), targetType, swap.getStartTime(), targetGenerator.getLastTargetInRow(swap.getRow()).equals(swap));
// TODO
swap.getRow().addTarget(swapTo); swap.getRow().addTarget(swapTo);
swap.getRow().removeTarget(swap); swap.getRow().removeTarget(swap);
} else { } else {
...@@ -99,6 +102,6 @@ public class TargetPositionController { ...@@ -99,6 +102,6 @@ public class TargetPositionController {
row.addTarget(targetGenerator.addNewTargetToRow(row, targetType)); row.addTarget(targetGenerator.addNewTargetToRow(row, targetType));
} }
} }
this.availableTypes = availableTypes;
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment