Shapes can now be recieved through fulfilling tasks

This commit is contained in:
=
2017-10-30 16:54:05 +01:00
parent c9e718f6ad
commit 44d7665442
24 changed files with 694 additions and 312 deletions

View File

@ -0,0 +1,31 @@
package de.frajul.endlessroll.entities.shapes;
import android.content.Context;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.levels.LevelManager;
/**
* Created by Julian on 30.10.2017.
*/
public class CollectEnergyTask extends Task {
public CollectEnergyTask(int condition) {
super(condition);
}
@Override
protected boolean checkConditionFulfilled(LevelManager levelManager) {
return levelManager.getTotalCollectedEnergyCount() >= condition;
}
@Override
public String toString(Context context, LevelManager levelManager) {
if (conditionFulfilled) {
return context.getString(R.string.task_collect_energy_format_d, condition);
}
return context.getString(R.string.task_collect_energy_progress_format_ddd, condition,
levelManager.getTotalCollectedEnergyCount(), condition);
}
}

View File

@ -0,0 +1,31 @@
package de.frajul.endlessroll.entities.shapes;
import android.content.Context;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.levels.LevelManager;
/**
* Created by Julian on 30.10.2017.
*/
public class CollectStarTask extends Task {
public CollectStarTask(int condition) {
super(condition);
}
@Override
protected boolean checkConditionFulfilled(LevelManager levelManager) {
return levelManager.getTotalCollectedStarCount() >= condition;
}
@Override
public String toString(Context context, LevelManager levelManager) {
if (conditionFulfilled) {
return context.getString(R.string.task_collect_stars_format_d, condition);
}
return context.getString(R.string.task_collect_stars_progress_format_ddd, condition,
levelManager.getTotalCollectedStarCount(), condition);
}
}

View File

@ -0,0 +1,27 @@
package de.frajul.endlessroll.entities.shapes;
import android.content.Context;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.levels.LevelManager;
/**
* Created by Julian on 30.10.2017.
*/
public class CompleteWorldTask extends Task {
public CompleteWorldTask(int condition) {
super(condition);
}
@Override
protected boolean checkConditionFulfilled(LevelManager levelManager) {
return levelManager.getPackWithId(condition).isAllLevelsFinished();
}
@Override
public String toString(Context context, LevelManager levelManager) {
return context.getString(R.string.task_complete_world_format_d, condition);
}
}

View File

@ -0,0 +1,27 @@
package de.frajul.endlessroll.entities.shapes;
import android.content.Context;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.levels.LevelManager;
/**
* Created by Julian on 30.10.2017.
*/
public class EmptyTask extends Task{
public EmptyTask() {
super(0);
}
@Override
protected boolean checkConditionFulfilled(LevelManager levelManager) {
return true;
}
@Override
public String toString(Context context, LevelManager levelManager) {
return context.getString(R.string.task_empty);
}
}

View File

@ -12,24 +12,37 @@ import de.frajul.endlessroll.entities.textures.TexturePack;
*/
public enum PlayerShape {
BALL(R.string.playershape_name_ball, R.drawable.playershapes_ball),
CLOCK(R.string.playershape_name_clock, R.drawable.playershapes_clock),
HYPNO_SPIRAL(R.string.playershape_name_hypno_spiral, R.drawable.playershapes_hypno_spiral),
PACMAN(R.string.playershape_name_pacman, R.drawable.playershapes_pacman),
SMILEY(R.string.playershape_name_smiley, R.drawable.playershapes_smiley),
WHEEL(R.string.playershape_name_wheel, R.drawable.playershapes_wheel),
SUN(R.string.playershape_name_sun, R.drawable.playershapes_sun);
BALL(R.string.playershape_name_ball, R.string.playershape_description_ball,
R.drawable.playershapes_ball, new EmptyTask()),
CLOCK(R.string.playershape_name_clock, R.string.playershape_description_clock,
R.drawable.playershapes_clock, new CollectStarTask(15)),
HYPNO_SPIRAL(R.string.playershape_name_hypno_spiral,
R.string.playershape_description_hypno_spiral, R.drawable.playershapes_hypno_spiral,
new CollectEnergyTask(3)),
PACMAN(R.string.playershape_name_pacman, R.string.playershape_description_pacman,
R.drawable.playershapes_pacman, new CompleteWorldTask(1)),
SMILEY(R.string.playershape_name_smiley, R.string.playershape_description_smiley,
R.drawable.playershapes_smiley, new CollectStarTask(30)),
WHEEL(R.string.playershape_name_wheel, R.string.playershape_description_wheel,
R.drawable.playershapes_wheel, new CollectStarTask(48)),
SUN(R.string.playershape_name_sun, R.string.playershape_description_sun,
R.drawable.playershapes_sun, new CollectEnergyTask(16));
@StringRes
private int nameId;
@StringRes
private int descriptionId;
@DrawableRes
private int drawableId;
private Task unlockTask;
private Texture texture;
PlayerShape(@StringRes int nameId, @DrawableRes int drawableId) {
PlayerShape(@StringRes int nameId, @StringRes int descriptionId, @DrawableRes int drawableId, Task unlockTask) {
this.nameId = nameId;
this.descriptionId = descriptionId;
this.drawableId = drawableId;
this.unlockTask = unlockTask;
}
public static void loadAllTextures(TexturePack texturePack) {
@ -43,11 +56,20 @@ public enum PlayerShape {
texture = texturePack.loadTexture(drawableId);
}
public Task getUnlockTask() {
return unlockTask;
}
@StringRes
public int getNameId() {
return nameId;
}
@StringRes
public int getDescriptionId() {
return descriptionId;
}
@DrawableRes
public int getDrawableId() {
return drawableId;

View File

@ -0,0 +1,31 @@
package de.frajul.endlessroll.entities.shapes;
import android.content.Context;
import de.frajul.endlessroll.levels.LevelManager;
/**
* Created by Julian on 29.10.2017.
*/
public abstract class Task {
protected int condition;
protected boolean conditionFulfilled;
public Task(int condition) {
this.condition = condition;
}
public void update(LevelManager levelManager){
conditionFulfilled = checkConditionFulfilled(levelManager);
}
protected abstract boolean checkConditionFulfilled(LevelManager levelManager);
public abstract String toString(Context context, LevelManager levelManager);
public boolean isConditionFulfilled() {
return conditionFulfilled;
}
}

View File

@ -2,13 +2,13 @@ package de.frajul.endlessroll.main.screens;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TableRow;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.entities.shapes.PlayerShape;
import de.frajul.endlessroll.entities.shapes.PlayerShapeButtonOnClickListener;
import de.frajul.endlessroll.main.GameActivity;
import de.frajul.endlessroll.views.PlayerShapeButton;
import de.frajul.endlessroll.views.ShapeInspector;
import de.frajul.endlessroll.views.TopBar;
/**
@ -18,6 +18,8 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
private PlayerShapeButton activeButton;
private ShapeInspector shapeInspector;
private TopBar topBar;
private LinearLayout topRow;
private LinearLayout bottomRow;
@ -27,6 +29,8 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
topBar = super.createTopBar(R.id.shape_shop_topbar);
topRow = (LinearLayout) layout.findViewById(R.id.shape_shop_topRow);
bottomRow = (LinearLayout) layout.findViewById(R.id.shape_shop_bottomRow);
shapeInspector = new ShapeInspector(gameActivity,
layout.findViewById(R.id.shape_shop_shape_inspector));
}
private void createViews() {
@ -35,9 +39,12 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
int i = 0;
int totalShapes = PlayerShape.values().length;
for (PlayerShape playerShape : PlayerShape.values()) {
playerShape.getUnlockTask().update(gameActivity.getLevelManager());
boolean lastInRow = i == totalShapes / 2 || i == totalShapes - 1;
boolean locked = !playerShape.getUnlockTask()
.isConditionFulfilled();
PlayerShapeButton button = new PlayerShapeButton(gameActivity, playerShape, this,
!lastInRow);
locked, !lastInRow);
if (i < totalShapes / 2 + 1)
topRow.addView(button.getView());
else
@ -50,6 +57,8 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
i++;
}
shapeInspector.update(activeButton.getPlayerShape(), activeButton.isLocked());
}
@Override
@ -66,9 +75,12 @@ public class PlayerShapeShopScreen extends Screen<RelativeLayout> implements Pla
@Override
public void onClick(PlayerShapeButton button) {
activeButton.stopRotating();
activeButton = button;
activeButton.startRotating();
gameActivity.getUser().setCurrentPlayerShape(button.getPlayerShape());
shapeInspector.update(button.getPlayerShape(), button.isLocked());
if (!button.isLocked()) {
activeButton.stopRotating();
activeButton = button;
activeButton.startRotating();
gameActivity.getUser().setCurrentPlayerShape(button.getPlayerShape());
}
}
}

View File

@ -1,6 +1,5 @@
package de.frajul.endlessroll.views;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -29,25 +28,29 @@ public class PlayerShapeButton implements View.OnClickListener {
private Button button;
private Animation rotation;
public PlayerShapeButton(GameActivity gameActivity, PlayerShape playerShape, PlayerShapeButtonOnClickListener clickListener, boolean marginToRight) {
private boolean locked;
public PlayerShapeButton(GameActivity gameActivity, PlayerShape playerShape, PlayerShapeButtonOnClickListener clickListener, boolean locked, boolean marginToRight) {
this.clickListener = clickListener;
this.playerShape = playerShape;
this.locked = locked;
view = LayoutInflater.from(gameActivity).inflate(R.layout.shape_button, null);
view.setLayoutParams(createLayoutParams(marginToRight));
textView = (TextView) view.findViewById(R.id.shape_button_textview);
textView.setTypeface(gameActivity.getTypeface());
textView.setText(playerShape.getNameId());
textView.setText(locked ? R.string.playershape_name_locked : playerShape.getNameId());
button = (Button) view.findViewById(R.id.shape_button_button);
button.setBackgroundDrawable(gameActivity.getResources().getDrawable(playerShape.getDrawableId()));
button.setBackgroundDrawable(
gameActivity.getResources().getDrawable(locked ? R.drawable.playershapes_locked : playerShape.getDrawableId()));
button.setOnClickListener(this);
rotation = AnimationUtils.loadAnimation(gameActivity, R.anim.shape_button_rotation);
}
private LinearLayout.LayoutParams createLayoutParams(boolean marginToRight){
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
if(marginToRight)
params.setMargins(0, 0, 60, 0);
private LinearLayout.LayoutParams createLayoutParams(boolean marginToRight) {
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
if (marginToRight)
params.setMargins(0, 0, 60, 0);
return params;
}
@ -68,6 +71,10 @@ public class PlayerShapeButton implements View.OnClickListener {
return view;
}
public boolean isLocked() {
return locked;
}
public PlayerShape getPlayerShape() {
return playerShape;
}

View File

@ -0,0 +1,54 @@
package de.frajul.endlessroll.views;
import android.graphics.Typeface;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.entities.shapes.EmptyTask;
import de.frajul.endlessroll.entities.shapes.PlayerShape;
import de.frajul.endlessroll.entities.shapes.Task;
import de.frajul.endlessroll.main.GameActivity;
/**
* Created by Julian on 03.06.2017.
*/
public class ShapeInspector {
private GameActivity gameActivity;
private TextView title;
private ImageView imageView;
private TextView description;
private ShapeInspectorCheckbox checkbox;
private PlayerShape shape;
private boolean locked;
public ShapeInspector(GameActivity gameActivity, View layout) {
this.gameActivity = gameActivity;
Typeface typeface = gameActivity.getTypeface();
title = (TextView) layout.findViewById(R.id.shape_inspector_title);
title.setTypeface(typeface);
imageView = (ImageView) layout.findViewById(R.id.shape_inspector_imageview);
description = (TextView) layout.findViewById(R.id.shape_inspector_description);
description.setTypeface(typeface);
checkbox = new ShapeInspectorCheckbox(gameActivity, typeface,
layout.findViewById(R.id.shape_inspector_check_box));
}
public void update(PlayerShape shape, boolean locked) {
this.shape = shape;
this.locked = locked;
title.setText(locked ? R.string.playershape_name_locked : shape.getNameId());
imageView.setImageDrawable(gameActivity.getResources()
.getDrawable(locked ? R.drawable.playershapes_locked : shape.getDrawableId()));
description.setText(
locked ? R.string.playershape_description_locked : shape.getDescriptionId());
checkbox.updateForTask(shape.getUnlockTask());
}
}

View File

@ -0,0 +1,50 @@
package de.frajul.endlessroll.views;
import android.graphics.Typeface;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import de.frajul.endlessroll.R;
import de.frajul.endlessroll.entities.shapes.EmptyTask;
import de.frajul.endlessroll.entities.shapes.Task;
import de.frajul.endlessroll.main.GameActivity;
/**
* Created by Julian on 30.10.2017.
*/
public class ShapeInspectorCheckbox {
private GameActivity gameActivity;
private View layout;
private ImageView image;
private TextView textView;
public ShapeInspectorCheckbox(GameActivity gameActivity, Typeface typeface, View layout) {
this.gameActivity = gameActivity;
this.layout = layout;
image = (ImageView) layout.findViewById(R.id.shape_inspector_check_box_image);
textView = (TextView) layout.findViewById(R.id.shape_inspector_check_box_text);
textView.setTypeface(typeface);
}
public void updateForTask(Task task) {
boolean taskNotEmpty = !(task instanceof EmptyTask);
setVisible(taskNotEmpty);
if (taskNotEmpty) {
textView.setText(task.toString(gameActivity, gameActivity.getLevelManager()));
setChecked(task.isConditionFulfilled());
}
}
private void setChecked(boolean checked) {
int drawableId = checked ? R.drawable.guis_checkbox_checked : R.drawable.guis_checkbox_unchecked;
image.setBackgroundDrawable(gameActivity.getResources().getDrawable(drawableId));
}
private void setVisible(boolean visible) {
layout.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
}