project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/MapFragment.java
changeset 7582 714310efad8f
parent 7572 4e223b05be7c
child 7584 7831c84cc644
equal deleted inserted replaced
7580:c92596feac0d 7582:714310efad8f
     8 
     8 
     9 import org.hedgewars.hedgeroid.R;
     9 import org.hedgewars.hedgeroid.R;
    10 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    10 import org.hedgewars.hedgeroid.Datastructures.FrontendDataUtils;
    11 import org.hedgewars.hedgeroid.Datastructures.MapFile;
    11 import org.hedgewars.hedgeroid.Datastructures.MapFile;
    12 import org.hedgewars.hedgeroid.Datastructures.MapRecipe;
    12 import org.hedgewars.hedgeroid.Datastructures.MapRecipe;
    13 import org.hedgewars.hedgeroid.Datastructures.Scheme;
       
    14 import org.hedgewars.hedgeroid.Datastructures.Weaponset;
       
    15 import org.hedgewars.hedgeroid.frontlib.Frontlib;
    13 import org.hedgewars.hedgeroid.frontlib.Frontlib;
    16 
    14 
    17 import android.content.Context;
    15 import android.content.Context;
    18 import android.graphics.drawable.Drawable;
    16 import android.graphics.drawable.Drawable;
    19 import android.os.Bundle;
    17 import android.os.Bundle;
    31 import android.widget.ImageView;
    29 import android.widget.ImageView;
    32 import android.widget.Spinner;
    30 import android.widget.Spinner;
    33 import android.widget.TableRow;
    31 import android.widget.TableRow;
    34 import android.widget.Toast;
    32 import android.widget.Toast;
    35 
    33 
    36 public class MapFragment extends Fragment implements RoomStateManager.Observer {
    34 public class MapFragment extends Fragment {
    37 	private Spinner mapTypeSpinner, mapNameSpinner, templateSpinner, mazeSizeSpinner;
    35 	private Spinner mapTypeSpinner, mapNameSpinner, templateSpinner, mazeSizeSpinner;
    38 	private TableRow nameRow, templateRow, mazeSizeRow;
    36 	private TableRow nameRow, templateRow, mazeSizeRow;
    39 	private ImageView mapPreview;
    37 	private ImageView mapPreview;
    40 	private List<MapFile> mapFiles;
    38 	private List<MapFile> mapFiles;
    41 	private RoomStateManager stateManager;
    39 	private RoomStateManager stateManager;
    89 		mapTypeSpinner = prepareSpinner(v, R.id.spinMapType, Arrays.asList(getResources().getStringArray(R.array.map_types)), mapTypeSelectedListener);
    87 		mapTypeSpinner = prepareSpinner(v, R.id.spinMapType, Arrays.asList(getResources().getStringArray(R.array.map_types)), mapTypeSelectedListener);
    90 		mapNameSpinner = prepareSpinner(v, R.id.spinMapName, mapNames, mapNameSelectedListener);
    88 		mapNameSpinner = prepareSpinner(v, R.id.spinMapName, mapNames, mapNameSelectedListener);
    91 		templateSpinner = prepareSpinner(v, R.id.spinTemplateFilter, Arrays.asList(getResources().getStringArray(R.array.map_templates)), mapTemplateSelectedListener);
    89 		templateSpinner = prepareSpinner(v, R.id.spinTemplateFilter, Arrays.asList(getResources().getStringArray(R.array.map_templates)), mapTemplateSelectedListener);
    92 		mazeSizeSpinner = prepareSpinner(v, R.id.spinMazeSize, Arrays.asList(getResources().getStringArray(R.array.map_maze_sizes)), mazeSizeSelectedListener);
    90 		mazeSizeSpinner = prepareSpinner(v, R.id.spinMazeSize, Arrays.asList(getResources().getStringArray(R.array.map_maze_sizes)), mazeSizeSelectedListener);
    93 
    91 
    94 		stateManager.registerObserver(this);
    92 		stateManager.addListener(roomStateChangeListener);
    95 		currentMap = stateManager.getMapRecipe();
    93 		currentMap = stateManager.getMapRecipe();
    96 		if(currentMap != null) {
    94 		if(currentMap != null) {
    97 			updateDisplay(currentMap);
    95 			updateDisplay(currentMap);
    98 		}
    96 		}
    99 		setChiefState(stateManager.getChiefStatus());
    97 		setChiefState(stateManager.getChiefStatus());
   122 	
   120 	
   123 	@Override
   121 	@Override
   124 	public void onDestroy() {
   122 	public void onDestroy() {
   125 		super.onDestroy();
   123 		super.onDestroy();
   126 		mapPreviewHandler.stop();
   124 		mapPreviewHandler.stop();
   127 		stateManager.unregisterObserver(this);
   125 		stateManager.removeListener(roomStateChangeListener);
   128 	}
   126 	}
   129 	
   127 	
   130 	private void setChiefState(boolean chiefState) {
   128 	private void setChiefState(boolean chiefState) {
   131 		mapTypeSpinner.setEnabled(chiefState);
   129 		mapTypeSpinner.setEnabled(chiefState);
   132 		mapNameSpinner.setEnabled(chiefState);
   130 		mapNameSpinner.setEnabled(chiefState);
   205 				mapNameSpinner.setSelection(random.nextInt(mapNameSpinner.getCount()));
   203 				mapNameSpinner.setSelection(random.nextInt(mapNameSpinner.getCount()));
   206 			}
   204 			}
   207 		}
   205 		}
   208 	};
   206 	};
   209 	
   207 	
   210 	public void onChiefStatusChanged(boolean isChief) {
   208 	private final RoomStateManager.Listener roomStateChangeListener = new RoomStateManager.ListenerAdapter() {
   211 		setChiefState(isChief);
   209 		@Override
   212 	}
   210 		public void onChiefStatusChanged(boolean isChief) {
   213 	
   211 			setChiefState(isChief);
   214 	public void onMapChanged(MapRecipe recipe) {
   212 		};
   215 		if(currentMap==null
   213 		
   216 				|| currentMap.mapgen != recipe.mapgen
   214 		@Override
   217 				|| currentMap.mazeSize != recipe.mazeSize
   215 		public void onMapChanged(MapRecipe recipe) {
   218 				|| !currentMap.name.equals(recipe.name)
   216 			if(currentMap==null
   219 				|| !currentMap.seed.equals(recipe.seed)
   217 					|| currentMap.mapgen != recipe.mapgen
   220 				|| currentMap.templateFilter != recipe.templateFilter
   218 					|| currentMap.mazeSize != recipe.mazeSize
   221 				|| !Arrays.equals(currentMap.getDrawData(), recipe.getDrawData())) {
   219 					|| !currentMap.name.equals(recipe.name)
   222 			mapPreviewHandler.activity();
   220 					|| !currentMap.seed.equals(recipe.seed)
   223 		}
   221 					|| currentMap.templateFilter != recipe.templateFilter
   224 		updateDisplay(recipe);
   222 					|| !Arrays.equals(currentMap.getDrawData(), recipe.getDrawData())) {
   225 		currentMap = recipe;
   223 				mapPreviewHandler.activity();
   226 	}
   224 			}
   227 	
   225 			updateDisplay(recipe);
   228 	public void onGameStyleChanged(String gameStyle) { }
   226 			currentMap = recipe;
   229 	public void onSchemeChanged(Scheme scheme) { }
   227 		};
   230 	public void onWeaponsetChanged(Weaponset weaponset) { }
   228 	};
   231 	
   229 	
   232 	private MapPreviewGenerator.Listener mapPreviewListener = new MapPreviewGenerator.Listener() {
   230 	private MapPreviewGenerator.Listener mapPreviewListener = new MapPreviewGenerator.Listener() {
   233 		public void onMapPreviewResult(Drawable preview) {
   231 		public void onMapPreviewResult(Drawable preview) {
   234 			if(newPreviewRequest != null) {
   232 			if(newPreviewRequest != null) {
   235 				MapPreviewGenerator.startPreviewGeneration(getActivity().getApplicationContext(), newPreviewRequest, mapPreviewListener);
   233 				MapPreviewGenerator.startPreviewGeneration(getActivity().getApplicationContext(), newPreviewRequest, mapPreviewListener);