/**
* 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 android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Spinner;
import com.godsandtowers.R;
import com.godsandtowers.campaigns.CampaignLevel;
import com.godsandtowers.core.GameInfo;
import com.godsandtowers.core.HostGameEngine;
import com.godsandtowers.core.PlayerStats;
import com.godsandtowers.core.grid.Board;
import com.godsandtowers.core.grid.Boards;
import com.godsandtowers.core.grid.Grid;
import com.godsandtowers.graphics.game.BitmapCache;
import com.godsandtowers.messaging.ApplicationMessageProcessor;
import com.godsandtowers.sprites.AIPlayer;
import com.godsandtowers.sprites.Player;
import com.godsandtowers.util.ADS;
import com.godsandtowers.util.TDWPreferences;
import com.gundogstudios.modules.Modules;
public class CampaignLevelLayout implements ILayout {
private LinearLayout newGameLayout;
private int speed;
private int difficulty;
public CampaignLevelLayout(final Context context, final PlayerStats player, final CampaignLevel level) {
newGameLayout = new LinearLayout(context);
newGameLayout.setOrientation(LinearLayout.VERTICAL);
ADS.placeObtrusiveADMobAD(newGameLayout);
Spinner levelSpinner = generateSpinner(context, new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setDifficulty(arg2);
Modules.PREFERENCES.put(TDWPreferences.CAMPAIGN_DIFFICULTY, arg2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}, R.string.newgame_difficulty, new int[] { R.string.newgame_easy, R.string.newgame_medium,
R.string.newgame_hard, R.string.newgame_expert, });
int s = Modules.PREFERENCES.get(TDWPreferences.CAMPAIGN_DIFFICULTY, 0);
setDifficulty(s);
levelSpinner.setSelection(s >= 4 ? 0 : s);
newGameLayout.addView(levelSpinner);
Spinner speedSpinner = generateSpinner(context, new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
setGameSpeed(arg2);
Modules.PREFERENCES.put(TDWPreferences.GAME_SPEED, arg2);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}, R.string.newgame_speed, new int[] { R.string.newgame_slow, R.string.newgame_normal, R.string.newgame_fast, });
s = Modules.PREFERENCES.get(TDWPreferences.GAME_SPEED, GameInfo.NORMAL);
setGameSpeed(s);
speedSpinner.setSelection(s >= 3 ? 0 : s);
newGameLayout.addView(speedSpinner);
Button startButton = new Button(context);
BitmapDrawable drawable = new BitmapDrawable(context.getResources(),
BitmapCache.getBitmap(R.drawable.menu_options_button));
startButton.setBackgroundDrawable(drawable);
startButton.setText(R.string.newgame_startGame);
startButton.setTypeface((Typeface) Modules.PREFERENCES.get(TDWPreferences.BUTTON_FONT, Typeface.DEFAULT));
startButton.setTextColor(Color.WHITE);
startButton.setTextSize(20);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
int computersLevel = difficulty;
int races = level.getPlayerRaces();
Board board = Boards.getBoard(level.getBoard());
Grid humanGrid = new Grid(board);
Player human = new Player(0, player, races, humanGrid);
PlayerStats stats = new PlayerStats(computersLevel);
races = level.getComputerRaces();
Grid computerGrid = new Grid(board);
Player computer;
int waves;
int gameType = level.getGameType();
switch (gameType) {
case GameInfo.DEFENSE:
computer = new AIPlayer(1, stats, races, computerGrid, false, true);
waves = GameInfo.NORMAL_WAVES;
break;
case GameInfo.BATTLE:
default:
computer = new AIPlayer(1, stats, races, computerGrid, true, true);
waves = GameInfo.BATTLE_WAVES;
break;
}
Player[] players = new Player[] { human, computer };
GameInfo gameInfo = new GameInfo(0, players, speed, gameType, waves, level, board);
HostGameEngine engine = new HostGameEngine(gameInfo, null);
Modules.MESSENGER.submit(ApplicationMessageProcessor.ID, ApplicationMessageProcessor.ATTACH_GAME,
engine);
}
});
newGameLayout.addView(startButton);
ADS.placeADMobAd(newGameLayout);
}
private void setDifficulty(int position) {
switch (position) {
case 0:
difficulty = CampaignLevel.EASY;
break;
case 1:
difficulty = CampaignLevel.MEDIUM;
break;
case 2:
difficulty = CampaignLevel.HARD;
break;
case 3:
default:
difficulty = CampaignLevel.EXPERT;
break;
}
}
private void setGameSpeed(int position) {
switch (position) {
case 0:
speed = GameInfo.SLOW;
break;
case 1:
speed = GameInfo.NORMAL;
break;
case 2:
default:
speed = GameInfo.FAST;
break;
}
}
private Spinner generateSpinner(Context context, OnItemSelectedListener listener, int description, int[] choices) {
String[] mStrings = new String[choices.length];
Resources resources = context.getResources();
for (int i = 0; i < mStrings.length; i++) {
mStrings[i] = resources.getString(description) + ": " + resources.getString(choices[i]).toUpperCase();
}
Spinner speedSpinner = new Spinner(context);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_spinner_item, mStrings);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
speedSpinner.setAdapter(adapter);
speedSpinner.setOnItemSelectedListener(listener);
return speedSpinner;
}
@Override
public void attach(LinearLayout baseLayout) {
baseLayout.addView(newGameLayout);
}
}