Added all drawables for IcyMountains

Added snow particle system
World on StartScene is randomly chosen
Last-level onGoalScreen shows "toNextWorld"
This commit is contained in:
=
2018-01-13 17:50:27 +01:00
parent 1ca222187e
commit fb3290a3b2
37 changed files with 642 additions and 250 deletions

View File

@ -168,6 +168,10 @@ public class ParticleSource {
this.position = position;
}
public Vector getPosition() {
return position;
}
public void setDelayMS(float delay) {
currentDelay = delay;
delayManuallySet = true;

View File

@ -20,6 +20,7 @@ public class ParticleSystem {
public final ParticleEffect energyCollect;
public final ParticleEffect firework;
public final ParticleEffect superPower;
public final ParticleEffect snow;
private ParticleEffect[] effects;
private TextureLoader textureLoader;
@ -36,8 +37,9 @@ public class ParticleSystem {
energyCollect = reader.read("particleEffects/collectEnergy.pe");
firework = reader.read("particleEffects/firework.pe");
superPower = reader.read("particleEffects/superPower.pe");
snow = reader.read("particleEffects/snow.pe");
effects = new ParticleEffect[]{stasis, testFire,colorChange, explosion, magnet, starCollect, energyCollect, firework, superPower};
effects = new ParticleEffect[]{stasis, testFire,colorChange, explosion, magnet, starCollect, energyCollect, firework, superPower, snow};
}
public void update(Timer timer) {

View File

@ -12,9 +12,8 @@ import de.frajul.endlessroll.entities.textures.TexturePack;
public enum World {
GRASSLANDS("Grasslands", R.drawable.world_previews_grass, R.drawable.backgrounds_game_grass, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass),
TESTCAVE("Testcave", R.drawable.world_previews_grass, R.drawable.backgrounds_game_cave, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass),
ICY_MOUNTAINS("Icy Mountains", R.drawable.world_previews_grass, R.drawable.backgrounds_game_mountains, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass);
GRASSLANDS("Grasslands", R.drawable.world_previews_grasslands, R.drawable.backgrounds_game_grass, R.drawable.terrain_t_grass, R.drawable.terrain_c_grass, R.drawable.obstacles_grass),
ICY_MOUNTAINS("Icy Mountains", R.drawable.world_previews_icymountains, R.drawable.backgrounds_game_snow, R.drawable.terrain_t_ice, R.drawable.terrain_c_ice, R.drawable.obstacles_snow);
private String name;
@DrawableRes

View File

@ -7,6 +7,7 @@ import de.frajul.endlessroll.entities.Obstacle;
import de.frajul.endlessroll.entities.collectables.Energy;
import de.frajul.endlessroll.entities.collectables.Star;
import de.frajul.endlessroll.entities.collision.CollisionDetector;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.entities.shapes.PlayerShape;
import de.frajul.endlessroll.entities.textures.TexturePack;
@ -37,14 +38,14 @@ public class GameScene extends Scene {
goal = new Goal(textures.goal);
}
public void loadLevel(Level level, World world, PlayerShape playerPlayerShape) throws Exception {
public void loadLevel(Level level, World world, PlayerShape playerShape) throws Exception {
this.currentWorld = world;
super.reset();
background.changeTexture(world.getBackgroundTexture());
terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles());
ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles());
uncategorizedEntities.add(goal);
player.init(playerPlayerShape, terrain.getEdge(), level.getStartSpeed(),
player.init(playerShape, terrain.getEdge(), level.getStartSpeed(),
level.getEndSpeed(), particleSystem);
uncategorizedEntities.add(player);
collectables.init(level, textures);
@ -53,6 +54,13 @@ public class GameScene extends Scene {
goalX = level.getGoalX();
goal.setGoalX(goalX);
if(world == World.ICY_MOUNTAINS){
enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow);
enviromentParticles.start();
}else if(enviromentParticles != null){
enviromentParticles.kill();
}
GameLog.d("Level " + level.getId() + " successfully loaded");
}

View File

@ -12,6 +12,7 @@ import de.frajul.endlessroll.entities.Entity;
import de.frajul.endlessroll.entities.Obstacle;
import de.frajul.endlessroll.entities.Player;
import de.frajul.endlessroll.entities.collectables.Collectables;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.entities.textures.TexturePack;
import de.frajul.endlessroll.entities.tileLists.Ceiling;
@ -37,6 +38,7 @@ public abstract class Scene {
protected Terrain terrain;
protected Ceiling ceiling;
protected Player player;
protected ParticleSource enviromentParticles;
protected List<Entity> uncategorizedEntities = Collections
.synchronizedList(new ArrayList<Entity>());
@ -82,6 +84,9 @@ public abstract class Scene {
}
} else
uncategorizedEntities.remove(playerArrow);
if (enviromentParticles != null)
enviromentParticles.getPosition().setX(camera.getX() + 1.5f);
}
private void updateEntityList(List<? extends Entity> list, Timer timer) {

View File

@ -1,5 +1,9 @@
package de.frajul.endlessroll.main.game;
import java.util.Random;
import de.frajul.endlessroll.data.Vector;
import de.frajul.endlessroll.entities.particles.ParticleSource;
import de.frajul.endlessroll.entities.particles.ParticleSystem;
import de.frajul.endlessroll.entities.shapes.PlayerShape;
import de.frajul.endlessroll.entities.textures.TexturePack;
@ -7,11 +11,37 @@ import de.frajul.endlessroll.levels.worlds.World;
public class StartScene extends Scene {
private final float TERRAIN_EDGE = -0.8f;
private Random random;
private World currentWorld = World.GRASSLANDS;
public StartScene(TexturePack texturePack, ParticleSystem particleSystem) {
super(texturePack, particleSystem);
terrain.createEndless(World.ICY_MOUNTAINS, -.8f);
player.init(PlayerShape.BALL, terrain.getEdge(), 0.5f, 0.5f, null);
player.init(PlayerShape.BALL, TERRAIN_EDGE, 0.5f, 0.5f, null);
uncategorizedEntities.add(player);
random = new Random();
randomizeWorld();
loadTexturesForCurrentWorld();
}
public void randomizeWorld() {
int worldId = random.nextInt(World.values().length);
currentWorld = World.values()[worldId];
if (currentWorld == World.ICY_MOUNTAINS) {
enviromentParticles = new ParticleSource(new Vector(), particleSystem.snow);
enviromentParticles.start();
} else {
if (enviromentParticles != null)
enviromentParticles.kill();
particleSystem.deleteAllSources();
}
}
public void loadTexturesForCurrentWorld() {
terrain.clear();
terrain.createEndless(currentWorld, TERRAIN_EDGE);
background.changeTexture(currentWorld.getBackgroundTexture());
}
}

View File

@ -10,7 +10,7 @@ import android.widget.RelativeLayout;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.main.GameActivity;
import de.frajul.endlessroll.main.MyGlSurfaceView;
import de.frajul.endlessroll.rendering.Rendering;
import de.frajul.endlessroll.main.game.StartScene;
import de.frajul.endlessroll.sqlDatabase.MyDatabase;
import de.frajul.endlessroll.views.ConfirmDialog;
@ -22,7 +22,7 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
private final int CALL_ID_CONFIRM_EXIT = 1;
private final int CALL_ID_CONFIRM_FINISH_WORLD = 2;
private Rendering rendering;
private StartScreenRendering rendering;
private Button play;
private Button unlockLevels;
@ -62,6 +62,8 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
@Override
public void prepareToBeShown() {
glView.setCurrentRendering(rendering);
((StartScene) rendering.getScene()).randomizeWorld();
((StartScene) rendering.getScene()).loadTexturesForCurrentWorld();
}
@Override

View File

@ -30,8 +30,9 @@ public class StartScreenRendering extends Rendering<StartScene> {
this.timer = timer;
if (isFirstTime)
scene = new StartScene(texturePack, particleSystem);
else
else {
scene.setTexturePack(texturePack);
}
try {
particleSystem.loadTextures();
} catch (Exception e) {

View File

@ -57,11 +57,15 @@ public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.
topBar.update();
restart.init(R.string.goal_message_restart_format_d, level);
boolean nextLevelVisible = !levelPack.isLastLevel(level);
nextLevel.setVisible(nextLevelVisible);
if (nextLevelVisible)
boolean isLastLevel = levelPack.isLastLevel(level);
boolean hasNextWorld = gameActivity.getLevelManager().getNextLevelPack(levelPack) != null;
nextLevel.setVisible(!isLastLevel || hasNextWorld);
if (!isLastLevel)
nextLevel
.init(R.string.goal_message_next_level_format_d, levelPack.getNextLevel(level));
else if (hasNextWorld) {
nextLevel.initShowToNextWorld(true, levelPack);
}
layout.postDelayed(new Runnable() {
@Override
@ -96,7 +100,10 @@ public class GoalMessage implements GoalMessageLevelButtonOnClickListener, View.
@Override
public void onClick(GoalMessageLevelButton goalMessageLevelButton) {
hide();
gameActivity.startGame(levelPack, goalMessageLevelButton.getLevel());
if (goalMessageLevelButton.isShowingToNextWorld()) {
gameActivity.flipToScreen(Screen.ScreenType.WORLDS);
} else
gameActivity.startGame(levelPack, goalMessageLevelButton.getLevel());
}
public void onKeyBack() {

View File

@ -1,14 +1,13 @@
package de.frajul.endlessroll.views;
import android.support.annotation.LayoutRes;
import android.support.annotation.StringRes;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.levels.Level;
import de.frajul.endlessroll.levels.LevelPack;
import de.frajul.endlessroll.main.GameActivity;
/**
@ -19,6 +18,7 @@ public class GoalMessageLevelButton implements View.OnClickListener {
private GameActivity gameActivity;
private GoalMessageLevelButtonOnClickListener clickListener;
private Level level;
private boolean showingToNextWorld = false;
private View layout;
private TextView text;
@ -26,6 +26,7 @@ public class GoalMessageLevelButton implements View.OnClickListener {
private ImageView star2;
private ImageView star3;
private ImageView energy;
private View bottomLayout;
public GoalMessageLevelButton(GameActivity gameActivity, GoalMessageLevelButtonOnClickListener clickListener, View layout) {
this.gameActivity = gameActivity;
@ -42,18 +43,31 @@ public class GoalMessageLevelButton implements View.OnClickListener {
star2 = (ImageView) layout.findViewById(R.id.goal_message_levelbutton_star2);
star3 = (ImageView) layout.findViewById(R.id.goal_message_levelbutton_star3);
energy = (ImageView) layout.findViewById(R.id.goal_message_levelbutton_energy);
bottomLayout = layout.findViewById(R.id.goal_message_bottom_layout);
}
public void setVisible(boolean visible){
public void setVisible(boolean visible) {
layout.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
public void init(@StringRes int textId, Level level) {
this.level = level;
initShowToNextWorld(false, null);
text.setText(gameActivity.getString(textId, level.getId()));
showCollectedCurrency(level.getCollectedStars(), level.isEnergyCollected());
}
public void initShowToNextWorld(boolean show, LevelPack currentLevelPack) {
showingToNextWorld = show;
bottomLayout.setVisibility(show ? View.GONE : View.VISIBLE);
if (show) {
String nextWorld = gameActivity.getLevelManager().getNextLevelPack(currentLevelPack)
.getName();
text.setText(
gameActivity.getString(R.string.goal_message_next_world_format_s, nextWorld));
}
}
private void showCollectedCurrency(boolean[] stars, boolean energy) {
if (stars[0])
this.star1.setImageResource(R.drawable.currency_star);
@ -69,10 +83,14 @@ public class GoalMessageLevelButton implements View.OnClickListener {
return level;
}
public View getView(){
public View getView() {
return layout;
}
public boolean isShowingToNextWorld() {
return showingToNextWorld;
}
@Override
public void onClick(View v) {
clickListener.onClick(this);