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 }; |