project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/StartGameActivity.java
changeset 7508 763d3961400b
parent 7485 0481bd74267c
equal deleted inserted replaced
7504:ed1d52c5aa94 7508:763d3961400b
    34 import org.hedgewars.hedgeroid.Datastructures.Scheme;
    34 import org.hedgewars.hedgeroid.Datastructures.Scheme;
    35 import org.hedgewars.hedgeroid.Datastructures.Schemes;
    35 import org.hedgewars.hedgeroid.Datastructures.Schemes;
    36 import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
    36 import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
    37 import org.hedgewars.hedgeroid.Datastructures.Weaponset;
    37 import org.hedgewars.hedgeroid.Datastructures.Weaponset;
    38 import org.hedgewars.hedgeroid.Datastructures.Weaponsets;
    38 import org.hedgewars.hedgeroid.Datastructures.Weaponsets;
       
    39 import org.hedgewars.hedgeroid.util.FileUtils;
    39 
    40 
    40 import android.app.Activity;
    41 import android.app.Activity;
    41 import android.content.Intent;
    42 import android.content.Intent;
    42 import android.graphics.drawable.Drawable;
    43 import android.graphics.drawable.Drawable;
    43 import android.os.Bundle;
    44 import android.os.Bundle;
    44 import android.util.Log;
       
    45 import android.view.View;
    45 import android.view.View;
    46 import android.view.View.OnClickListener;
    46 import android.view.View.OnClickListener;
    47 import android.widget.AdapterView;
    47 import android.widget.AdapterView;
    48 import android.widget.AdapterView.OnItemSelectedListener;
    48 import android.widget.AdapterView.OnItemSelectedListener;
    49 import android.widget.ArrayAdapter;
    49 import android.widget.ArrayAdapter;
    54 
    54 
    55 public class StartGameActivity extends Activity {
    55 public class StartGameActivity extends Activity {
    56 	public static final int ACTIVITY_TEAM_SELECTOR = 0;
    56 	public static final int ACTIVITY_TEAM_SELECTOR = 0;
    57 	
    57 	
    58 	private ImageButton start, back, team;
    58 	private ImageButton start, back, team;
    59 	private Spinner maps, gameplay, gamescheme, weapons, themes;
    59 	private Spinner mapSpinner, styleSpinner, schemeSpinner, weaponsetSpinner, themeSpinner;
    60 	private ImageView themeIcon, mapPreview, teamCount;
    60 	private ImageView themeIcon, mapPreview, teamCount;
       
    61 
       
    62 	private List<MapFile> mapFiles;
       
    63 	private List<String> styles;
       
    64 	private List<Scheme> schemes;
       
    65 	private List<Weaponset> weaponsets;
       
    66 	private List<String> themes;
    61 	
    67 	
    62 	private List<TeamInGame> teams = new ArrayList<TeamInGame>();
    68 	private List<TeamInGame> teams = new ArrayList<TeamInGame>();
    63 
    69 
    64 	public void onCreate(Bundle savedInstanceState){
    70 	public void onCreate(Bundle savedInstanceState){
    65 		super.onCreate(savedInstanceState);
    71 		super.onCreate(savedInstanceState);
    68 
    74 
    69 		back = (ImageButton) findViewById(R.id.btnBack);
    75 		back = (ImageButton) findViewById(R.id.btnBack);
    70 		team = (ImageButton) findViewById(R.id.btnTeams);
    76 		team = (ImageButton) findViewById(R.id.btnTeams);
    71 		start = (ImageButton) findViewById(R.id.btnStart);
    77 		start = (ImageButton) findViewById(R.id.btnStart);
    72 
    78 
    73 		maps = (Spinner) findViewById(R.id.spinMaps);
       
    74 		gameplay = (Spinner) findViewById(R.id.spinGameplay);
       
    75 		gamescheme = (Spinner) findViewById(R.id.spinGamescheme);
       
    76 		weapons = (Spinner) findViewById(R.id.spinweapons);
       
    77 		themes = (Spinner) findViewById(R.id.spinTheme);
       
    78 
       
    79 		themeIcon = (ImageView) findViewById(R.id.imgTheme);
    79 		themeIcon = (ImageView) findViewById(R.id.imgTheme);
    80 		mapPreview = (ImageView) findViewById(R.id.mapPreview);
    80 		mapPreview = (ImageView) findViewById(R.id.mapPreview);
    81 		teamCount = (ImageView) findViewById(R.id.imgTeamsCount);
    81 		teamCount = (ImageView) findViewById(R.id.imgTeamsCount);
    82 
    82 
    83 		start.setOnClickListener(startClicker);
    83 		start.setOnClickListener(startClicker);
    84 		back.setOnClickListener(backClicker);
    84 		back.setOnClickListener(backClicker);
    85 		team.setOnClickListener(teamClicker);
    85 		team.setOnClickListener(teamClicker);
    86 
    86 
    87 		List<MapFile> mapFiles;
       
    88 		try {
    87 		try {
    89 			mapFiles = FrontendDataUtils.getMaps(this);
    88 			mapFiles = FrontendDataUtils.getMaps(this);
    90 		} catch (FileNotFoundException e) {
    89 			styles = FrontendDataUtils.getGameStyles(this);
    91 			Log.e("StartGameActivity", e.getMessage(), e);
    90 			schemes = Schemes.loadAllSchemes(this);
    92 			mapFiles = Collections.emptyList();
    91 			weaponsets = Weaponsets.loadAllWeaponsets(this);
    93 		}
    92 			themes = FrontendDataUtils.getThemes(this);
    94 		ArrayAdapter<?> adapter = new ArrayAdapter<MapFile>(this, R.layout.listview_item, mapFiles);
    93 		} catch (IOException e) {
       
    94 			Toast.makeText(getApplicationContext(), R.string.error_missing_sdcard_or_files, Toast.LENGTH_LONG).show();
       
    95 			finish();
       
    96 		}
       
    97 		
       
    98 		Collections.sort(mapFiles, MapFile.MISSIONS_FIRST_NAME_ORDER);
       
    99 		Collections.sort(styles, String.CASE_INSENSITIVE_ORDER);
       
   100 		Collections.sort(schemes, Scheme.NAME_ORDER);
       
   101 		Collections.sort(weaponsets, Weaponset.NAME_ORDER);
       
   102 		Collections.sort(themes, String.CASE_INSENSITIVE_ORDER);
       
   103 		
       
   104 		List<String> mapNames = MapFile.toDisplayNameList(mapFiles, getResources());
       
   105 		List<String> schemeNames = Schemes.toNameList(schemes);
       
   106 		List<String> weaponsetNames = Weaponsets.toNameList(weaponsets);
       
   107 		View rootView = findViewById(android.R.id.content);
       
   108 		mapSpinner = prepareSpinner(rootView, R.id.spinMaps, mapNames, mapsClicker);
       
   109 		styleSpinner = prepareSpinner(rootView, R.id.spinGameplay, styles, null);
       
   110 		schemeSpinner = prepareSpinner(rootView, R.id.spinGamescheme, schemeNames, null);
       
   111 		weaponsetSpinner = prepareSpinner(rootView, R.id.spinweapons, weaponsetNames, null);
       
   112 		themeSpinner = prepareSpinner(rootView, R.id.spinTheme, themes, themesClicker);
       
   113 		
       
   114 		// set map to first nonmission
       
   115 		for(int i = 0; i < mapFiles.size(); i++){
       
   116 			if(!mapFiles.get(i).isMission){
       
   117 				mapSpinner.setSelection(i, false);
       
   118 				break;
       
   119 			}
       
   120 		}
       
   121 		styleSpinner.setSelection(styles.indexOf(GameConfig.DEFAULT_STYLE), false);
       
   122 		schemeSpinner.setSelection(schemeNames.indexOf(GameConfig.DEFAULT_SCHEME), false);
       
   123 		weaponsetSpinner.setSelection(weaponsetNames.indexOf(GameConfig.DEFAULT_WEAPONSET), false);
       
   124 		themeSpinner.setSelection(themes.indexOf(GameConfig.DEFAULT_THEME), false);
       
   125 	}
       
   126 
       
   127 	private static Spinner prepareSpinner(View v, int id, List<String> items, OnItemSelectedListener itemSelectedListener) {
       
   128 		Spinner spinner = (Spinner)v.findViewById(id);
       
   129 		ArrayAdapter<String> adapter = new ArrayAdapter<String>(v.getContext(), R.layout.listview_item, items);
    95 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   130 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    96 		maps.setAdapter(adapter);
   131 		spinner.setAdapter(adapter);
    97 		maps.setOnItemSelectedListener(mapsClicker);
   132 		spinner.setOnItemSelectedListener(itemSelectedListener);
    98 		//set to first nonmission
   133 		return spinner;
    99 		for(int i = 0; i < adapter.getCount(); i++){
   134 	}
   100 			if(!((MapFile)adapter.getItem(i)).isMission){
   135 	
   101 				maps.setSelection(i, false);
       
   102 				break;
       
   103 			}
       
   104 		}
       
   105 
       
   106 		List<String> gameStyles;
       
   107 		try {
       
   108 			gameStyles = FrontendDataUtils.getGameStyles(this);
       
   109 		} catch (FileNotFoundException e) {
       
   110 			Log.e("StartGameActivity", e.getMessage(), e);
       
   111 			gameStyles = Collections.emptyList();
       
   112 		}
       
   113 		adapter = new ArrayAdapter<String>(this, R.layout.listview_item, gameStyles);
       
   114 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       
   115 		gameplay.setAdapter(adapter);
       
   116 		//set to first nonmap
       
   117 		for(int i = 0; i < adapter.getCount(); i++){
       
   118 			if(((String)adapter.getItem(i)).equals("None")){
       
   119 				gameplay.setSelection(i, false);
       
   120 				break;
       
   121 			}
       
   122 		}
       
   123 
       
   124 		List<Scheme> schemes;
       
   125 		try {
       
   126 			schemes = new ArrayList<Scheme>(Schemes.loadAllSchemes(this).values());
       
   127 		} catch (IOException e) {
       
   128 			Log.e("StartGameActivity", e.getMessage(), e);
       
   129 			schemes = Collections.emptyList();
       
   130 		} 
       
   131 		adapter = new ArrayAdapter<Scheme>(this, R.layout.listview_item, schemes);
       
   132 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       
   133 		gamescheme.setAdapter(adapter);
       
   134 		for(int i = 0; i < adapter.getCount(); i++){
       
   135 			if(((Scheme)adapter.getItem(i)).name.equals("Default")){
       
   136 				gamescheme.setSelection(i, false);
       
   137 				break;
       
   138 			}
       
   139 		}
       
   140 		
       
   141 		List<Weaponset> weaponsets;
       
   142 		try {
       
   143 			weaponsets = Weaponsets.loadAllWeaponsets(this);
       
   144 		} catch(IOException e) {
       
   145 			Log.e("StartGameActivity", e.getMessage(), e);
       
   146 			weaponsets = Collections.emptyList();
       
   147 		}
       
   148 		adapter = new ArrayAdapter<Weaponset>(this, R.layout.listview_item, weaponsets);
       
   149 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       
   150 		weapons.setAdapter(adapter);
       
   151 		for(int i = 0; i < adapter.getCount(); i++){
       
   152 			if(((Weaponset)adapter.getItem(i)).name.equals("Crazy")){
       
   153 				weapons.setSelection(i, false);
       
   154 				break;
       
   155 			}
       
   156 		}
       
   157 		
       
   158 		List<String> themeList;
       
   159 		try {
       
   160 			themeList = FrontendDataUtils.getThemes(this);
       
   161 		} catch(FileNotFoundException e) {
       
   162 			Log.e("StartGameActivity", e.getMessage(), e);
       
   163 			themeList = Collections.emptyList();
       
   164 		}
       
   165 		adapter = new ArrayAdapter<String>(this, R.layout.listview_item, themeList);
       
   166 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
       
   167 		themes.setAdapter(adapter);
       
   168 		themes.setOnItemSelectedListener(themesClicker);
       
   169 	}
       
   170 
       
   171 	private void startTeamsActivity(){
   136 	private void startTeamsActivity(){
   172 		Intent i = new Intent(StartGameActivity.this, TeamSelectionActivity.class);
   137 		Intent i = new Intent(StartGameActivity.this, TeamSelectionActivity.class);
   173 		TeamSelectionActivity.activityParams = new ArrayList<TeamInGame>(teams);
   138 		TeamSelectionActivity.activityParams = new ArrayList<TeamInGame>(teams);
   174 		startActivityForResult(i, ACTIVITY_TEAM_SELECTOR);
   139 		startActivityForResult(i, ACTIVITY_TEAM_SELECTOR);
   175 	}
   140 	}
   188 
   153 
   189 
   154 
   190 	private OnItemSelectedListener themesClicker = new OnItemSelectedListener(){
   155 	private OnItemSelectedListener themesClicker = new OnItemSelectedListener(){
   191 
   156 
   192 		public void onItemSelected(AdapterView<?> arg0, View view, int position, long rowId) {
   157 		public void onItemSelected(AdapterView<?> arg0, View view, int position, long rowId) {
   193 			String themeName = (String) arg0.getAdapter().getItem(position);
   158 			String themeName = themes.get(position);
   194 			Drawable themeIconDrawable = Drawable.createFromPath(Utils.getDataPath(StartGameActivity.this) + "Themes/" + themeName + "/icon@2X.png");
   159 			Drawable themeIconDrawable = Drawable.createFromPath(FileUtils.getDataPath(StartGameActivity.this) + "Themes/" + themeName + "/icon@2X.png");
   195 			themeIcon.setImageDrawable(themeIconDrawable);
   160 			themeIcon.setImageDrawable(themeIconDrawable);
   196 		}
   161 		}
   197 
   162 
   198 		public void onNothingSelected(AdapterView<?> arg0) {
   163 		public void onNothingSelected(AdapterView<?> arg0) {
   199 		}
   164 		}
   201 	};
   166 	};
   202 
   167 
   203 	private OnItemSelectedListener mapsClicker = new OnItemSelectedListener(){
   168 	private OnItemSelectedListener mapsClicker = new OnItemSelectedListener(){
   204 
   169 
   205 		public void onItemSelected(AdapterView<?> arg0, View view, int position,long rowId) {
   170 		public void onItemSelected(AdapterView<?> arg0, View view, int position,long rowId) {
   206 			MapFile map = (MapFile)arg0.getAdapter().getItem(position);
   171 			MapFile map = mapFiles.get(position);
   207 			try {
   172 			try {
   208 				File previewFile = map.getPreviewFile(getApplicationContext());
   173 				File previewFile = map.getPreviewFile(getApplicationContext());
   209 				mapPreview.setImageDrawable(Drawable.createFromPath(previewFile.getAbsolutePath()));
   174 				mapPreview.setImageDrawable(Drawable.createFromPath(previewFile.getAbsolutePath()));
   210 			} catch (FileNotFoundException e) {
   175 			} catch (FileNotFoundException e) {
   211 				mapPreview.setImageDrawable(null);
   176 				mapPreview.setImageDrawable(null);
   221 		public void onClick(View v) {
   186 		public void onClick(View v) {
   222 			if(teams.size() < 2) {
   187 			if(teams.size() < 2) {
   223 				Toast.makeText(getApplicationContext(), R.string.not_enough_teams, Toast.LENGTH_LONG).show();
   188 				Toast.makeText(getApplicationContext(), R.string.not_enough_teams, Toast.LENGTH_LONG).show();
   224 				startTeamsActivity();
   189 				startTeamsActivity();
   225 			} else {
   190 			} else {
   226 				String style = (String)gameplay.getSelectedItem();
   191 				String style = styles.get(styleSpinner.getSelectedItemPosition());
   227 				Scheme scheme = (Scheme)gamescheme.getSelectedItem();
   192 				Scheme scheme = schemes.get(schemeSpinner.getSelectedItemPosition());
   228 				String mapName = ((MapFile)maps.getSelectedItem()).name;
   193 				String mapName = mapFiles.get(mapSpinner.getSelectedItemPosition()).name;
   229 				String theme = (String)themes.getSelectedItem();
   194 				String theme = themes.get(themeSpinner.getSelectedItemPosition());
   230 				MapRecipe map = MapRecipe.makeMap(mapName, UUID.randomUUID().toString(), theme);
   195 				MapRecipe map = MapRecipe.makeMap(mapName, UUID.randomUUID().toString(), theme);
   231 				Weaponset weaponset = (Weaponset)weapons.getSelectedItem();
   196 				Weaponset weaponset = weaponsets.get(weaponsetSpinner.getSelectedItemPosition());
   232 				SDLActivity.startConfig = new GameConfig(style, scheme, map, teams, weaponset);
   197 				SDLActivity.startConfig = new GameConfig(style, scheme, map, teams, weaponset);
       
   198 				SDLActivity.startNetgame = false;
   233 				Intent i = new Intent(StartGameActivity.this, SDLActivity.class);
   199 				Intent i = new Intent(StartGameActivity.this, SDLActivity.class);
   234 				startActivity(i);
   200 				startActivity(i);
   235 			}
   201 			}
   236 		}
   202 		}
   237 	};
   203 	};