project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/Scheme.java
author Medo <smaxein@googlemail.com>
Sun, 01 Apr 2012 04:27:46 +0200
changeset 6844 69fb04c8a841
parent 6725 f5eb11306c6a
child 6848 ec371186361b
permissions -rw-r--r--
Scheme definitions now use .ini files.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     1
/*
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     2
 * Hedgewars for Android. An Android port of Hedgewars, a free turn based strategy game
6700
e04da46ee43c the most important commit of the year
koda
parents: 6505
diff changeset
     3
 * Copyright (c) 2011-2012 Richard Deurwaarder <xeli@xelification.com>
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     4
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     8
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    12
 * GNU General Public License for more details.
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    13
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    17
 */
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    18
6505
mikade
parents: 6436
diff changeset
    19
package org.hedgewars.hedgeroid.Datastructures;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    20
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    21
import java.util.Map;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    22
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    23
import java.io.File;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    24
import java.io.FilenameFilter;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    25
import java.io.IOException;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    26
import java.util.ArrayList;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    27
import java.util.Arrays;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    28
import java.util.List;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    29
import java.util.Map.Entry;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    30
import java.util.TreeMap;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    31
6505
mikade
parents: 6436
diff changeset
    32
import org.hedgewars.hedgeroid.EngineProtocol.EngineProtocolNetwork;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    33
import org.ini4j.Ini;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    34
import org.ini4j.InvalidFileFormatException;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    35
import org.ini4j.Profile.Section;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    36
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    37
import android.content.Context;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    38
import android.os.Parcel;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    39
import android.os.Parcelable;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    40
import android.util.Log;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    41
6436
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
    42
public class Scheme implements Parcelable, Comparable<Scheme>{
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    43
	public static final String DIRECTORY_SCHEME = "schemes";
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    44
	private static final Map<String, BasicSettingMeta> basicSettingsMeta = new TreeMap<String, BasicSettingMeta>();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    45
	private static final Map<String, GameModMeta> gameModsMeta = new TreeMap<String, GameModMeta>();
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    46
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    47
	private final String name;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    48
	private final int gamemod;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    49
	private final Map<String, Integer> basic = new TreeMap<String, Integer>();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    50
		
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    51
	public Scheme(String _name, Map<String, Integer> _basic, int _gamemod) {
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    52
		name = _name;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    53
		gamemod = _gamemod;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    54
		basic.putAll(_basic);
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    55
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    56
	
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    57
	public Scheme(Parcel in){
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    58
		name = in.readString();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    59
		gamemod = in.readInt();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    60
		in.readMap(basic, Integer.class.getClassLoader());
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    61
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    62
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    63
	public int getHealth() {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    64
		return basic.get("InitialHealth");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    65
	}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    66
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    67
	public void sendToEngine(EngineProtocolNetwork epn) throws IOException{ 
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    68
		epn.sendToEngine(String.format("e$gmflags %d", gamemod));
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    69
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    70
		for(Map.Entry<String, Integer> entry : basic.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    71
			BasicSettingMeta basicflag = basicSettingsMeta.get(entry.getKey());
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    72
			
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    73
			//Health is a special case, it doesn't need to be send 				                             
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    74
			//to the engine yet, we'll do that with the other HH info
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    75
			if(!basicflag.command.equals("inithealth")){
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    76
				epn.sendToEngine(String.format("%s %d", basicflag.command, entry.getValue()));
6725
f5eb11306c6a fixed the schemes on android
Xeli
parents: 6700
diff changeset
    77
			}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    78
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    79
	}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    80
	
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    81
	public String toString(){
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    82
		return name;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    83
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    84
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    85
	public static List<Scheme> getSchemes(Context c) throws IllegalArgumentException {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    86
		File schemeDir = new File(c.getFilesDir(), DIRECTORY_SCHEME);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    87
		File[] files = schemeDir.listFiles(new FilenameFilter() {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    88
			public boolean accept(File dir, String filename) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    89
				return filename.toLowerCase().startsWith("scheme_");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    90
			}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    91
		});
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    92
		if(files == null) files = new File[0];
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    93
		Arrays.sort(files);
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    94
		List<Scheme> schemes = new ArrayList<Scheme>();
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    95
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    96
		for(File file : files) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    97
			try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    98
				Ini ini = new Ini(file);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    99
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   100
				String name = ini.get("Scheme", "name");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   101
				if(name==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   102
					name = file.getName();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   103
				}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   104
				Section basicSettingsSection = ini.get("BasicSettings");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   105
				Section gameModsSection = ini.get("GameMods");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   106
				if(basicSettingsSection == null || gameModsSection == null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   107
					Log.e(Scheme.class.getCanonicalName(), "Scheme file "+file+" is missing the BasicSettings or GameMods section - skipping.");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   108
					continue;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   109
				}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   110
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   111
				Map<String, Integer> basicSettings = new TreeMap<String, Integer>();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   112
				for(Entry<String, BasicSettingMeta> entry : basicSettingsMeta.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   113
					String key = entry.getKey();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   114
					BasicSettingMeta settingMeta = entry.getValue();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   115
					Integer value = null;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   116
					if(basicSettingsSection.containsKey(key)) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   117
						try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   118
							value = Integer.valueOf(basicSettingsSection.get(key));						
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   119
						} catch (NumberFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   120
							// ignore
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   121
						}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   122
					}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   123
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   124
					if(value==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   125
						Log.w(Scheme.class.getCanonicalName(), "Scheme file "+file+" setting "+key+" is missing or invalid, using default.");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   126
						value = settingMeta.def;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   127
					}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   128
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   129
					if(settingMeta.checkOverMax) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   130
						value = Math.min(value, settingMeta.max);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   131
					}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   132
					if(settingMeta.times1000) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   133
						value *= 1000;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   134
					}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   135
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   136
					basicSettings.put(key, value);						
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   137
				}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   138
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   139
				int gamemods = 0;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   140
				for(Entry<String, GameModMeta> entry : gameModsMeta.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   141
					String key = entry.getKey();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   142
					GameModMeta modMeta = entry.getValue();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   143
					if(Boolean.parseBoolean(gameModsSection.get(key))) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   144
						gamemods |= (1 << modMeta.bitmaskIndex);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   145
					}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   146
				}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   147
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   148
				schemes.add(new Scheme(name, basicSettings, gamemods));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   149
			} catch (InvalidFileFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   150
				throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   151
			} catch (IOException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   152
				throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   153
			}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   154
		}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   155
		return schemes;
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   156
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   157
	
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   158
	/**
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   159
	 * This method will parse the basic flags from a prespecified ini file.
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   160
	 * In the future we could use one provided by the Data folder.
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   161
	 */
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   162
	public static void parseConfiguration(Context c) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   163
		File schemeDir = new File(c.getFilesDir(), DIRECTORY_SCHEME);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   164
		File settingsFile = new File(schemeDir, "basicsettings");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   165
		File gameModsFile = new File(schemeDir, "gamemods");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   166
		
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   167
		try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   168
			Ini ini = new Ini(settingsFile);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   169
			for(Entry<String, Section> sectionEntry : ini.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   170
				basicSettingsMeta.put(sectionEntry.getKey(), new BasicSettingMeta(sectionEntry.getValue()));
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   171
			}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   172
			
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   173
			ini = new Ini(gameModsFile);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   174
			for(Entry<String, Section> sectionEntry : ini.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   175
				gameModsMeta.put(sectionEntry.getKey(), new GameModMeta(sectionEntry.getValue()));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   176
			}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   177
		} catch (InvalidFileFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   178
			throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   179
		} catch (IOException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   180
			throw new RuntimeException(e);
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   181
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   182
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   183
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   184
	public int describeContents() {
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   185
		return 0;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   186
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   187
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   188
	public void writeToParcel(Parcel dest, int flags) {
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   189
		dest.writeString(name);
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   190
		dest.writeInt(gamemod);
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   191
		dest.writeMap(basic);
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   192
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   193
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   194
	public static final Parcelable.Creator<Scheme> CREATOR = new Parcelable.Creator<Scheme>() {
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   195
		public Scheme createFromParcel(Parcel source) {
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   196
			return new Scheme(source);
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   197
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   198
		public Scheme[] newArray(int size) {
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   199
			return new Scheme[size];
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   200
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   201
		
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   202
	};
6436
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
   203
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
   204
	public int compareTo(Scheme another) {
6505
mikade
parents: 6436
diff changeset
   205
		return name.compareTo(another.name);
6436
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
   206
	}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   207
}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   208
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   209
class BasicSettingMeta {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   210
	final String command;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   211
	final String title;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   212
	final int def;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   213
	final int min;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   214
	final int max;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   215
	final boolean times1000;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   216
	final boolean checkOverMax;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   217
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   218
	public BasicSettingMeta(Ini.Section section) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   219
		command = getRequired(section, "command");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   220
		title = section.get("title", "");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   221
		def = Integer.parseInt(getRequired(section, "default"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   222
		min = Integer.parseInt(getRequired(section, "min"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   223
		max = Integer.parseInt(getRequired(section, "max"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   224
		times1000 = Boolean.parseBoolean(section.get("times1000", "false"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   225
		checkOverMax = Boolean.parseBoolean(section.get("checkOverMax", "false"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   226
	}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   227
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   228
	private String getRequired(Ini.Section section, String key) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   229
		String result = section.get(key);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   230
		if(result==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   231
			throw new IllegalArgumentException("basicsettings.ini, section "+section.getName()+" is missing required setting "+key+".");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   232
		}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   233
		return result;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   234
	}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   235
}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   236
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   237
// TODO: Extend with additional metadata
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   238
class GameModMeta {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   239
	final int bitmaskIndex;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   240
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   241
	public GameModMeta(Ini.Section section) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   242
		bitmaskIndex = Integer.parseInt(getRequired(section, "bitmaskIndex"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   243
	}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   244
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   245
	private String getRequired(Ini.Section section, String key) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   246
		String result = section.get(key);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   247
		if(result==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   248
			throw new IllegalArgumentException("gamemods.ini, section "+section.getName()+" is missing required setting "+key+".");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   249
		}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   250
		return result;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   251
	}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   252
}