project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/StartGameActivity.java
changeset 7485 0481bd74267c
parent 7476 2fb781bbdd51
child 7508 763d3961400b
equal deleted inserted replaced
7482:d70a5b0d1190 7485:0481bd74267c
    17  */
    17  */
    18 
    18 
    19 
    19 
    20 package org.hedgewars.hedgeroid;
    20 package org.hedgewars.hedgeroid;
    21 
    21 
       
    22 import java.io.File;
       
    23 import java.io.FileNotFoundException;
       
    24 import java.io.IOException;
       
    25 import java.util.ArrayList;
       
    26 import java.util.Collections;
       
    27 import java.util.List;
       
    28 import java.util.UUID;
       
    29 
    22 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    30 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    23 import org.hedgewars.hedgeroid.Datastructures.Map;
    31 import org.hedgewars.hedgeroid.Datastructures.GameConfig;
    24 import org.hedgewars.hedgeroid.Datastructures.Map.MapType;
    32 import org.hedgewars.hedgeroid.Datastructures.MapFile;
       
    33 import org.hedgewars.hedgeroid.Datastructures.MapRecipe;
    25 import org.hedgewars.hedgeroid.Datastructures.Scheme;
    34 import org.hedgewars.hedgeroid.Datastructures.Scheme;
    26 import org.hedgewars.hedgeroid.Datastructures.Team;
    35 import org.hedgewars.hedgeroid.Datastructures.Schemes;
    27 import org.hedgewars.hedgeroid.Datastructures.Weapon;
    36 import org.hedgewars.hedgeroid.Datastructures.TeamInGame;
    28 import org.hedgewars.hedgeroid.EngineProtocol.GameConfig;
    37 import org.hedgewars.hedgeroid.Datastructures.Weaponset;
       
    38 import org.hedgewars.hedgeroid.Datastructures.Weaponsets;
    29 
    39 
    30 import android.app.Activity;
    40 import android.app.Activity;
    31 import android.content.Intent;
    41 import android.content.Intent;
    32 import android.graphics.drawable.Drawable;
    42 import android.graphics.drawable.Drawable;
    33 import android.os.Bundle;
    43 import android.os.Bundle;
    34 import android.os.Parcelable;
    44 import android.util.Log;
    35 import android.view.View;
    45 import android.view.View;
    36 import android.view.View.OnClickListener;
    46 import android.view.View.OnClickListener;
    37 import android.widget.AdapterView;
    47 import android.widget.AdapterView;
    38 import android.widget.AdapterView.OnItemSelectedListener;
    48 import android.widget.AdapterView.OnItemSelectedListener;
    39 import android.widget.ArrayAdapter;
    49 import android.widget.ArrayAdapter;
    41 import android.widget.ImageView;
    51 import android.widget.ImageView;
    42 import android.widget.Spinner;
    52 import android.widget.Spinner;
    43 import android.widget.Toast;
    53 import android.widget.Toast;
    44 
    54 
    45 public class StartGameActivity extends Activity {
    55 public class StartGameActivity extends Activity {
    46 
       
    47 	public static final int ACTIVITY_TEAM_SELECTOR = 0;
    56 	public static final int ACTIVITY_TEAM_SELECTOR = 0;
    48 	
    57 	
    49 	private GameConfig config = null;
       
    50 	private ImageButton start, back, team;
    58 	private ImageButton start, back, team;
    51 	private Spinner maps, gameplay, gamescheme, weapons, themes;
    59 	private Spinner maps, gameplay, gamescheme, weapons, themes;
    52 	private ImageView themeIcon, mapPreview, teamCount;
    60 	private ImageView themeIcon, mapPreview, teamCount;
       
    61 	
       
    62 	private List<TeamInGame> teams = new ArrayList<TeamInGame>();
    53 
    63 
    54 	public void onCreate(Bundle savedInstanceState){
    64 	public void onCreate(Bundle savedInstanceState){
    55 		super.onCreate(savedInstanceState);
    65 		super.onCreate(savedInstanceState);
    56 		config = new GameConfig();
       
    57 
    66 
    58 		setContentView(R.layout.starting_game);
    67 		setContentView(R.layout.starting_game);
    59 
    68 
    60 		back = (ImageButton) findViewById(R.id.btnBack);
    69 		back = (ImageButton) findViewById(R.id.btnBack);
    61 		team = (ImageButton) findViewById(R.id.btnTeams);
    70 		team = (ImageButton) findViewById(R.id.btnTeams);
    73 
    82 
    74 		start.setOnClickListener(startClicker);
    83 		start.setOnClickListener(startClicker);
    75 		back.setOnClickListener(backClicker);
    84 		back.setOnClickListener(backClicker);
    76 		team.setOnClickListener(teamClicker);
    85 		team.setOnClickListener(teamClicker);
    77 
    86 
    78 		ArrayAdapter<?> adapter = new ArrayAdapter<Map>(this, R.layout.listview_item, FrontendDataUtils.getMaps(this));
    87 		List<MapFile> mapFiles;
       
    88 		try {
       
    89 			mapFiles = FrontendDataUtils.getMaps(this);
       
    90 		} catch (FileNotFoundException e) {
       
    91 			Log.e("StartGameActivity", e.getMessage(), e);
       
    92 			mapFiles = Collections.emptyList();
       
    93 		}
       
    94 		ArrayAdapter<?> adapter = new ArrayAdapter<MapFile>(this, R.layout.listview_item, mapFiles);
    79 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    95 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    80 		maps.setAdapter(adapter);
    96 		maps.setAdapter(adapter);
    81 		maps.setOnItemSelectedListener(mapsClicker);
    97 		maps.setOnItemSelectedListener(mapsClicker);
    82 		//set to first nonmap
    98 		//set to first nonmission
    83 		for(int i = 0; i < adapter.getCount(); i++){
    99 		for(int i = 0; i < adapter.getCount(); i++){
    84 			if(((Map)adapter.getItem(i)).getType() == MapType.TYPE_DEFAULT){
   100 			if(!((MapFile)adapter.getItem(i)).isMission){
    85 				maps.setSelection(i, false);
   101 				maps.setSelection(i, false);
    86 				break;
   102 				break;
    87 			}
   103 			}
    88 		}
   104 		}
    89 
   105 
    90 		adapter = new ArrayAdapter<String>(this, R.layout.listview_item, FrontendDataUtils.getGameplay(this));
   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);
    91 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   114 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    92 		gameplay.setAdapter(adapter);
   115 		gameplay.setAdapter(adapter);
    93 		gameplay.setOnItemSelectedListener(gameplayClicker);
       
    94 		//set to first nonmap
   116 		//set to first nonmap
    95 		for(int i = 0; i < adapter.getCount(); i++){
   117 		for(int i = 0; i < adapter.getCount(); i++){
    96 			if(((String)adapter.getItem(i)).equals("None")){
   118 			if(((String)adapter.getItem(i)).equals("None")){
    97 				gameplay.setSelection(i, false);
   119 				gameplay.setSelection(i, false);
    98 				break;
   120 				break;
    99 			}
   121 			}
   100 		}
   122 		}
   101 
   123 
   102 		adapter = new ArrayAdapter<Scheme>(this, R.layout.listview_item, FrontendDataUtils.getSchemes(this));
   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);
   103 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   132 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   104 		gamescheme.setAdapter(adapter);
   133 		gamescheme.setAdapter(adapter);
   105 		gamescheme.setOnItemSelectedListener(schemeClicker);
   134 		for(int i = 0; i < adapter.getCount(); i++){
   106 		//set to first nonmap
   135 			if(((Scheme)adapter.getItem(i)).name.equals("Default")){
   107 		for(int i = 0; i < adapter.getCount(); i++){
       
   108 			if(((Scheme)adapter.getItem(i)).toString().equals("Default")){
       
   109 				gamescheme.setSelection(i, false);
   136 				gamescheme.setSelection(i, false);
   110 				break;
   137 				break;
   111 			}
   138 			}
   112 		}
   139 		}
   113 		
   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 		}
   114 		
   157 		
   115 		adapter = new ArrayAdapter<Weapon>(this, R.layout.listview_item, FrontendDataUtils.getWeapons(this));
   158 		List<String> themeList;
   116 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   159 		try {
   117 		weapons.setAdapter(adapter);
   160 			themeList = FrontendDataUtils.getThemes(this);
   118 		weapons.setOnItemSelectedListener(weaponClicker);
   161 		} catch(FileNotFoundException e) {
   119 		for(int i = 0; i < adapter.getCount(); i++){
   162 			Log.e("StartGameActivity", e.getMessage(), e);
   120 			if(((Weapon)adapter.getItem(i)).toString().equals("Crazy")){
   163 			themeList = Collections.emptyList();
   121 				weapons.setSelection(i, false);
   164 		}
   122 				break;
   165 		adapter = new ArrayAdapter<String>(this, R.layout.listview_item, themeList);
   123 			}
       
   124 		}
       
   125 		adapter = new ArrayAdapter<String>(this, R.layout.listview_item, FrontendDataUtils.getThemes(this));
       
   126 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   166 		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
   127 		themes.setAdapter(adapter);
   167 		themes.setAdapter(adapter);
   128 		themes.setOnItemSelectedListener(themesClicker);
   168 		themes.setOnItemSelectedListener(themesClicker);
   129 	}
   169 	}
   130 
   170 
   131 	private void startTeamsActivity(){
   171 	private void startTeamsActivity(){
   132 		Intent i = new Intent(StartGameActivity.this, TeamSelectionActivity.class);
   172 		Intent i = new Intent(StartGameActivity.this, TeamSelectionActivity.class);
   133 		// TODO i.putParcelableArrayListExtra("teams", config.teams);
   173 		TeamSelectionActivity.activityParams = new ArrayList<TeamInGame>(teams);
   134 		startActivityForResult(i, ACTIVITY_TEAM_SELECTOR);
   174 		startActivityForResult(i, ACTIVITY_TEAM_SELECTOR);
   135 	}
   175 	}
   136 
   176 
   137 	public void onActivityResult(int requestCode, int resultCode, Intent data){
   177 	public void onActivityResult(int requestCode, int resultCode, Intent data){
   138 		switch(requestCode){
   178 		switch(requestCode){
   139 		case ACTIVITY_TEAM_SELECTOR:
   179 		case ACTIVITY_TEAM_SELECTOR:
   140 			if(resultCode == Activity.RESULT_OK){
   180 			if(resultCode == Activity.RESULT_OK){
   141 				Parcelable[] parcelables = (Parcelable[])data.getParcelableArrayExtra("teams");
   181 				teams = new ArrayList<TeamInGame>(TeamSelectionActivity.activityReturn);
   142 				config.teams.clear();
   182 				TeamSelectionActivity.activityReturn = Collections.emptyList();
   143 				for(Parcelable t : parcelables){
   183 				teamCount.getDrawable().setLevel(teams.size());
   144 					// TODO config.teams.add((Team)t);
       
   145 				}
       
   146 				teamCount.getDrawable().setLevel(config.teams.size());
       
   147 			}
   184 			}
   148 			break;
   185 			break;
   149 		}
   186 		}
   150 	}
   187 	}
   151 
   188 
   154 
   191 
   155 		public void onItemSelected(AdapterView<?> arg0, View view, int position, long rowId) {
   192 		public void onItemSelected(AdapterView<?> arg0, View view, int position, long rowId) {
   156 			String themeName = (String) arg0.getAdapter().getItem(position);
   193 			String themeName = (String) arg0.getAdapter().getItem(position);
   157 			Drawable themeIconDrawable = Drawable.createFromPath(Utils.getDataPath(StartGameActivity.this) + "Themes/" + themeName + "/icon@2X.png");
   194 			Drawable themeIconDrawable = Drawable.createFromPath(Utils.getDataPath(StartGameActivity.this) + "Themes/" + themeName + "/icon@2X.png");
   158 			themeIcon.setImageDrawable(themeIconDrawable);
   195 			themeIcon.setImageDrawable(themeIconDrawable);
   159 			config.theme = themeName;
       
   160 		}
   196 		}
   161 
   197 
   162 		public void onNothingSelected(AdapterView<?> arg0) {
   198 		public void onNothingSelected(AdapterView<?> arg0) {
   163 		}
   199 		}
   164 
   200 
   165 	};
   201 	};
   166 
   202 
   167 	private OnItemSelectedListener mapsClicker = new OnItemSelectedListener(){
   203 	private OnItemSelectedListener mapsClicker = new OnItemSelectedListener(){
   168 
   204 
   169 		public void onItemSelected(AdapterView<?> arg0, View view, int position,long rowId) {
   205 		public void onItemSelected(AdapterView<?> arg0, View view, int position,long rowId) {
   170 			Map map = (Map)arg0.getAdapter().getItem(position);
   206 			MapFile map = (MapFile)arg0.getAdapter().getItem(position);
   171 			mapPreview.setImageDrawable(map.getDrawable());
   207 			try {
   172 			config.map = map;
   208 				File previewFile = map.getPreviewFile(getApplicationContext());
       
   209 				mapPreview.setImageDrawable(Drawable.createFromPath(previewFile.getAbsolutePath()));
       
   210 			} catch (FileNotFoundException e) {
       
   211 				mapPreview.setImageDrawable(null);
       
   212 			}
   173 		}
   213 		}
   174 
   214 
   175 		public void onNothingSelected(AdapterView<?> arg0) {
   215 		public void onNothingSelected(AdapterView<?> arg0) {
   176 		}
   216 		}
   177 
   217 
   178 	};
       
   179 
       
   180 	private OnItemSelectedListener weaponClicker = new OnItemSelectedListener(){
       
   181 		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
       
   182 			config.weapon = (Weapon)arg0.getAdapter().getItem(arg2);
       
   183 		}
       
   184 		public void onNothingSelected(AdapterView<?> arg0) {
       
   185 
       
   186 		}
       
   187 	};
       
   188 	private OnItemSelectedListener schemeClicker = new OnItemSelectedListener(){
       
   189 		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
       
   190 			config.scheme = (Scheme)arg0.getAdapter().getItem(arg2);
       
   191 		}
       
   192 		public void onNothingSelected(AdapterView<?> arg0) {
       
   193 
       
   194 		}
       
   195 	};
       
   196 	private OnItemSelectedListener gameplayClicker = new OnItemSelectedListener(){
       
   197 		public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
       
   198 			//config = ()arg0.getAdapter().getItem(arg2);
       
   199 		}
       
   200 		public void onNothingSelected(AdapterView<?> arg0) {
       
   201 
       
   202 		}
       
   203 	};
   218 	};
   204 
   219 
   205 	private OnClickListener startClicker = new OnClickListener(){
   220 	private OnClickListener startClicker = new OnClickListener(){
   206 		public void onClick(View v) {
   221 		public void onClick(View v) {
   207 			if(config.teams.size() < 2){
   222 			if(teams.size() < 2) {
   208 				Toast.makeText(StartGameActivity.this, R.string.not_enough_teams, Toast.LENGTH_LONG).show();
   223 				Toast.makeText(getApplicationContext(), R.string.not_enough_teams, Toast.LENGTH_LONG).show();
   209 				startTeamsActivity();
   224 				startTeamsActivity();
   210 			} else {
   225 			} else {
   211 				SDLActivity.startConfig = config;
   226 				String style = (String)gameplay.getSelectedItem();
       
   227 				Scheme scheme = (Scheme)gamescheme.getSelectedItem();
       
   228 				String mapName = ((MapFile)maps.getSelectedItem()).name;
       
   229 				String theme = (String)themes.getSelectedItem();
       
   230 				MapRecipe map = MapRecipe.makeMap(mapName, UUID.randomUUID().toString(), theme);
       
   231 				Weaponset weaponset = (Weaponset)weapons.getSelectedItem();
       
   232 				SDLActivity.startConfig = new GameConfig(style, scheme, map, teams, weaponset);
   212 				Intent i = new Intent(StartGameActivity.this, SDLActivity.class);
   233 				Intent i = new Intent(StartGameActivity.this, SDLActivity.class);
   213 				startActivity(i);
   234 				startActivity(i);
   214 			}
   235 			}
   215 		}
   236 		}
   216 	};
   237 	};