First implement of Worlds

This commit is contained in:
= 2016-11-14 15:32:39 +01:00
parent a11523ddb2
commit def72f84b2
38 changed files with 274 additions and 115 deletions

View File

@ -66,14 +66,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@ -82,6 +74,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />

View File

@ -22,12 +22,13 @@ public final class R {
public static final int countdown=0x7f05000a;
public static final int decrease=0x7f05000b;
public static final int fade_in=0x7f05000c;
public static final int rotate=0x7f05000d;
public static final int scale_up=0x7f05000e;
public static final int shrink=0x7f05000f;
public static final int slide_in_left=0x7f050010;
public static final int slide_in_right=0x7f050011;
public static final int slide_in_top=0x7f050012;
public static final int fade_out=0x7f05000d;
public static final int rotate=0x7f05000e;
public static final int scale_up=0x7f05000f;
public static final int shrink=0x7f050010;
public static final int slide_in_left=0x7f050011;
public static final int slide_in_right=0x7f050012;
public static final int slide_in_top=0x7f050013;
}
public static final class attr {
/** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>"

View File

@ -1,4 +1,5 @@
<levelPack name="Grasslands" id="1">
<levelPack>
<world>GRASSLANDS</world>
<levels class="java.util.ArrayList">
<level number="1" goalX="22.606565" startSpeed="0.25" endSpeed="0.7" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">

View File

@ -1,4 +1,5 @@
<levelPack name="Testcave" id="0">
<levelPack>
<world>TESTCAVE</world>
<levels class="java.util.ArrayList">
<level number="1" goalX="32.129963" startSpeed="0.25" endSpeed="0.7" terrainEdge="0.305" ceilingEdge="0.538">
<terrainTiles class="java.util.ArrayList">

View File

@ -47,6 +47,10 @@
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\anim\\abc_grow_fade_in_from_bottom.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\exploded-aar\\com.android.support\\appcompat-v7\\23.1.1\\res\\anim\\abc_grow_fade_in_from_bottom.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\anim\\fade_out.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\src\\main\\res\\anim\\fade_out.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\anim\\shrink.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\src\\main\\res\\anim\\shrink.xml"

View File

@ -7,14 +7,14 @@
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\layout\\toolshop.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\src\\main\\res\\layout\\toolshop.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\layout\\worlds.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\src\\main\\res\\layout\\worlds.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\layout\\abc_screen_simple_overlay_action_mode.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\exploded-aar\\com.android.support\\appcompat-v7\\23.1.1\\res\\layout\\abc_screen_simple_overlay_action_mode.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\layout\\worlds.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\src\\main\\res\\layout\\worlds.xml"
},
{
"merged": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\res\\merged\\debug\\layout\\abc_screen_simple.xml",
"source": "C:\\Users\\Julian\\AndroidStudioProjects\\EndlessRoll\\app\\build\\intermediates\\exploded-aar\\com.android.support\\appcompat-v7\\23.1.1\\res\\layout\\abc_screen_simple.xml"

View File

@ -1,2 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<merger version="3"><dataSet config="23.1.1"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\intermediates\exploded-aar\com.android.support\support-v4\23.1.1\assets"/></dataSet><dataSet config="23.1.1"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.1.1\assets"/></dataSet><dataSet config="main"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets"><file name="fontBaron.ttf" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\fontBaron.ttf"/><file name="levelpacks/Grasslands.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpacks\Grasslands.xml"/><file name="levelpacks/Testcave.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpacks\Testcave.xml"/><file name="levelpack_01.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpack_01.xml"/><file name="particleEffects/collectStar.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\collectStar.pe"/><file name="particleEffects/explosion.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\explosion.pe"/><file name="particleEffects/magnet.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\magnet.pe"/><file name="particleEffects/particle.png" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\particle.png"/><file name="particleEffects/star.png" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\star.png"/><file name="shader/entityFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\entityFragmentShader.glsl"/><file name="shader/entityVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\entityVertexShader.glsl"/><file name="shader/particleFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\particleFragmentShader.glsl"/><file name="shader/simpleFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\simpleFragmentShader.glsl"/><file name="shader/simpleVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\simpleVertexShader.glsl"/><file name="shader/terrainVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\terrainVertexShader.glsl"/><file name="testlevelpack.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\testlevelpack.xml"/></source><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\generated\assets\shaders\debug"/></dataSet><dataSet config="debug"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\debug\assets"/></dataSet></merger>
<merger version="3"><dataSet config="23.1.1"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\intermediates\exploded-aar\com.android.support\support-v4\23.1.1\assets"/></dataSet><dataSet config="23.1.1"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.1.1\assets"/></dataSet><dataSet config="main"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets"><file name="fontBaron.ttf" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\fontBaron.ttf"/><file name="levelpacks/Grasslands.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpacks\Grasslands.xml"/><file name="levelpacks/Testcave.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpacks\Testcave.xml"/><file name="levelpack_01.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpack_01.xml"/><file name="particleEffects/collectStar.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\collectStar.pe"/><file name="particleEffects/explosion.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\explosion.pe"/><file name="particleEffects/magnet.pe" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\magnet.pe"/><file name="particleEffects/particle.png" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\particle.png"/><file name="particleEffects/star.png" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\particleEffects\star.png"/><file name="shader/entityFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\entityFragmentShader.glsl"/><file name="shader/entityVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\entityVertexShader.glsl"/><file name="shader/particleFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\particleFragmentShader.glsl"/><file name="shader/simpleFragmentShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\simpleFragmentShader.glsl"/><file name="shader/simpleVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\simpleVertexShader.glsl"/><file name="shader/terrainVertexShader.glsl" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\shader\terrainVertexShader.glsl"/><file name="testlevelpack.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\testlevelpack.xml"/><file name="levelpacks/Icy Mountains.xml" path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\main\assets\levelpacks\Icy Mountains.xml"/></source><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\build\generated\assets\shaders\debug"/></dataSet><dataSet config="debug"><source path="C:\Users\Julian\AndroidStudioProjects\EndlessRoll\app\src\debug\assets"/></dataSet></merger>

File diff suppressed because one or more lines are too long

View File

@ -16,7 +16,8 @@
android:layout_height="match_parent"
android:layout_below="@+id/worlds_topbar"
android:layout_centerHorizontal="true"
android:layout_margin="10dp" >
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp">
<LinearLayout
android:id="@+id/worlds_layout"

View File

@ -11,12 +11,13 @@ int anim abc_slide_out_top 0x7f050009
int anim countdown 0x7f05000a
int anim decrease 0x7f05000b
int anim fade_in 0x7f05000c
int anim rotate 0x7f05000d
int anim scale_up 0x7f05000e
int anim shrink 0x7f05000f
int anim slide_in_left 0x7f050010
int anim slide_in_right 0x7f050011
int anim slide_in_top 0x7f050012
int anim fade_out 0x7f05000d
int anim rotate 0x7f05000e
int anim scale_up 0x7f05000f
int anim shrink 0x7f050010
int anim slide_in_left 0x7f050011
int anim slide_in_right 0x7f050012
int anim slide_in_top 0x7f050013
int attr actionBarDivider 0x7f010063
int attr actionBarItemBackground 0x7f010064
int attr actionBarPopupTheme 0x7f01005d

View File

@ -1,4 +1,5 @@
<levelPack name="Grasslands" id="1">
<levelPack>
<world>GRASSLANDS</world>
<levels class="java.util.ArrayList">
<level number="1" goalX="22.606565" startSpeed="0.25" endSpeed="0.7" terrainEdge="-0.6" ceilingEdge="1.0">
<terrainTiles class="java.util.ArrayList">

View File

@ -1,4 +1,5 @@
<levelPack name="Testcave" id="0">
<levelPack>
<world>TESTCAVE</world>
<levels class="java.util.ArrayList">
<level number="1" goalX="32.129963" startSpeed="0.25" endSpeed="0.7" terrainEdge="0.305" ceilingEdge="0.538">
<terrainTiles class="java.util.ArrayList">

View File

@ -19,6 +19,12 @@ public class Background extends ArrayList<Entity> {
super.add(createPart(-HALF_PART_WIDTH));
}
public void changeTexture(Texture texture) {
this.texture = texture;
for (Entity entity : this)
entity.setTexture(texture);
}
private Entity createPart(float xLeftEdge) {
return new Entity(texture, new Vector(xLeftEdge + HALF_PART_WIDTH, 0), PART_WIDTH, 2);
}
@ -28,10 +34,11 @@ public class Background extends ArrayList<Entity> {
for (Entity part : this)
part.move(movement);
if (!super.isEmpty()) {
Entity last = super.get(super.size()-1);
if (last.getRightEdge() -cameraX < 3) {
super.add(createPart(last.getRightEdge()-0.001f));
}if(super.get(0).getRightEdge() -cameraX< -3){
Entity last = super.get(super.size() - 1);
if (last.getRightEdge() - cameraX < 3) {
super.add(createPart(last.getRightEdge() - 0.001f));
}
if (super.get(0).getRightEdge() - cameraX < -3) {
super.remove(0);
}
}

View File

@ -1,16 +1,16 @@
package com.example.julian.endlessroll.entities;
import com.example.julian.endlessroll.data.Vector;
import com.example.julian.endlessroll.entities.textures.Texture;
import com.example.julian.endlessroll.levels.ObstacleData;
import com.example.julian.endlessroll.levels.worlds.World;
/**
* Created by Julian on 20.11.2015.
*/
public class Obstacle extends Entity {
public Obstacle(Texture texture, ObstacleData data, float terrainEdge) {
super(texture, new Vector(data.getX(), data.getY()), data.getWidth(), data.getHeight());
public Obstacle(World world, ObstacleData data, float terrainEdge) {
super(world.getObstacle(), new Vector(data.getX(), data.getY()), data.getWidth(), data.getHeight());
if (data.isAttachedToGround())
super.setToTerrain(terrainEdge);
}

View File

@ -26,6 +26,7 @@ public class Player extends Entity {
}
public void init(float terrainEdge, float startSpeed, float endSpeed) {
GameLog.i("init: "+startSpeed+"; "+endSpeed);
super.setToTerrain(terrainEdge);
super.getPosition().x = START_X;
super.setMovement(new Vector(speed, 0));
@ -37,7 +38,6 @@ public class Player extends Entity {
public void setSpeedByProgress(float progress) {
this.speed = ((endSpeed - startSpeed) * progress + startSpeed) * SPEED;
super.getMovement().x = speed;
GameLog.i("Speed: "+ speed);
}
public float getProgress() {

View File

@ -1,9 +1,14 @@
package com.example.julian.endlessroll.entities.textures;
import android.content.Context;
import android.support.annotation.DrawableRes;
import com.example.julian.endlessroll.R;
import com.example.julian.endlessroll.entities.tools.ToolType;
import com.example.julian.endlessroll.levels.worlds.World;
import java.util.HashMap;
import java.util.Map;
/**
* Created by Julian on 05.12.2015.
@ -12,12 +17,9 @@ public class TexturePack {
private TextureLoader loader;
public final Texture background;
public final Texture goal;
public final Texture terrain;
public final Texture playerArrow;
public final Texture player;
public final Texture obstacle;
public final Texture star;
public final Texture blueParticle;
public final Texture yellowParticle;
@ -25,13 +27,10 @@ public class TexturePack {
public TexturePack(Context context) {
loader = new TextureLoader(context);
background = loadTexture(R.drawable.background);
goal = loadTexture(R.drawable.goal);
terrain = loadAtlas(R.drawable.terrain, 1, 1);
player = loadTexture(R.drawable.ball);
playerArrow = loadTexture(R.drawable.playerarrow);
obstacle = loadTexture(R.drawable.obstacle);
star = loadTexture(R.drawable.star);
blueParticle = loadTexture(R.drawable.blueparticle);
@ -39,14 +38,15 @@ public class TexturePack {
redParticle = loadTexture(R.drawable.redparticle);
ToolType.loadAllToolTextures(this);
World.loadAllSpecificTextures(this);
}
private Texture loadTexture(int id) {
public Texture loadTexture(@DrawableRes int id) {
int texId = loader.loadTextureId(id, false);
return new Texture(texId, 1, 1);
}
public Texture loadAtlas(int id, int atlasWidth, int atlasHeight) {
public Texture loadAtlas(@DrawableRes int id, int atlasWidth, int atlasHeight) {
int texId = loader.loadTextureId(id, true);
return new Texture(texId, atlasWidth, atlasHeight);
}

View File

@ -1,12 +1,13 @@
package com.example.julian.endlessroll.entities.tileLists;
import com.example.julian.endlessroll.entities.textures.Texture;
import com.example.julian.endlessroll.entities.textures.TexturePack;
@SuppressWarnings("serial")
public class Ceiling extends TileList {
public Ceiling(TexturePack textures) {
super(Type.CEILING, textures.terrain);
public Ceiling(Texture texture) {
super(Type.CEILING, texture);
}
}

View File

@ -1,12 +1,13 @@
package com.example.julian.endlessroll.entities.tileLists;
import com.example.julian.endlessroll.entities.textures.Texture;
import com.example.julian.endlessroll.entities.textures.TexturePack;
@SuppressWarnings("serial")
public class Terrain extends TileList {
public Terrain(TexturePack textures) {
super(TileList.Type.TERRAIN, textures.terrain);
public Terrain(Texture texture) {
super(TileList.Type.TERRAIN, texture);
}
}

View File

@ -1,7 +1,9 @@
package com.example.julian.endlessroll.entities.tileLists;
import com.example.julian.endlessroll.entities.Entity;
import com.example.julian.endlessroll.entities.textures.Texture;
import com.example.julian.endlessroll.levels.TileData;
import com.example.julian.endlessroll.levels.worlds.World;
import java.util.ArrayList;
import java.util.List;
@ -34,7 +36,8 @@ public class TileList extends ArrayList<Tile> {
this.texture = texture;
}
public void loadData(float edge, List<TileData> tileData) {
public void loadData(World world, float edge, List<TileData> tileData) {
this.texture = world.getTerrain();
this.endless = false;
super.clear();
for (TileData data : tileData)
@ -42,8 +45,8 @@ public class TileList extends ArrayList<Tile> {
this.edge = edge;
}
public void createEndless(float edge) {
loadData(edge, new ArrayList<TileData>());
public void createEndless(World world, float edge) {
loadData(world, edge, new ArrayList<TileData>());
super.add(createEndlessTile(0));
this.endless = true;
}

View File

@ -23,7 +23,7 @@ public class LevelManager extends ArrayList<LevelPack> {
dataStorageHandler.readLevelProgress(pack);
dataStorageHandler.readLevelPackLocked(pack);
pack.tryToUnlockFirstLevel();
if (pack.getId() == 0)
if (pack.getWorld().getIndex() == 0)
pack.setLocked(false);
super.add(pack);
} catch (Exception e) {
@ -37,7 +37,7 @@ public class LevelManager extends ArrayList<LevelPack> {
Collections.sort(this, new Comparator<LevelPack>() {
@Override
public int compare(LevelPack lhs, LevelPack rhs) {
return lhs.getId() - rhs.getId();
return lhs.getWorld().getIndex() - rhs.getWorld().getIndex();
}
});
}
@ -55,7 +55,7 @@ public class LevelManager extends ArrayList<LevelPack> {
public void reset() {
for (LevelPack pack : this) {
pack.reset();
if (pack.getId() != 0)
if (pack.getWorld().getIndex() != 0)
pack.setLocked(true);
}
}
@ -73,9 +73,9 @@ public class LevelManager extends ArrayList<LevelPack> {
}
public LevelPack nextLevelPack(LevelPack old) {
int oldId = old.getId();
int oldId = old.getWorld().getIndex();
for (LevelPack pack : this) {
if (pack.getId() == oldId + 1)
if (pack.getWorld().getIndex() == oldId + 1)
return pack;
}
return null;

View File

@ -1,6 +1,9 @@
package com.example.julian.endlessroll.levels;
import com.example.julian.endlessroll.levels.worlds.World;
import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Root;
@ -12,22 +15,12 @@ import java.util.List;
@Root
public class LevelPack {
@Attribute
private String name;
@Attribute
private int id;
@Element
private World world;
@ElementList
private List<Level> levels;
private boolean locked;
public String getName() {
return name;
}
public Integer getId() {
return id;
}
public List<Level> getLevels() {
return levels;
}
@ -51,6 +44,10 @@ public class LevelPack {
return levels.size() * 3;
}
public World getWorld() {
return world;
}
public void tryToUnlockFirstLevel() {
try {
levels.get(0).setUnlocked(true);

View File

@ -0,0 +1,77 @@
package com.example.julian.endlessroll.levels.worlds;
import android.support.annotation.DrawableRes;
import com.example.julian.endlessroll.R;
import com.example.julian.endlessroll.entities.textures.Texture;
import com.example.julian.endlessroll.entities.textures.TexturePack;
/**
* Created by Julian on 14.11.2016.
*/
public enum World {
GRASSLANDS(0, "Grasslands", R.drawable.grasslands_preview, R.drawable.background, R.drawable.terrain, R.drawable.obstacle),
TESTCAVE(1, "Testcave", R.drawable.grasslands_preview, R.drawable.background, R.drawable.terrain, R.drawable.obstacle),
ICY_MOUNTAINS(2, "Icy Mountains", R.drawable.grasslands_preview, R.drawable.background, R.drawable.terrain, R.drawable.obstacle);
private int index;
private String name;
@DrawableRes
private int previewId;
@DrawableRes
private int backgroundId;
@DrawableRes
private int terrainId;
@DrawableRes
private int obstacleId;
private Texture background;
private Texture terrain;
private Texture obstacle;
World(int index, String name, @DrawableRes int previewId, @DrawableRes int backgroundId, @DrawableRes int terrainId, @DrawableRes int obstacleId) {
this.index = index;
this.name = name;
this.previewId = previewId;
this.backgroundId = backgroundId;
this.terrainId = terrainId;
this.obstacleId = obstacleId;
}
public static void loadAllSpecificTextures(TexturePack texturePack){
for(World world : values())
world.loadSpecificTextures(texturePack);
}
private void loadSpecificTextures(TexturePack texturePack) {
background = texturePack.loadTexture(backgroundId);
terrain = texturePack.loadTexture(terrainId);
obstacle = texturePack.loadTexture(obstacleId);
}
public int getIndex() {
return index;
}
public String getName() {
return name;
}
public int getPreviewId() {
return previewId;
}
public Texture getBackground() {
return background;
}
public Texture getTerrain() {
return terrain;
}
public Texture getObstacle() {
return obstacle;
}
}

View File

@ -84,7 +84,7 @@ public class DataStorageHandler {
public void readLevelProgress(LevelPack levelPack) {
database.open();
for (Level level : levelPack.getLevels()) {
database.readLevelProgress(levelPack.getId(), level);
database.readLevelProgress(levelPack.getWorld().getIndex(), level);
}
database.close();
}

View File

@ -95,7 +95,7 @@ public class Game extends Rendering<GameScene> {
if (scene != null) {
collectedStars.clear();
particleSystem.deleteAllSources();
scene.loadLevel(level);
scene.loadLevel(level, levelPack.getWorld());
player = scene.getPlayer();
if (viewManager.isScreenSizeSet())
viewManager.resetViews();
@ -124,11 +124,13 @@ public class Game extends Rendering<GameScene> {
particleSystem.update(timer);
float playerProgress = 0;
float playerSpeed = 0;
float playerY = 0;
if (player != null) {
playerProgress = player.getProgress();
playerSpeed = player.getSpeed();
playerY = player.getPosition().y;
}
viewManager.update(gameState == GameState.RUNNING, timer, playerProgress, playerSpeed);
viewManager.update(gameState == GameState.RUNNING, timer, playerProgress, playerSpeed, playerY);
switch (gameState) {
case RUNNING:
if (player.getPosition().y < -2f) {
@ -237,11 +239,11 @@ public class Game extends Rendering<GameScene> {
}
viewManager.showMessage(levelPack.isLastLevel(level), MessageType.WIN);
dataStorageHandler.writeLevelProgress(levelPack.getId(), level);
dataStorageHandler.writeLevelProgress(levelPack.getWorld().getIndex(), level);
Level nextLevel = levelPack.getNextLevel(level);
if (nextLevel != null) {
nextLevel.setUnlocked(true);
dataStorageHandler.writeLevelProgress(levelPack.getId(), nextLevel);
dataStorageHandler.writeLevelProgress(levelPack.getWorld().getIndex(), nextLevel);
}else{
LevelPack nextLevelPack = levelManager.nextLevelPack(levelPack);
if(nextLevelPack != null){

View File

@ -15,6 +15,7 @@ import com.example.julian.endlessroll.entities.tools.ToolType;
import com.example.julian.endlessroll.levels.Level;
import com.example.julian.endlessroll.levels.ObstacleData;
import com.example.julian.endlessroll.levels.StarData;
import com.example.julian.endlessroll.levels.worlds.World;
import com.example.julian.endlessroll.main.GameLog;
import java.util.ArrayList;
@ -26,6 +27,7 @@ import java.util.List;
*/
public class GameScene extends Scene {
private World currentWorld;
private CollisionDetector collisionDetector;
private Goal goal;
@ -41,11 +43,13 @@ public class GameScene extends Scene {
goal = new Goal(textures.goal);
}
public void loadLevel(Level level) throws Exception {
public void loadLevel(Level level, World world) throws Exception {
this.currentWorld = world;
reset();
lock.lock();
terrain.loadData(level.getTerrainEdge(), level.getTerrainTiles());
ceiling.loadData(level.getCeilingEdge(), level.getCeilingTiles());
background.changeTexture(world.getBackground());
terrain.loadData(world, level.getTerrainEdge(), level.getTerrainTiles());
ceiling.loadData(world, level.getCeilingEdge(), level.getCeilingTiles());
super.add(goal);
player.init(terrain.getEdge(), level.getStartSpeed(), level.getEndSpeed());
super.add(player);
@ -77,6 +81,7 @@ public class GameScene extends Scene {
}
public void onStarCollision(Star collisionStar) {
lock.lock();
Iterator<Star> iter = stars.iterator();
while (iter.hasNext()) {
Star star = iter.next();
@ -85,10 +90,12 @@ public class GameScene extends Scene {
iter.remove();
}
}
lock.unlock();
//TODO: change lock with atomic lists!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
}
public void addObstacle(ObstacleData data) {
Obstacle obstacle = new Obstacle(textures.obstacle, data, terrain.getEdge());
Obstacle obstacle = new Obstacle(currentWorld, data, terrain.getEdge());
lock.lock();
super.add(obstacle);
obstacles.add(obstacle);
@ -118,8 +125,8 @@ public class GameScene extends Scene {
@Override
public void update(Timer timer) {
super.update(timer);
float playerProgress = player.getPosition().x / goalX;
player.setSpeedByProgress(playerProgress);
player.setSpeedByProgress(player.getProgress() / goalX);
lock.lock();
for (Tool tool : tools) {
tool.update(timer);
if (tool instanceof Bomb) {
@ -128,6 +135,7 @@ public class GameScene extends Scene {
bomb.explode(obstacles, collisionDetector);
}
}
lock.unlock();
}
@Override

View File

@ -35,6 +35,7 @@ public class Physics {
}
public void applyGravity(GameScene scene) {
scene.lock.lock();
scene.getPlayer().getMovement().y -= GRAVITY_FORCE;
for (Tool tool : scene.getTools()) {
if (tool.isFloating())
@ -70,6 +71,7 @@ public class Physics {
tool.setToTerrain(orientingHeight);
}
}
scene.lock.unlock();
}
@Nullable

View File

@ -8,6 +8,7 @@ import com.example.julian.endlessroll.entities.particles.ParticleSystem;
import com.example.julian.endlessroll.entities.textures.TexturePack;
import com.example.julian.endlessroll.entities.tileLists.Ceiling;
import com.example.julian.endlessroll.entities.tileLists.Terrain;
import com.example.julian.endlessroll.levels.worlds.World;
import com.example.julian.endlessroll.rendering.Lock;
import java.util.ArrayList;
@ -35,9 +36,9 @@ public abstract class Scene extends ArrayList<Entity> {
this.particleSystem = particleSystem;
setTexturePack(texturePack);
playerArrow = new Entity(textures.playerArrow, new Vector(0, 0.9f), .2f, .2f);
background = new Background(textures.background);
terrain = new Terrain(textures);
ceiling = new Ceiling(textures);
background = new Background(World.GRASSLANDS.getBackground());
terrain = new Terrain(World.GRASSLANDS.getTerrain());
ceiling = new Ceiling(World.GRASSLANDS.getTerrain());
player = new Player(textures.player);
lock = new Lock();
}

View File

@ -3,12 +3,13 @@ package com.example.julian.endlessroll.main.game;
import com.example.julian.endlessroll.entities.Entity;
import com.example.julian.endlessroll.entities.particles.ParticleSystem;
import com.example.julian.endlessroll.entities.textures.TexturePack;
import com.example.julian.endlessroll.levels.worlds.World;
public class StartScene extends Scene {
public StartScene(TexturePack texturePack, ParticleSystem particleSystem) {
super(texturePack, particleSystem);
terrain.createEndless(-.8f);
terrain.createEndless(World.ICY_MOUNTAINS, -.8f);
player.init(terrain.getEdge(), 0.5f, 0.5f);
super.add(player);
}

View File

@ -77,6 +77,7 @@ public class StartScreen extends GLScreen<RelativeLayout> implements View.OnClic
user.setStarCount(100);
levelManager.unlockAllLevels();
levelManager.unlockAllPacks();
}
}

View File

@ -104,9 +104,11 @@ public class GameRenderer implements GLSurfaceView.Renderer {
GLES20.glClearColor(1, 1, 1, 1.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
scene.lock.lock();
renderEntities(gl, scene);
renderTileList(gl, scene.getTerrain(), scene);
renderTileList(gl, scene.getCeiling(), scene);
scene.lock.unlock();
renderFbo(gl);
}
}
@ -114,12 +116,10 @@ public class GameRenderer implements GLSurfaceView.Renderer {
private void renderEntities(GL10 gl, Scene scene) {
entityShader.start();
entityShader.loadMVPMatrix(matrixCreator, scene.cameraX);
scene.lock.lock();
for (Entity backgroundPart : scene.getBackground())
renderEntity(gl, backgroundPart);
for (Entity entity : scene)
renderEntity(gl, entity);
scene.lock.unlock();
entityShader.stop();
}

View File

@ -19,7 +19,7 @@ import java.util.List;
*/
public class MyDatabase extends DatabaseAdapter {
private final static int VERSION = 5;
private final static int VERSION = 6;
private final static String DATABASE_NAME = "DATABASE";
private SQLTableColumn levelpackColumn, levelColumn, unlockedColumn, completedColumn, starsColumn;
private SQLTableColumn idColumn, toolTypeColumn, lockedColumn, boughtColumn;
@ -31,8 +31,6 @@ public class MyDatabase extends DatabaseAdapter {
@Override
protected void createColumns() {
//TODO: no names needed for columns and tables
//TODO: really use database adapter???
levelpackColumn = new SQLTableColumn("LEVELPACK", SQLTableColumn.ColumnType.INTEGER, SQLTableColumn.ColumnExtra.NOT_NULL);
levelColumn = new SQLTableColumn("LEVEL", SQLTableColumn.ColumnType.INTEGER, SQLTableColumn.ColumnExtra.NOT_NULL);
unlockedColumn = new SQLTableColumn("UNLOCKED", SQLTableColumn.ColumnType.INTEGER, SQLTableColumn.ColumnExtra.NOT_NULL);
@ -86,13 +84,13 @@ public class MyDatabase extends DatabaseAdapter {
public void writeLevelPackLocked(LevelPack levelPack) {
ContentValues values = new ContentValues();
values.put(levelpackColumn.getKey(), levelPack.getId());
values.put(levelpackColumn.getKey(), levelPack.getWorld().getIndex());
values.put(unlockedColumn.getKey(), levelPack.isLocked() ? 0 : 1);
super.update(levelPackTable, values, levelpackColumn, levelPack.getId());
super.update(levelPackTable, values, levelpackColumn, levelPack.getWorld().getIndex());
}
public void readLevelPackLocked(LevelPack levelPack) {
Cursor cursor = super.getCursor(levelPackTable, levelpackColumn, levelPack.getId());
Cursor cursor = super.getCursor(levelPackTable, levelpackColumn, levelPack.getWorld().getIndex());
if (cursor.moveToFirst()) {
boolean unlocked = cursor.getInt(1) == 1;
levelPack.setLocked(!unlocked);

View File

@ -2,12 +2,15 @@ package com.example.julian.endlessroll.views;
import android.content.Context;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.example.julian.endlessroll.R;
import com.example.julian.endlessroll.entities.tools.ToolSlotSettings;
import com.example.julian.endlessroll.entities.tools.ToolType;
import com.example.julian.endlessroll.main.GameLog;
import com.example.julian.endlessroll.main.game.Game;
import com.example.julian.endlessroll.main.game.GameState;
@ -17,8 +20,22 @@ import java.util.List;
/**
* Created by Julian on 16.01.2016.
*/
public class ToolButtonBar implements View.OnClickListener {
public class ToolButtonBar implements View.OnClickListener, Animation.AnimationListener {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
private Animation fadeIn, fadeOut;
private Game game;
private ToolSlotSettings toolSlotSettings;
private List<ToolButton> buttons = new ArrayList<>(4);
@ -27,17 +44,22 @@ public class ToolButtonBar implements View.OnClickListener {
private RelativeLayout button3;
private RelativeLayout button4;
public ToolButtonBar(Game game, ToolSlotSettings toolSlotSettings, LinearLayout layout) {
public ToolButtonBar(Game game, ToolSlotSettings toolSlotSettings, LinearLayout layout1) {
this.game = game;
this.toolSlotSettings = toolSlotSettings;
Context context = game.getContext();
button1 = (RelativeLayout) layout.findViewById(R.id.toolbutton_1);
fadeIn = AnimationUtils.loadAnimation(game.getContext(), R.anim.fade_in);
fadeIn.setAnimationListener(this);
fadeOut = AnimationUtils.loadAnimation(game.getContext(), R.anim.fade_out);
button1 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_1);
button1.setOnClickListener(this);
button2 = (RelativeLayout) layout.findViewById(R.id.toolbutton_2);
button2 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_2);
button2.setOnClickListener(this);
button3 = (RelativeLayout) layout.findViewById(R.id.toolbutton_3);
button3 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_3);
button3.setOnClickListener(this);
button4 = (RelativeLayout) layout.findViewById(R.id.toolbutton_4);
button4 = (RelativeLayout) layout1.findViewById(R.id.toolbutton_4);
button4.setOnClickListener(this);
buttons.add(new ToolButton(toolSlotSettings.get(0), context, button1));
buttons.add(new ToolButton(toolSlotSettings.get(1), context, button2));
@ -45,6 +67,20 @@ public class ToolButtonBar implements View.OnClickListener {
buttons.add(new ToolButton(toolSlotSettings.get(3), context, button4));
}
public void setTopPrimary(){
button1.startAnimation(fadeIn);
button2.startAnimation(fadeIn);
button3.startAnimation(fadeIn);
button4.startAnimation(fadeIn);
}
public void setBottomPrimary(){
button1.startAnimation(fadeOut);
button2.startAnimation(fadeOut);
button3.startAnimation(fadeOut);
button4.startAnimation(fadeOut);
}
public void changeToolButtonTypes() {
for (int i = 0; i < 4; i++) {
buttons.get(i).changeToolSlot(toolSlotSettings.get(i));
@ -61,7 +97,6 @@ public class ToolButtonBar implements View.OnClickListener {
}
for (ToolButton button : buttons)
button.setProgress(100);
}
public void update(float frameTime) {
@ -97,7 +132,7 @@ public class ToolButtonBar implements View.OnClickListener {
public void onClick(View v) {
if (game.getGameState() == GameState.RUNNING) {
ToolType clickedType = ToolType.NONE;
if (v.equals(button1) && !buttons.get(0).isLocked() && buttons.get(0).getToolType() != ToolType.NONE) {
if (v.equals(button1)&& !buttons.get(0).isLocked() && buttons.get(0).getToolType() != ToolType.NONE) {
clickedType = buttons.get(0).getToolType();
} else if (v.equals(button2) && !buttons.get(1).isLocked() && buttons.get(0).getToolType() != ToolType.NONE) {
clickedType = buttons.get(1).getToolType();

View File

@ -118,7 +118,7 @@ public class ViewManager implements View.OnClickListener {
countdown.stop();
}
public void update(final boolean gameRunning, final Timer timer, final float playerX, final float playerXMov) {
public void update(final boolean gameRunning, final Timer timer, final float playerX, final float playerXMov, final float playerY) {
gameViewHandler.startInUiThread(new Runnable() {
@Override
public void run() {

View File

@ -10,6 +10,7 @@ import android.widget.TextView;
import com.example.julian.endlessroll.R;
import com.example.julian.endlessroll.levels.LevelPack;
import com.example.julian.endlessroll.levels.worlds.World;
/**
* Created by Julian on 01.08.2016.
@ -17,6 +18,7 @@ import com.example.julian.endlessroll.levels.LevelPack;
public class WorldButton extends RelativeLayout {
private LevelPack levelPack;
private World world;
private TextView title;
private ImageView previewImage;
@ -27,6 +29,8 @@ public class WorldButton extends RelativeLayout {
public WorldButton(Context context, Typeface typeface, View.OnClickListener clickListener, LevelPack levelPack) {
super(context);
this.levelPack = levelPack;
this.world = levelPack.getWorld();
LayoutInflater inflater = LayoutInflater.from(context);
inflater.inflate(R.layout.world_button, this);
super.setOnClickListener(clickListener);
@ -43,10 +47,11 @@ public class WorldButton extends RelativeLayout {
updateInformation();
}
public void updateInformation(){
title.setText(levelPack.getName());
public void updateInformation() {
title.setText(world.getName());
previewImage.setImageDrawable(getContext().getResources().getDrawable(world.getPreviewId()));
levelCount.setText(levelPack.getUnlockedLevels() + "/" + levelPack.getLevels().size());
starCount.setText(levelPack.getCollectedStars() + "/"+levelPack.getAvailableStars());
starCount.setText(levelPack.getCollectedStars() + "/" + levelPack.getAvailableStars());
setLockVisible(levelPack.isLocked());
}

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<alpha
android:duration="2000"
android:fromAlpha="1"
android:toAlpha="0" />
</set>

View File

@ -16,7 +16,8 @@
android:layout_height="match_parent"
android:layout_below="@+id/worlds_topbar"
android:layout_centerHorizontal="true"
android:layout_margin="10dp" >
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp">
<LinearLayout
android:id="@+id/worlds_layout"

View File

@ -66,14 +66,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
@ -82,6 +74,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />