project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/Datastructures/Scheme.java
author Medo <smaxein@googlemail.com>
Sun, 01 Apr 2012 15:23:34 +0200
changeset 6852 9e724f4863a3
parent 6848 ec371186361b
child 7476 2fb781bbdd51
permissions -rw-r--r--
Added copyright notice to Scheme.java
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>
6852
9e724f4863a3 Added copyright notice to Scheme.java
Medo <smaxein@googlemail.com>
parents: 6848
diff changeset
     4
 * Copyright (c) 2012 Simeon Maxein <smaxein@googlemail.com>
9e724f4863a3 Added copyright notice to Scheme.java
Medo <smaxein@googlemail.com>
parents: 6848
diff changeset
     5
 * 
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
     6
 * 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
     7
 * 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
     8
 * 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
     9
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    10
 * 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
    11
 * 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
    12
 * 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
    13
 * 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
    14
 *
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    15
 * 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
    16
 * 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
    17
 * 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
    18
 */
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    19
6505
mikade
parents: 6436
diff changeset
    20
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
    21
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    22
import java.util.Map;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    23
6047
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.File;
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.FilenameFilter;
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.io.IOException;
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.ArrayList;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    28
import java.util.Arrays;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    29
import java.util.List;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    30
import java.util.Map.Entry;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    31
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
    32
6505
mikade
parents: 6436
diff changeset
    33
import org.hedgewars.hedgeroid.EngineProtocol.EngineProtocolNetwork;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    34
import org.ini4j.Ini;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    35
import org.ini4j.InvalidFileFormatException;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    36
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
    37
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.content.Context;
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.Parcel;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    40
import android.os.Parcelable;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    41
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
    42
6436
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
    43
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
    44
	public static final String DIRECTORY_SCHEME = "schemes";
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    45
	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
    46
	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
    47
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    48
	private final String name;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    49
	private final int gamemod;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    50
	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
    51
		
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    52
	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
    53
		name = _name;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    54
		gamemod = _gamemod;
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    55
		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
    56
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    57
	
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    58
	public Scheme(Parcel in){
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    59
		name = in.readString();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    60
		gamemod = in.readInt();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    61
		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
    62
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    63
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    64
	public int getHealth() {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    65
		return basic.get("InitialHealth");
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
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    68
	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
    69
		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
    70
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    71
		for(Map.Entry<String, Integer> entry : basic.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    72
			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
    73
			
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    74
			//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
    75
			//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
    76
			if(!basicflag.command.equals("inithealth")){
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    77
				epn.sendToEngine(String.format("%s %d", basicflag.command, entry.getValue()));
6725
f5eb11306c6a fixed the schemes on android
Xeli
parents: 6700
diff changeset
    78
			}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    79
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    80
	}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    81
	
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    82
	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
    83
		return name;
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    84
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
    85
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    86
	public static List<Scheme> getSchemes(Context c) throws IllegalArgumentException {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    87
		File schemeDir = new File(c.getFilesDir(), DIRECTORY_SCHEME);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    88
		File[] files = schemeDir.listFiles(new FilenameFilter() {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    89
			public boolean accept(File dir, String filename) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    90
				return filename.toLowerCase().startsWith("scheme_");
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
		});
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    93
		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
    94
		Arrays.sort(files);
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    95
		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
    96
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    97
		for(File file : files) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    98
			try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
    99
				Ini ini = new Ini(file);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   100
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   101
				String name = ini.get("Scheme", "name");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   102
				if(name==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   103
					name = file.getName();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   104
				}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   105
				Section basicSettingsSection = ini.get("BasicSettings");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   106
				Section gameModsSection = ini.get("GameMods");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   107
				if(basicSettingsSection == null || gameModsSection == null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   108
					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
   109
					continue;
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
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   112
				Map<String, Integer> basicSettings = new TreeMap<String, Integer>();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   113
				for(Entry<String, BasicSettingMeta> entry : basicSettingsMeta.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   114
					String key = entry.getKey();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   115
					BasicSettingMeta settingMeta = entry.getValue();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   116
					Integer value = null;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   117
					if(basicSettingsSection.containsKey(key)) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   118
						try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   119
							value = Integer.valueOf(basicSettingsSection.get(key));						
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   120
						} catch (NumberFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   121
							// ignore
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   122
						}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   123
					}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   124
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   125
					if(value==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   126
						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
   127
						value = settingMeta.def;
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
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   130
					if(settingMeta.checkOverMax) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   131
						value = Math.min(value, settingMeta.max);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   132
					}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   133
					if(settingMeta.times1000) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   134
						value *= 1000;
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
					
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   137
					basicSettings.put(key, value);						
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
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   140
				int gamemods = 0;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   141
				for(Entry<String, GameModMeta> entry : gameModsMeta.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   142
					String key = entry.getKey();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   143
					GameModMeta modMeta = entry.getValue();
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   144
					if(Boolean.parseBoolean(gameModsSection.get(key))) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   145
						gamemods |= (1 << modMeta.bitmaskIndex);
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
				
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   149
				schemes.add(new Scheme(name, basicSettings, gamemods));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   150
			} catch (InvalidFileFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   151
				throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   152
			} catch (IOException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   153
				throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   154
			}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   155
		}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   156
		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
   157
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   158
	
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   159
	/**
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   160
	 * 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
   161
	 * 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
   162
	 */
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   163
	public static void parseConfiguration(Context c) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   164
		File schemeDir = new File(c.getFilesDir(), DIRECTORY_SCHEME);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   165
		File settingsFile = new File(schemeDir, "basicsettings");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   166
		File gameModsFile = new File(schemeDir, "gamemods");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   167
		
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   168
		try {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   169
			Ini ini = new Ini(settingsFile);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   170
			for(Entry<String, Section> sectionEntry : ini.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   171
				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
   172
			}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   173
			
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   174
			ini = new Ini(gameModsFile);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   175
			for(Entry<String, Section> sectionEntry : ini.entrySet()) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   176
				gameModsMeta.put(sectionEntry.getKey(), new GameModMeta(sectionEntry.getValue()));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   177
			}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   178
		} catch (InvalidFileFormatException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   179
			throw new RuntimeException(e);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   180
		} catch (IOException e) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   181
			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
   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
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   185
	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
   186
		return 0;
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
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   189
	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
   190
		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
   191
		dest.writeInt(gamemod);
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   192
		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
   193
	}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   194
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   195
	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
   196
		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
   197
			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
   198
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   199
		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
   200
			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
   201
		}
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   202
		
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   203
	};
6436
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
   204
f1a42ba9cab2 Sort the weapons/schemes/styles and give make give them a default value
Xeli
parents: 6047
diff changeset
   205
	public int compareTo(Scheme another) {
6505
mikade
parents: 6436
diff changeset
   206
		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
   207
	}
6047
10011f051f9c Changed package name from org.hedgewars.mobile to org.hedgewars.hedgeroid to upload it to the market
Xeli
parents:
diff changeset
   208
}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   209
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   210
class BasicSettingMeta {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   211
	final String command;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   212
	final String title;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   213
	final int def;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   214
	final int min;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   215
	final int max;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   216
	final boolean times1000;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   217
	final boolean checkOverMax;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   218
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   219
	public BasicSettingMeta(Ini.Section section) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   220
		command = getRequired(section, "command");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   221
		title = section.get("title", "");
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   222
		def = Integer.parseInt(getRequired(section, "default"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   223
		min = Integer.parseInt(getRequired(section, "min"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   224
		max = Integer.parseInt(getRequired(section, "max"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   225
		times1000 = Boolean.parseBoolean(section.get("times1000", "false"));
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   226
		checkOverMax = Boolean.parseBoolean(section.get("checkOverMax", "false"));
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
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   229
	private String getRequired(Ini.Section section, String key) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   230
		String result = section.get(key);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   231
		if(result==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   232
			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
   233
		}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   234
		return result;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   235
	}
6848
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   236
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   237
	@Override
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   238
	public String toString() {
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   239
		return String
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   240
				.format("BasicSettingMeta [command=%s, title=%s, def=%s, min=%s, max=%s, times1000=%s, checkOverMax=%s]",
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   241
						command, title, def, min, max, times1000, checkOverMax);
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   242
	}
6844
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
// TODO: Extend with additional metadata
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   246
class GameModMeta {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   247
	final int bitmaskIndex;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   248
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   249
	public GameModMeta(Ini.Section section) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   250
		bitmaskIndex = Integer.parseInt(getRequired(section, "bitmaskIndex"));
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
	
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   253
	private String getRequired(Ini.Section section, String key) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   254
		String result = section.get(key);
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   255
		if(result==null) {
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   256
			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
   257
		}
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   258
		return result;
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   259
	}
6848
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   260
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   261
	@Override
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   262
	public String toString() {
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   263
		return String.format("GameModMeta [bitmaskIndex=%s]", bitmaskIndex);
ec371186361b Added some toString methods to help when debugging
Medo <smaxein@googlemail.com>
parents: 6844
diff changeset
   264
	}
6844
69fb04c8a841 Scheme definitions now use .ini files.
Medo <smaxein@googlemail.com>
parents: 6725
diff changeset
   265
}