/**
* Copyright (C) 2013 Gundog Studios LLC.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.godsandtowers.graphics.menu.layouts;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.Typeface;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.godsandtowers.R;
import com.godsandtowers.core.PlayerStats;
import com.godsandtowers.graphics.game.BitmapCache;
import com.godsandtowers.sprites.BaseCreature;
import com.godsandtowers.sprites.BaseTower;
import com.godsandtowers.sprites.Races;
import com.godsandtowers.util.ADS;
import com.godsandtowers.util.ResourceUtilities;
import com.godsandtowers.util.TDWPreferences;
import com.gundogstudios.modules.Modules;
import com.gundogstudios.util.FastMath;
public class AlmanacRightLayout implements ILayout {
private static final String STORY = "story";
private static final float NOT_SELECTED = .75f;
private static final float SELECTED = 1f;
private LinearLayout upgradeLayout;
private LinearLayout selectionLayout;
private AlmanacLeftLayout leftLayout;
private Activity activity;
private PlayerStats stats;
private View lastView;
public AlmanacRightLayout(Activity activity, AlmanacLeftLayout leftLayout, PlayerStats stats) {
this.activity = activity;
this.stats = stats;
this.leftLayout = leftLayout;
}
public void reset() {
upgradeLayout = new LinearLayout(activity);
upgradeLayout.setOrientation(LinearLayout.VERTICAL);
ADS.placeObtrusiveADMobAD(upgradeLayout);
selectionLayout = new LinearLayout(activity);
selectionLayout.setOrientation(LinearLayout.VERTICAL);
selectionLayout.setBackgroundResource(R.drawable.menu_text_background);
updateSelection();
selectionLayout.addView(getTextView(STORY));
upgradeLayout.addView(selectionLayout);
}
private void updateSelection() {
ArrayList<BaseCreature> creatures = new ArrayList<BaseCreature>();
for (BaseCreature creature : stats.getBaseCreatures()) {
if (creature.isUnlocked()) {
creatures.add(creature);
}
}
Collections.sort(creatures, new Comparator<BaseCreature>() {
@Override
public int compare(BaseCreature lhs, BaseCreature rhs) {
int race = lhs.getRaces() - rhs.getRaces();
if (race == 0)
return FastMath.round(lhs.getCost() - rhs.getCost());
else
return race;
}
});
ArrayList<BaseTower> towers = new ArrayList<BaseTower>();
for (BaseTower tower : stats.getBaseTowers()) {
if (tower.isUnlocked()) {
towers.add(tower);
}
}
Collections.sort(towers, new Comparator<BaseTower>() {
@Override
public int compare(BaseTower lhs, BaseTower rhs) {
int race = lhs.getRaces() - rhs.getRaces();
if (race == 0)
return FastMath.round(lhs.getCost() - rhs.getCost());
else
return race;
}
});
ArrayList<Info> bios = new ArrayList<Info>();
for (int race : Races.ALL_RACES) {
bios.add(new RaceInfo(Races.getName(race)));
}
for (BaseCreature baseCreature : creatures) {
bios.add(new CreatureInfo(baseCreature));
}
for (BaseTower baseTower : towers) {
bios.add(new TowerInfo(baseTower));
}
generateLayout(upgradeLayout, bios);
}
private void generateLayout(LinearLayout wrapper, final ArrayList<Info> bios) {
Gallery gallery = new Gallery(activity);
gallery.setAdapter(new ImageAdapter(bios));
gallery.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (lastView != null) {
((ImageView) lastView).setAlpha(NOT_SELECTED);
}
selectionLayout.removeAllViews();
leftLayout.setModel(null);
if (view != lastView) {
((ImageView) view).setAlpha(SELECTED);
Info info = bios.get(position);
String name = info.getName();
if (info.hasModel()) {
leftLayout.setModel(name);
}
selectionLayout.addView(getTextView(name));
selectionLayout.addView(getRaceView(info.getRace()));
ADS.placeADMobAd(selectionLayout);
lastView = view;
} else {
lastView = null;
selectionLayout.addView(getTextView(STORY));
}
}
});
wrapper.addView(gallery);
ImageView seperator = new ImageView(activity);
seperator.setImageBitmap(BitmapCache.getBitmap(R.drawable.menu_seperator));
wrapper.addView(seperator);
}
private LinearLayout getRaceView(int races) {
LinearLayout layout = new LinearLayout(activity);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setGravity(Gravity.CENTER);
for (int race : Races.asArray(races)) {
ImageView image = new ImageView(activity);
Bitmap bitmap = BitmapCache.getBitmap(ResourceUtilities.getIconID(Races.getName(race)));
image.setImageBitmap(bitmap);
layout.addView(image);
}
return layout;
}
private TextView getTextView(String name) {
TextView jobView = new TextView(activity);
jobView.setText(ResourceUtilities.getString("almanac_" + name));
jobView.setTypeface((Typeface) Modules.PREFERENCES.get(TDWPreferences.TEXT_FONT, Typeface.DEFAULT));
jobView.setTextColor(Color.LTGRAY);
jobView.setTextSize(15);
// jobView.setGravity(Gravity.CENTER);
return jobView;
}
@Override
public void attach(LinearLayout baseLayout) {
if (upgradeLayout == null) {
reset();
}
baseLayout.addView(upgradeLayout);
}
private class ImageAdapter extends BaseAdapter {
private ImageView[] images;
public ImageAdapter(ArrayList<Info> imageIDs) {
images = new ImageView[imageIDs.size()];
for (int i = 0; i < images.length; i++) {
images[i] = new ImageView(activity);
Bitmap bitmap = BitmapCache.getBitmap(imageIDs.get(i).getIconID());
int width = (int) (bitmap.getWidth() * 1.5);
int height = bitmap.getHeight();
images[i].setLayoutParams(new Gallery.LayoutParams(width, height));
images[i].setImageBitmap(bitmap);
images[i].setAlpha(NOT_SELECTED);
}
}
public int getCount() {
return images.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
return images[position];
}
}
private class RaceInfo implements Info {
private String race;
public RaceInfo(String race) {
this.race = race;
}
@Override
public String getName() {
return race;
}
@Override
public int getIconID() {
return ResourceUtilities.getIconID(race);
}
@Override
public boolean hasModel() {
return false;
}
@Override
public int getRace() {
return Races.getRaces(race);
}
}
private class TowerInfo implements Info {
private BaseTower tower;
public TowerInfo(BaseTower creature) {
this.tower = creature;
}
@Override
public String getName() {
return tower.getName();
}
@Override
public int getIconID() {
return ResourceUtilities.getIconID(tower);
}
@Override
public boolean hasModel() {
return true;
}
@Override
public int getRace() {
return tower.getRaces();
}
}
private class CreatureInfo implements Info {
private BaseCreature creature;
public CreatureInfo(BaseCreature creature) {
this.creature = creature;
}
@Override
public String getName() {
return creature.getName();
}
@Override
public int getIconID() {
return ResourceUtilities.getIconID(creature);
}
@Override
public boolean hasModel() {
return true;
}
@Override
public int getRace() {
return creature.getRaces();
}
}
private interface Info {
public String getName();
public int getIconID();
public boolean hasModel();
public int getRace();
}
}