diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 31fa3fe03b..4564fc8c08 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -19,7 +19,6 @@ import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.common.GooglePlayServicesRepairableException; import com.google.android.gms.security.ProviderInstaller; -import io.anuke.kryonet.DefaultThreadImpl; import io.anuke.kryonet.KryoClient; import io.anuke.kryonet.KryoServer; import io.anuke.mindustry.core.Platform; @@ -42,7 +41,6 @@ import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.Locale; import static io.anuke.mindustry.Vars.*; @@ -74,11 +72,6 @@ public class AndroidLauncher extends PatchedAndroidApplication{ TextFieldDialogListener.add(field, 0, length); } - @Override - public String getLocaleName(Locale locale){ - return locale.getDisplayName(locale); - } - @Override public void openDonations(){ showDonations(); @@ -87,8 +80,7 @@ public class AndroidLauncher extends PatchedAndroidApplication{ @Override public String getUUID(){ try{ - String s = Secure.getString(getContext().getContentResolver(), - Secure.ANDROID_ID); + String s = Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID); int len = s.length(); byte[] data = new byte[len / 2]; for(int i = 0; i < len; i += 2){ diff --git a/build.gradle b/build.gradle index c5f82b6b0b..13ee44b98f 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,6 @@ buildscript { } dependencies { classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0' - classpath 'de.richsource.gradle.plugins:gwt-gradle-plugin:0.6' classpath "com.badlogicgames.gdx:gdx-tools:1.9.8" } } @@ -100,24 +99,6 @@ project(":desktop") { } } -project(":html") { - apply plugin: "gwt" - apply plugin: "war" - - dependencies { - compile project(":core") - compileOnly project(":annotations") - - compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion" - compile "com.badlogicgames.gdx:gdx:$gdxVersion:sources" - compile "com.badlogicgames.gdx:gdx-backend-gwt:$gdxVersion:sources" - - compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion:sources" - compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion" - compile "com.badlogicgames.gdx:gdx-controllers-gwt:$gdxVersion:sources" - } -} - project(":ios") { apply plugin: "java" apply plugin: "robovm" diff --git a/core/src/io/anuke/mindustry/Vars.java b/core/src/io/anuke/mindustry/Vars.java index 286f022c0d..968dfcc39b 100644 --- a/core/src/io/anuke/mindustry/Vars.java +++ b/core/src/io/anuke/mindustry/Vars.java @@ -78,8 +78,6 @@ public class Vars{ public static boolean mobile; public static boolean ios; public static boolean android; - //shorthand for whether or not this is running on GWT - public static boolean gwt; //main data directory public static FileHandle dataDirectory; //directory for user-created map data @@ -139,7 +137,7 @@ public class Vars{ } } - Arrays.sort(locales, (l1, l2) -> Platform.instance.getLocaleName(l1).compareTo(Platform.instance.getLocaleName(l2))); + Arrays.sort(locales, (l1, l2) -> l1.getDisplayName(l1).compareTo(l2.getDisplayName(l2))); Version.init(); content = new ContentLoader(); @@ -171,13 +169,10 @@ public class Vars{ mobile = Gdx.app.getType() == ApplicationType.Android || Gdx.app.getType() == ApplicationType.iOS || testMobile; ios = Gdx.app.getType() == ApplicationType.iOS; android = Gdx.app.getType() == ApplicationType.Android; - gwt = Gdx.app.getType() == ApplicationType.WebGL; - if(!gwt){ - dataDirectory = OS.getAppDataDirectory(appName); - customMapDirectory = dataDirectory.child("maps/"); - saveDirectory = dataDirectory.child("saves/"); - } + dataDirectory = OS.getAppDataDirectory(appName); + customMapDirectory = dataDirectory.child("maps/"); + saveDirectory = dataDirectory.child("saves/"); fontScale = Math.max(Unit.dp.scl(1f) / 2f, 0.5f); baseCameraScale = Math.round(Unit.dp.scl(4)); diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index f289742c2f..a126e0c699 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -57,7 +57,7 @@ public class Control extends Module{ saves = new Saves(); unlocks = new Unlocks(); - Inputs.useControllers(!gwt); + Inputs.useControllers(true); Gdx.input.setCatchBackKey(true); diff --git a/core/src/io/anuke/mindustry/core/Platform.java b/core/src/io/anuke/mindustry/core/Platform.java index c6d038cdb8..9f47a307c2 100644 --- a/core/src/io/anuke/mindustry/core/Platform.java +++ b/core/src/io/anuke/mindustry/core/Platform.java @@ -7,7 +7,6 @@ import io.anuke.ucore.function.Consumer; import io.anuke.ucore.scene.ui.TextField; import java.util.Date; -import java.util.Locale; import java.util.Random; public abstract class Platform { @@ -35,10 +34,6 @@ public abstract class Platform { public boolean canDonate(){ return false; } - /**Return the localized name for the locale. This is basically a workaround for GWT not supporting getName().*/ - public String getLocaleName(Locale locale){ - return locale.toString(); - } /**Must be a base64 string 8 bytes in length.*/ public String getUUID(){ String uuid = Settings.getString("uuid", ""); @@ -54,8 +49,6 @@ public abstract class Platform { } /**Only used for iOS or android: open the share menu for a map or save.*/ public void shareFile(FileHandle file){} - /**Download a file. Only used on GWT backend.*/ - public void downloadFile(String name, byte[] bytes){} /**Show a file chooser. Desktop only. * diff --git a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java index 829eb8e419..f54039e77f 100644 --- a/core/src/io/anuke/mindustry/editor/MapEditorDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapEditorDialog.java @@ -38,7 +38,6 @@ import io.anuke.ucore.util.Log; import io.anuke.ucore.util.Mathf; import io.anuke.ucore.util.Strings; -import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; @@ -113,73 +112,40 @@ public class MapEditorDialog extends Dialog implements Disposable{ }, true, mapExtension); }, "$text.editor.importimage", "$text.editor.importimage.description", "icon-file-image", (Runnable)() -> { - if(gwt){ - ui.showError("$text.web.unsupported"); - }else { - Platform.instance.showFileChooser("$text.loadimage", "Image Files", file -> { - ui.loadGraphics(() -> { - try{ - MapTileData data = MapIO.readLegacyPixmap(new Pixmap(file)); + Platform.instance.showFileChooser("$text.loadimage", "Image Files", file -> { + ui.loadGraphics(() -> { + try{ + MapTileData data = MapIO.readLegacyPixmap(new Pixmap(file)); - editor.beginEdit(data, editor.getTags(), false); - view.clearStack(); - }catch (Exception e){ - ui.showError(Bundles.format("text.editor.errorimageload", Strings.parseException(e, false))); - Log.err(e); - } - }); - }, true, "png"); - } + editor.beginEdit(data, editor.getTags(), false); + view.clearStack(); + }catch (Exception e){ + ui.showError(Bundles.format("text.editor.errorimageload", Strings.parseException(e, false))); + Log.err(e); + } + }); + }, true, "png"); })); t.addImageTextButton("$text.editor.export", "icon-save-map", isize, () -> createDialog("$text.editor.export", "$text.editor.exportfile", "$text.editor.exportfile.description", "icon-file", (Runnable) () -> { - if(!gwt){ - Platform.instance.showFileChooser("$text.saveimage", "Map Files", file -> { - file = file.parent().child(file.nameWithoutExtension() + "." + mapExtension); - FileHandle result = file; - ui.loadGraphics(() -> { + Platform.instance.showFileChooser("$text.saveimage", "Map Files", file -> { + file = file.parent().child(file.nameWithoutExtension() + "." + mapExtension); + FileHandle result = file; + ui.loadGraphics(() -> { - try{ - if(!editor.getTags().containsKey("name")){ - editor.getTags().put("name", result.nameWithoutExtension()); - } - MapIO.writeMap(result.write(false), editor.getTags(), editor.getMap()); - }catch(Exception e){ - ui.showError(Bundles.format("text.editor.errorimagesave", Strings.parseException(e, false))); - Log.err(e); + try{ + if(!editor.getTags().containsKey("name")){ + editor.getTags().put("name", result.nameWithoutExtension()); } - }); - }, false, mapExtension); - }else{ - try{ - ByteArrayOutputStream ba = new ByteArrayOutputStream(); - MapIO.writeMap(ba, editor.getTags(), editor.getMap()); - Platform.instance.downloadFile(editor.getTags().get("name", "unknown") + "." + mapExtension, ba.toByteArray()); - }catch(IOException e){ - ui.showError(Bundles.format("text.editor.errorimagesave", Strings.parseException(e, false))); - Log.err(e); - } - } - }/*, - "$text.editor.exportimage", "$text.editor.exportimage.description", "icon-file-image", (Listenable)() -> { - if(gwt){ - ui.showError("$text.web.unsupported"); - }else{ - Platform.instance.showFileChooser("$text.saveimage", "Image Files", file -> { - file = file.parent().child(file.nameWithoutExtension() + ".png"); - FileHandle result = file; - ui.loadGraphics(() -> { - try{ - Pixmaps.write(MapIO.generatePixmap(editor.getMap()), result); - }catch (Exception e){ - ui.showError(Bundles.format("text.editor.errorimagesave", Strings.parseException(e, false))); - Log.err(e); - } - }); - }, false, "png"); - } - }*/)); + MapIO.writeMap(result.write(false), editor.getTags(), editor.getMap()); + }catch(Exception e){ + ui.showError(Bundles.format("text.editor.errorimagesave", Strings.parseException(e, false))); + Log.err(e); + } + }); + }, false, mapExtension); + })); t.row(); diff --git a/core/src/io/anuke/mindustry/game/Saves.java b/core/src/io/anuke/mindustry/game/Saves.java index 4ca1c5c42d..3947d578cd 100644 --- a/core/src/io/anuke/mindustry/game/Saves.java +++ b/core/src/io/anuke/mindustry/game/Saves.java @@ -256,9 +256,7 @@ public class Saves{ } public void delete(){ - if(!gwt){ //can't delete files - SaveIO.fileFor(index).delete(); - } + SaveIO.fileFor(index).delete(); saves.removeValue(this, true); saveMap.remove(index); if(this == current){ diff --git a/core/src/io/anuke/mindustry/io/SaveIO.java b/core/src/io/anuke/mindustry/io/SaveIO.java index 0c24f2357d..af0e9287b2 100644 --- a/core/src/io/anuke/mindustry/io/SaveIO.java +++ b/core/src/io/anuke/mindustry/io/SaveIO.java @@ -2,12 +2,10 @@ package io.anuke.mindustry.io; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.IntArray; import com.badlogic.gdx.utils.IntMap; import io.anuke.mindustry.Vars; import io.anuke.mindustry.io.versions.Save16; -import io.anuke.ucore.core.Settings; import java.io.*; import java.util.zip.DeflaterOutputStream; @@ -33,40 +31,23 @@ public class SaveIO{ } public static void saveToSlot(int slot){ - if(gwt){ - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - write(stream); - Settings.putString("save-" + slot + "-data", new String(Base64Coder.encode(stream.toByteArray()))); - Settings.save(); - }else{ - FileHandle file = fileFor(slot); - boolean exists = file.exists(); - if(exists) file.moveTo(file.sibling(file.name() + "-backup." + file.extension())); - try{ - write(fileFor(slot)); - }catch(Exception e){ - if(exists) file.sibling(file.name() + "-backup." + file.extension()).moveTo(file); - throw new RuntimeException(e); - } + FileHandle file = fileFor(slot); + boolean exists = file.exists(); + if(exists) file.moveTo(file.sibling(file.name() + "-backup." + file.extension())); + try{ + write(fileFor(slot)); + }catch(Exception e){ + if(exists) file.sibling(file.name() + "-backup." + file.extension()).moveTo(file); + throw new RuntimeException(e); } } public static void loadFromSlot(int slot){ - if(gwt){ - load(getSlotStream(slot)); - }else{ - load(fileFor(slot)); - } + load(fileFor(slot)); } public static DataInputStream getSlotStream(int slot){ - if(gwt){ - String string = Settings.getString("save-" + slot + "-data", ""); - byte[] bytes = Base64Coder.decode(string); - return new DataInputStream(new ByteArrayInputStream(bytes)); - }else{ - return new DataInputStream(new InflaterInputStream(fileFor(slot).read())); - } + return new DataInputStream(new InflaterInputStream(fileFor(slot).read())); } public static boolean isSaveValid(int slot){ diff --git a/core/src/io/anuke/mindustry/maps/Maps.java b/core/src/io/anuke/mindustry/maps/Maps.java index 6493bbb0f3..74936f00f8 100644 --- a/core/src/io/anuke/mindustry/maps/Maps.java +++ b/core/src/io/anuke/mindustry/maps/Maps.java @@ -4,16 +4,16 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.utils.Array; -import com.badlogic.gdx.utils.Base64Coder; import com.badlogic.gdx.utils.Disposable; import com.badlogic.gdx.utils.ObjectMap; import io.anuke.mindustry.io.MapIO; -import io.anuke.ucore.core.Settings; import io.anuke.ucore.function.Supplier; import io.anuke.ucore.util.Log; import io.anuke.ucore.util.ThreadArray; -import java.io.*; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; import static io.anuke.mindustry.Vars.*; @@ -29,8 +29,6 @@ public class Maps implements Disposable{ private Array allMaps = new ThreadArray<>(); /**Temporary array used for returning things.*/ private Array returnArray = new ThreadArray<>(); - /**Used for storing a list of custom map names for GWT.*/ - private Array customMapNames; /**Returns a list of all maps, including custom ones.*/ public Array all(){ @@ -76,25 +74,14 @@ public class Maps implements Disposable{ /**Save a map. This updates all values and stored data necessary.*/ public void saveMap(String name, MapTileData data, ObjectMap tags){ - try { + try{ //create copy of tags to prevent mutation later ObjectMap newTags = new ObjectMap<>(); newTags.putAll(tags); tags = newTags; - if (!gwt) { - FileHandle file = customMapDirectory.child(name + "." + mapExtension); - MapIO.writeMap(file.write(false), tags, data); - } else { - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - MapIO.writeMap(stream, tags, data); - Settings.putString("map-data-" + name, new String(Base64Coder.encode(stream.toByteArray()))); - if(!customMapNames.contains(name, false)){ - customMapNames.add(name); - Settings.putObject("custom-maps", customMapNames); - } - Settings.save(); - } + FileHandle file = customMapDirectory.child(name + "." + mapExtension); + MapIO.writeMap(file.write(false), tags, data); if(maps.containsKey(name)){ if(maps.get(name).texture != null) { @@ -105,7 +92,7 @@ public class Maps implements Disposable{ } Map map = new Map(name, new MapMeta(version, tags, data.width(), data.height(), null), true, getStreamFor(name)); - if (!headless){ + if(!headless){ map.texture = new Texture(MapIO.generatePixmap(data)); } allMaps.add(map); @@ -126,14 +113,7 @@ public class Maps implements Disposable{ maps.remove(map.name); allMaps.removeValue(map, true); - if (!gwt) { - customMapDirectory.child(map.name + "." + mapExtension).delete(); - } else { - customMapNames.removeValue(map.name, false); - Settings.putString("map-data-" + map.name, ""); - Settings.putObject("custom-maps", customMapNames); - Settings.save(); - } + customMapDirectory.child(map.name + "." + mapExtension).delete(); } private void loadMap(String name, Supplier supplier, boolean custom) throws IOException{ @@ -151,43 +131,21 @@ public class Maps implements Disposable{ } private void loadCustomMaps(){ - if(!gwt){ - for(FileHandle file : customMapDirectory.list()){ - try{ - if(file.extension().equalsIgnoreCase(mapExtension)){ - loadMap(file.nameWithoutExtension(), file::read, true); - } - }catch (Exception e){ - Log.err("Failed to load custom map file '{0}'!", file); - Log.err(e); - } - } - - }else{ - customMapNames = Settings.getObject("custom-maps", Array.class, Array::new); - - for(String name : customMapNames){ - try{ - String data = Settings.getString("map-data-" + name, ""); - byte[] bytes = Base64Coder.decode(data); - loadMap(name, () -> new ByteArrayInputStream(bytes), true); - }catch (Exception e){ - Log.err("Failed to load custom map '{0}'!", name); - Log.err(e); + for(FileHandle file : customMapDirectory.list()){ + try{ + if(file.extension().equalsIgnoreCase(mapExtension)){ + loadMap(file.nameWithoutExtension(), file::read, true); } + }catch (Exception e){ + Log.err("Failed to load custom map file '{0}'!", file); + Log.err(e); } } } /**Returns an input stream supplier for a given map name.*/ private Supplier getStreamFor(String name){ - if(!gwt){ - return customMapDirectory.child(name + "." + mapExtension)::read; - }else{ - String data = Settings.getString("map-data-" + name, ""); - byte[] bytes = Base64Coder.decode(data); - return () -> new ByteArrayInputStream(bytes); - } + return customMapDirectory.child(name + "." + mapExtension)::read; } @Override diff --git a/core/src/io/anuke/mindustry/net/Net.java b/core/src/io/anuke/mindustry/net/Net.java index ea22f63e0b..78941f012f 100644 --- a/core/src/io/anuke/mindustry/net/Net.java +++ b/core/src/io/anuke/mindustry/net/Net.java @@ -165,7 +165,7 @@ public class Net{ } /** - * Starts discovering servers on a different thread. Does not work with GWT. + * Starts discovering servers on a different thread. * Callback is run on the main libGDX thread. */ public static void discoverServers(Consumer cons, Runnable done){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java index 46f533c286..c2917a0654 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/AdminsDialog.java @@ -20,8 +20,6 @@ public class AdminsDialog extends FloatingDialog{ private void setup(){ content().clear(); - if(gwt) return; - float w = 400f, h = 80f; Table table = new Table(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java index 012bbe6ee1..9045c6e7cc 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/BansDialog.java @@ -21,8 +21,6 @@ public class BansDialog extends FloatingDialog{ private void setup(){ content().clear(); - if(gwt) return; - float w = 400f, h = 80f; Table table = new Table(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java index b9bfe19228..b9a4305c87 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/CustomGameDialog.java @@ -49,7 +49,7 @@ public class CustomGameDialog extends FloatingDialog{ modes.marginBottom(5); for(GameMode mode : GameMode.values()){ - if(mode.hidden || (mode.isPvp && gwt)) continue; + if(mode.hidden) continue; modes.addButton("$mode." + mode.name() + ".name", "toggle", () -> state.mode = mode) .update(b -> b.setChecked(state.mode == mode)).group(group).size(140f, 54f).padBottom(-5); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java index 66d2d0b847..be56e08427 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FileChooser.java @@ -21,15 +21,13 @@ import io.anuke.ucore.util.Pooling; import java.util.Arrays; -import static io.anuke.mindustry.Vars.gwt; - public class FileChooser extends FloatingDialog{ public static Predicate pngFilter = file -> file.extension().equalsIgnoreCase("png"); public static Predicate mapFilter = file -> file.extension().equalsIgnoreCase(Vars.mapExtension); public static Predicate jpegFilter = file -> file.extension().equalsIgnoreCase("png") || file.extension().equalsIgnoreCase("jpg") || file.extension().equalsIgnoreCase("jpeg"); public static Predicate defaultFilter = file -> true; private Table files; - private FileHandle homeDirectory = gwt ? Gdx.files.internal("") : Gdx.files.absolute(OS.isMac ? OS.getProperty("user.home") + "/Downloads/" : + private FileHandle homeDirectory = Gdx.files.absolute(OS.isMac ? OS.getProperty("user.home") + "/Downloads/" : Gdx.files.getExternalStoragePath()); private FileHandle directory = homeDirectory; private ScrollPane pane; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java index 540691927b..0cbd003d69 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/JoinDialog.java @@ -247,16 +247,14 @@ public class JoinDialog extends FloatingDialog{ } void refreshLocal(){ - if(!Vars.gwt){ - totalHosts = 0; + totalHosts = 0; - local.clear(); - local.background((Drawable)null); - local.table("button", t -> { - t.label(() -> "[accent]" + Bundles.get("text.hosts.discovering") + Strings.animated(4, 10f, ".")).pad(10f); - }).growX(); - Net.discoverServers(this::addLocalHost, this::finishLocalHosts); - } + local.clear(); + local.background((Drawable)null); + local.table("button", t -> { + t.label(() -> "[accent]" + Bundles.get("text.hosts.discovering") + Strings.animated(4, 10f, ".")).pad(10f); + }).growX(); + Net.discoverServers(this::addLocalHost, this::finishLocalHosts); } void finishLocalHosts(){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java index b6cc42752c..9360b214cb 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LanguageDialog.java @@ -1,6 +1,5 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.mindustry.core.Platform; import io.anuke.ucore.core.Settings; import io.anuke.ucore.scene.ui.ButtonGroup; import io.anuke.ucore.scene.ui.ScrollPane; @@ -31,7 +30,7 @@ public class LanguageDialog extends FloatingDialog{ ButtonGroup group = new ButtonGroup<>(); for(Locale loc : locales){ - TextButton button = new TextButton(Platform.instance.getLocaleName(loc), "toggle"); + TextButton button = new TextButton(loc.getDisplayName(loc), "toggle"); button.clicked(() -> { if(getLocale().equals(loc)) return; Settings.putString("locale", loc.toString()); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java index 75f9c0c923..8452cab889 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/LoadDialog.java @@ -86,28 +86,27 @@ public class LoadDialog extends FloatingDialog{ }); }).size(14 * 3).right(); - if(!gwt){ - t.addImageButton("icon-save", "empty", 14 * 3, () -> { - if(!ios){ - Platform.instance.showFileChooser(Bundles.get("text.save.export"), "Mindustry Save", file -> { - try{ - slot.exportFile(file); - setup(); - }catch(IOException e){ - ui.showError(Bundles.format("text.save.export.fail", Strings.parseException(e, false))); - } - }, false, saveExtension); - }else{ + t.addImageButton("icon-save", "empty", 14 * 3, () -> { + if(!ios){ + Platform.instance.showFileChooser(Bundles.get("text.save.export"), "Mindustry Save", file -> { try{ - FileHandle file = Gdx.files.local("save-" + slot.getName() + "." + Vars.saveExtension); slot.exportFile(file); - Platform.instance.shareFile(file); - }catch(Exception e){ + setup(); + }catch(IOException e){ ui.showError(Bundles.format("text.save.export.fail", Strings.parseException(e, false))); } + }, false, saveExtension); + }else{ + try{ + FileHandle file = Gdx.files.local("save-" + slot.getName() + "." + Vars.saveExtension); + slot.exportFile(file); + Platform.instance.shareFile(file); + }catch(Exception e){ + ui.showError(Bundles.format("text.save.export.fail", Strings.parseException(e, false))); } - }).size(14 * 3).right(); - } + } + }).size(14 * 3).right(); + }).padRight(-10).growX(); @@ -153,7 +152,7 @@ public class LoadDialog extends FloatingDialog{ slots.row(); - if(gwt || ios) return; + if(ios) return; slots.addImageTextButton("$text.save.import", "icon-add", "clear", 14 * 3, () -> { Platform.instance.showFileChooser(Bundles.get("text.save.import"), "Mindustry Save", file -> { diff --git a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java index afd5b8dbcd..6aa1dfa80a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/PausedDialog.java @@ -61,25 +61,14 @@ public class PausedDialog extends FloatingDialog{ content().addButton("$text.settings", ui.settings::show); content().row(); - content().addButton("$text.savegame", () -> { - save.show(); - }).disabled(s -> world.getSector() != null); + content().addButton("$text.savegame", save::show).disabled(s -> world.getSector() != null); content().row(); - content().addButton("$text.loadgame", () -> { - load.show(); - }).disabled(b -> Net.active()); + content().addButton("$text.loadgame", load::show).disabled(b -> Net.active()); content().row(); - content().addButton("$text.hostserver", () -> { - if(!gwt){ - ui.host.show(); - }else{ - ui.showInfo("$text.web.unsupported"); - } - }).disabled(b -> Net.active()); - + content().addButton("$text.hostserver", ui.host::show).disabled(b -> Net.active()); content().row(); diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index b94cc4eea0..69a7e9479a 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -175,11 +175,8 @@ public class SettingsMenuDialog extends SettingsDialog{ Settings.prefs().put(map); Settings.save(); - if(!gwt){ - Settings.prefs().clear(); - for(FileHandle file : dataDirectory.list()){ - file.deleteDirectory(); - } + for(FileHandle file : dataDirectory.list()){ + file.deleteDirectory(); } Gdx.app.exit(); @@ -193,19 +190,15 @@ public class SettingsMenuDialog extends SettingsDialog{ } }); - if(!gwt){ - graphics.sliderPref("fpscap", 125, 5, 125, 5, s -> (s > 120 ? Bundles.get("setting.fpscap.none") : Bundles.format("setting.fpscap.text", s))); + graphics.sliderPref("fpscap", 125, 5, 125, 5, s -> (s > 120 ? Bundles.get("setting.fpscap.none") : Bundles.format("setting.fpscap.text", s))); + graphics.checkPref("multithread", mobile, threads::setEnabled); + + if(Settings.getBool("multithread")){ + threads.setEnabled(true); } - if(!gwt){ - graphics.checkPref("multithread", mobile, threads::setEnabled); - if(Settings.getBool("multithread")){ - threads.setEnabled(true); - } - } - - if(!mobile && !gwt){ + if(!mobile){ graphics.checkPref("vsync", true, b -> Gdx.graphics.setVSync(b)); graphics.checkPref("fullscreen", false, b -> { if(b){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index db13164fb4..125a26dd4d 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -127,7 +127,7 @@ public class HudFragment extends Fragment{ t.label(() -> tps.get(threads.getTPS())).visible(() -> threads.isEnabled()); t.row(); if(Net.hasClient()){ - t.label(() -> ping.get(Net.getPing())).visible(() -> Net.client() && !gwt).colspan(2); + t.label(() -> ping.get(Net.getPing())).visible(Net::client).colspan(2); } }).size(-1).visible(() -> Settings.getBool("fps")).update(t -> t.setTranslation(0, (!waves.isVisible() ? wavetable.getHeight() : Math.min(wavetable.getTranslation().y, wavetable.getHeight())) )).get(); diff --git a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java index 703a8a6fb9..d86e3a51db 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/MenuFragment.java @@ -132,9 +132,7 @@ public class MenuFragment extends Fragment{ out.row(); - if(!gwt){ - out.add(new MenuButton("icon-exit", "$text.quit", Gdx.app::exit)).width(bw).colspan(2); - } + out.add(new MenuButton("icon-exit", "$text.quit", Gdx.app::exit)).width(bw).colspan(2); }); } @@ -153,12 +151,8 @@ public class MenuFragment extends Fragment{ dialog.content().row(); dialog.content().add(new MenuButton("icon-add", "$text.joingame", () -> { - if(!gwt){ - ui.join.show(); - dialog.hide(); - }else{ - ui.showInfo("$text.web.unsupported"); - } + ui.join.show(); + dialog.hide(); })); dialog.content().add(new MenuButton("icon-editor", "$text.customgame", () -> { diff --git a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java index 2a58ffcab8..8b8633baf3 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/PlayerListFragment.java @@ -3,14 +3,12 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.graphics.g2d.Batch; import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.graphics.Palette; import io.anuke.mindustry.net.Net; import io.anuke.mindustry.net.NetConnection; import io.anuke.mindustry.net.Packets.AdminAction; import io.anuke.ucore.core.Core; -import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.scene.Group; @@ -73,7 +71,7 @@ public class PlayerListFragment extends Fragment{ float h = 74f; playerGroup.forEach(player -> { - NetConnection connection = gwt ? null : player.con; + NetConnection connection = player.con; if(connection == null && Net.server() && !player.isLocal) return; diff --git a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java index dd6f09a967..5dfbea48eb 100644 --- a/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java +++ b/desktop/src/io/anuke/mindustry/desktop/DesktopPlatform.java @@ -22,7 +22,6 @@ import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; -import java.util.Locale; import static io.anuke.mindustry.Vars.*; @@ -58,11 +57,6 @@ public class DesktopPlatform extends Platform{ return NumberFormat.getIntegerInstance().format(number); } - @Override - public String getLocaleName(Locale locale){ - return locale.getDisplayName(locale); - } - @Override public void updateRPC(){ diff --git a/html/build.gradle b/html/build.gradle deleted file mode 100644 index 6b49291540..0000000000 --- a/html/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: "java" - -gwt { - gwtVersion='2.8.0' // Should match the gwt version used for building the gwt backend - maxHeapSize="2G" // Default 256m is not enough for gwt compiler. GWT is HUNGRY - minHeapSize="1G" - - src = files(file("src/")) // Needs to be in front of "modules" below. - modules 'io.anuke.mindustry.GdxDefinition' - devModules 'io.anuke.mindustry.GdxDefinitionSuperdev' - project.webAppDirName = 'webapp' - - compiler { - strict = true - disableCastChecking = true - //style = de.richsource.gradle.plugins.gwt.Style.DETAILED - } -} - -task dist(dependsOn: [clean, compileGwt]) { - doLast { - file("build/dist").mkdirs() - copy { - from "build/gwt/out" - into "build/dist" - } - copy { - from "webapp" - into "build/dist" - } - copy { - from "war" - into "build/dist" - } - } -} - -task distZip(type: Zip, dependsOn: dist){ - from "build/dist" - archiveName appName + "-html5.zip" - destinationDir(file("build/dist-zipped")) -} - -draftWar { - from "war" -} - -task addSource{ - doLast{ - sourceSets.main.compileClasspath += files(project(':core').sourceSets.main.allJava.srcDirs) - //this WILL fail if uCore is not a module - sourceSets.main.compileClasspath += files(project(':uCore').sourceSets.main.allJava.srcDirs) - } -} - -tasks.compileGwt.dependsOn(addSource) -tasks.draftCompileGwt.dependsOn(addSource) - -sourceCompatibility = 1.8 -sourceSets.main.java.srcDirs = [ "src/" ] - - -eclipse.project { - name = appName + "-html" -} diff --git a/html/src/io/anuke/mindustry/GdxDefinition.gwt.xml b/html/src/io/anuke/mindustry/GdxDefinition.gwt.xml deleted file mode 100644 index 15601ef897..0000000000 --- a/html/src/io/anuke/mindustry/GdxDefinition.gwt.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/html/src/io/anuke/mindustry/GdxDefinitionSuperdev.gwt.xml b/html/src/io/anuke/mindustry/GdxDefinitionSuperdev.gwt.xml deleted file mode 100644 index 2066c6820b..0000000000 --- a/html/src/io/anuke/mindustry/GdxDefinitionSuperdev.gwt.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/html/src/io/anuke/mindustry/client/HtmlLauncher.java b/html/src/io/anuke/mindustry/client/HtmlLauncher.java deleted file mode 100644 index 5215771eda..0000000000 --- a/html/src/io/anuke/mindustry/client/HtmlLauncher.java +++ /dev/null @@ -1,224 +0,0 @@ -package io.anuke.mindustry.client; - -import com.badlogic.gdx.ApplicationListener; -import com.badlogic.gdx.backends.gwt.GwtApplication; -import com.badlogic.gdx.backends.gwt.GwtApplicationConfiguration; -import com.badlogic.gdx.backends.gwt.preloader.Preloader.PreloaderCallback; -import com.badlogic.gdx.backends.gwt.preloader.Preloader.PreloaderState; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.utils.Base64Coder; -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Document; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.NodeList; -import com.google.gwt.dom.client.Style; -import com.google.gwt.dom.client.Style.Unit; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.i18n.shared.DateTimeFormat; -import com.google.gwt.user.client.ui.*; -import io.anuke.mindustry.Mindustry; -import io.anuke.mindustry.core.Platform; -import io.anuke.ucore.function.Consumer; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; -import java.util.Date; - -public class HtmlLauncher extends GwtApplication { - static final int WIDTH = 800; - static final int HEIGHT = 600; - static HtmlLauncher instance; - static Consumer fileCons; - - @Override - public PreloaderCallback getPreloaderCallback () { - final Panel preloaderPanel = new VerticalPanel(); - preloaderPanel.setStyleName("gdx-preloader"); - final Image logo = new Image(GWT.getModuleBaseURL() + "logo.png"); - logo.setStyleName("logo"); - preloaderPanel.add(logo); - final Panel meterPanel = new SimplePanel(); - meterPanel.setStyleName("gdx-meter"); - meterPanel.addStyleName("red"); - final InlineHTML meter = new InlineHTML(); - final Style meterStyle = meter.getElement().getStyle(); - meterStyle.setWidth(0, Unit.PCT); - meterPanel.add(meter); - preloaderPanel.add(meterPanel); - getRootPanel().add(preloaderPanel); - return new PreloaderCallback() { - @Override - public void error (String file) { - System.out.println("error: " + file); - } - - @Override - public void update (PreloaderState state) { - meterStyle.setWidth(100f * state.getProgress(), Unit.PCT); - } - }; - } - - @Override - public GwtApplicationConfiguration getConfig() { - GwtApplicationConfiguration config = new GwtApplicationConfiguration(WIDTH, HEIGHT); - - Element element = Document.get().getElementById("embed-html"); - VerticalPanel panel = new VerticalPanel(); - panel.setWidth("100%"); - panel.setHeight("100%"); - panel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); - panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); - element.appendChild(panel.getElement()); - config.rootPanel = panel; - config.width = 2000; - config.height = 2000; - - return config; - } - - @Override - public ApplicationListener createApplicationListener() { - instance = this; - setLogLevel(LOG_NONE); - setLoadingListener(new LoadingListener() { - @Override - public void beforeSetup() { - - } - - @Override - public void afterSetup() { - scaleCanvas(); - setupResizeHook(); - } - }); - - Platform.instance = new Platform(){ - DateTimeFormat format = DateTimeFormat.getFormat("EEE, dd MMM yyyy HH:mm:ss"); - - @Override - public void showFileChooser(String text, String content, Consumer cons, boolean open, String filetype) { - if(!open) return; //can't save files on gwt - - fileCons = cons; - createFileChooser(); - } - - @Override - public String format(Date date){ - return format.format(date); - } - - @Override - public String format(int number){ - return NumberFormat.getDecimalFormat().format(number); - } - - @Override - public void downloadFile(String name, byte[] bytes) { - downloadBytes(name, new String(Base64Coder.encode(bytes))); - } - }; - - return new Mindustry(); - } - - void scaleCanvas() { - Element element = Document.get().getElementById("embed-html"); - int innerWidth = getWindowInnerWidth(); - int innerHeight = getWindowInnerHeight(); - int newWidth = innerWidth; - int newHeight = innerHeight; - float ratio = innerWidth / (float) innerHeight; - float viewRatio = WIDTH / (float) HEIGHT; - - if (ratio > viewRatio) { - newWidth = (int) (innerHeight * viewRatio); - } else { - newHeight = (int) (innerWidth / viewRatio); - } - - NodeList nl = element.getElementsByTagName("canvas"); - - if (nl != null && nl.getLength() > 0) { - Element canvas = nl.getItem(0); - canvas.setAttribute("width", "" + newWidth + "px"); - canvas.setAttribute("height", "" + newHeight + "px"); - canvas.getStyle().setWidth(newWidth, Style.Unit.PX); - canvas.getStyle().setHeight(newHeight, Style.Unit.PX); - canvas.getStyle().setTop((int) ((innerHeight - newHeight) * 0.5f), Style.Unit.PX); - canvas.getStyle().setLeft((int) ((innerWidth - newWidth) * 0.5f), Style.Unit.PX); - canvas.getStyle().setPosition(Style.Position.ABSOLUTE); - } - } - - native void createFileChooser() /*-{ - function getBase64(file, callback) { - var reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = function(){ callback(reader.result); } - reader.onerror = function(error){ console.log(error); } - } - - var input = document.createElement('input'); - input.type = 'file'; - input.onchange = function() { - getBase64(input.files[0], function(data){ @io.anuke.mindustry.client.HtmlLauncher::handleFileSelect(Ljava/lang/String;)(data); }); - }; - input.click(); - }-*/; - - native void downloadBytes(String name, String base64) /*-{ - var binaryString = window.atob(base64); - var binaryLen = binaryString.length; - var bytes = new Uint8Array(binaryLen); - for (var i = 0; i < binaryLen; i++) { - var ascii = binaryString.charCodeAt(i); - bytes[i] = ascii; - } - - var blob = new Blob([bytes]); - var link = document.createElement('a'); - link.href = window.URL.createObjectURL(blob); - link.download = name; - link.click(); - }-*/; - - native int getWindowInnerWidth() /*-{ - return $wnd.innerWidth; - }-*/; - - native int getWindowInnerHeight() /*-{ - return $wnd.innerHeight; - }-*/; - - native void setupResizeHook() /*-{ - var htmlLauncher_onWindowResize = $entry(@io.anuke.mindustry.client.HtmlLauncher::handleResize()); - $wnd.addEventListener('resize', htmlLauncher_onWindowResize, false); - }-*/; - - public static void handleResize() { - instance.scaleCanvas(); - } - - public static void handleFileSelect(String base64){ - ByteArrayInputStream stream = new ByteArrayInputStream(Base64Coder.decode(base64.substring("data:;base64,".length()))); - fileCons.accept(new FileHandle(){ - @Override - public InputStream read() { - return stream; - } - - @Override - public String nameWithoutExtension() { - return "unknown"; - } - - @Override - public String name() { - return "unknown"; - } - }); - } -} diff --git a/html/webapp/WEB-INF/web.xml b/html/webapp/WEB-INF/web.xml deleted file mode 100644 index 4301df2483..0000000000 --- a/html/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/html/webapp/html/logo.png b/html/webapp/html/logo.png deleted file mode 100644 index be1282d3c5..0000000000 Binary files a/html/webapp/html/logo.png and /dev/null differ diff --git a/html/webapp/index.html b/html/webapp/index.html deleted file mode 100644 index 9418769dab..0000000000 --- a/html/webapp/index.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - Mindustry - - - - - - - -
- - - - diff --git a/html/webapp/soundmanager2-jsmin.js b/html/webapp/soundmanager2-jsmin.js deleted file mode 100644 index ed5bf17df4..0000000000 --- a/html/webapp/soundmanager2-jsmin.js +++ /dev/null @@ -1,113 +0,0 @@ -/** @license - - - SoundManager 2: JavaScript Sound for the Web - ---------------------------------------------- - http://schillmania.com/projects/soundmanager2/ - - Copyright (c) 2007, Scott Schiller. All rights reserved. - Code provided under the BSD License: - http://schillmania.com/projects/soundmanager2/license.txt - - V2.97a.20150601 -*/ -(function(h,g){function K(sb,K){function ha(b){return c.preferFlash&&H&&!c.ignoreFlash&&c.flash[b]!==g&&c.flash[b]}function r(b){return function(d){var e=this._s;e&&e._a?d=b.call(this,d):(e&&e.id?c._wD(e.id+": Ignoring "+d.type):c._wD("HTML5::Ignoring "+d.type),d=null);return d}}this.setupOptions={url:sb||null,flashVersion:8,debugMode:!1,debugFlash:!1,useConsole:!0,consoleOnly:!0,waitForWindowLoad:!1,bgColor:"#ffffff",useHighPerformance:!1,flashPollingInterval:null,html5PollingInterval:null,flashLoadTimeout:1E3, -wmode:null,allowScriptAccess:"always",useFlashBlock:!1,useHTML5Audio:!0,forceUseGlobalHTML5Audio:!1,ignoreMobileRestrictions:!1,html5Test:/^(probably|maybe)$/i,preferFlash:!1,noSWFCache:!1,idPrefix:"sound"};this.defaultOptions={autoLoad:!1,autoPlay:!1,from:null,loops:1,onid3:null,onload:null,whileloading:null,onplay:null,onpause:null,onresume:null,whileplaying:null,onposition:null,onstop:null,onfailure:null,onfinish:null,multiShot:!0,multiShotEvents:!1,position:null,pan:0,stream:!0,to:null,type:null, -usePolicyFile:!1,volume:100};this.flash9Options={isMovieStar:null,usePeakData:!1,useWaveformData:!1,useEQData:!1,onbufferchange:null,ondataerror:null};this.movieStarOptions={bufferTime:3,serverURL:null,onconnect:null,duration:null};this.audioFormats={mp3:{type:['audio/mpeg; codecs="mp3"',"audio/mpeg","audio/mp3","audio/MPA","audio/mpa-robust"],required:!0},mp4:{related:["aac","m4a","m4b"],type:['audio/mp4; codecs="mp4a.40.2"',"audio/aac","audio/x-m4a","audio/MP4A-LATM","audio/mpeg4-generic"],required:!1}, -ogg:{type:["audio/ogg; codecs=vorbis"],required:!1},opus:{type:["audio/ogg; codecs=opus","audio/opus"],required:!1},wav:{type:['audio/wav; codecs="1"',"audio/wav","audio/wave","audio/x-wav"],required:!1}};this.movieID="sm2-container";this.id=K||"sm2movie";this.debugID="soundmanager-debug";this.debugURLParam=/([#?&])debug=1/i;this.versionNumber="V2.97a.20150601";this.altURL=this.movieURL=this.version=null;this.enabled=this.swfLoaded=!1;this.oMC=null;this.sounds={};this.soundIDs=[];this.didFlashBlock= -this.muted=!1;this.filePattern=null;this.filePatterns={flash8:/\.mp3(\?.*)?$/i,flash9:/\.mp3(\?.*)?$/i};this.features={buffering:!1,peakData:!1,waveformData:!1,eqData:!1,movieStar:!1};this.sandbox={type:null,types:{remote:"remote (domain-based) rules",localWithFile:"local with file access (no internet access)",localWithNetwork:"local with network (internet access only, no local access)",localTrusted:"local, trusted (local+internet access)"},description:null,noRemote:null,noLocal:null};this.html5= -{usingFlash:null};this.flash={};this.ignoreFlash=this.html5Only=!1;var W,c=this,Ya=null,l=null,F,v=navigator.userAgent,ia=h.location.href.toString(),m=document,ya,Za,za,n,I=[],Aa=!0,D,X=!1,Y=!1,q=!1,y=!1,ja=!1,p,tb=0,Z,A,Ba,R,Ca,P,S,T,$a,Da,Ea,ka,z,la,Q,Fa,aa,ma,na,U,ab,Ga,bb=["log","info","warn","error"],cb,Ha,db,ba=null,Ia=null,t,Ja,V,eb,oa,pa,L,w,ca=!1,Ka=!1,fb,gb,hb,qa=0,da=null,ra,M=[],ea,u=null,ib,sa,fa,N,ta,La,jb,x,kb=Array.prototype.slice,C=!1,Ma,H,Na,lb,J,mb,Oa,ua,nb=0,Pa,Qa=v.match(/(ipad|iphone|ipod)/i), -Ra=v.match(/android/i),O=v.match(/msie/i),ub=v.match(/webkit/i),va=v.match(/safari/i)&&!v.match(/chrome/i),Sa=v.match(/opera/i),wa=v.match(/(mobile|pre\/|xoom)/i)||Qa||Ra,Ta=!ia.match(/usehtml5audio/i)&&!ia.match(/sm2\-ignorebadua/i)&&va&&!v.match(/silk/i)&&v.match(/OS X 10_6_([3-7])/i),Ua=h.console!==g&&console.log!==g,Va=m.hasFocus!==g?m.hasFocus():null,xa=va&&(m.hasFocus===g||!m.hasFocus()),ob=!xa,pb=/(mp3|mp4|mpa|m4a|m4b)/i,ga=m.location?m.location.protocol.match(/http/i):null,vb=ga?"":"http://", -qb=/^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|m4b|mp4v|3gp|3g2)\s*(?:$|;)/i,rb="mpeg4 aac flv mov mp4 m4v f4v m4a m4b mp4v 3gp 3g2".split(" "),wb=new RegExp("\\.("+rb.join("|")+")(\\?.*)?$","i");this.mimePattern=/^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i;this.useAltURL=!ga;var Wa;try{Wa=Audio!==g&&(Sa&&opera!==g&&10>opera.version()?new Audio(null):new Audio).canPlayType!==g}catch(xb){Wa=!1}this.hasHTML5=Wa;this.setup=function(b){var d=!c.url;b!==g&&q&&u&&c.ok()&&(b.flashVersion!==g|| -b.url!==g||b.html5Test!==g)&&L(t("setupLate"));Ba(b);if(!C)if(wa){if(!c.setupOptions.ignoreMobileRestrictions||c.setupOptions.forceUseGlobalHTML5Audio)M.push(z.globalHTML5),C=!0}else c.setupOptions.forceUseGlobalHTML5Audio&&(M.push(z.globalHTML5),C=!0);if(!Pa&&wa)if(c.setupOptions.ignoreMobileRestrictions)M.push(z.ignoreMobile);else if(c.setupOptions.useHTML5Audio&&!c.setupOptions.preferFlash||c._wD(z.mobileUA),c.setupOptions.useHTML5Audio=!0,c.setupOptions.preferFlash=!1,Qa)c.ignoreFlash=!0;else if(Ra&& -!v.match(/android\s2\.3/i)||!Ra)c._wD(z.globalHTML5),C=!0;b&&(d&&aa&&b.url!==g&&c.beginDelayedInit(),aa||b.url===g||"complete"!==m.readyState||setTimeout(Q,1));Pa=!0;return c};this.supported=this.ok=function(){return u?q&&!y:c.useHTML5Audio&&c.hasHTML5};this.getMovie=function(c){return F(c)||m[c]||h[c]};this.createSound=function(b,d){function e(){f=oa(f);c.sounds[f.id]=new W(f);c.soundIDs.push(f.id);return c.sounds[f.id]}var a,f;a=null;a="soundManager.createSound(): "+t(q?"notOK":"notReady");if(!q|| -!c.ok())return L(a),!1;d!==g&&(b={id:b,url:d});f=A(b);f.url=ra(f.url);f.id===g&&(f.id=c.setupOptions.idPrefix+nb++);f.id.toString().charAt(0).match(/^[0-9]$/)&&c._wD("soundManager.createSound(): "+t("badID",f.id),2);c._wD("soundManager.createSound(): "+f.id+(f.url?" ("+f.url+")":""),1);if(w(f.id,!0))return c._wD("soundManager.createSound(): "+f.id+" exists",1),c.sounds[f.id];if(sa(f))a=e(),c.html5Only||c._wD(f.id+": Using HTML5"),a._setup_html5(f);else{if(c.html5Only)return c._wD(f.id+": No HTML5 support for this sound, and no Flash. Exiting."), -e();if(c.html5.usingFlash&&f.url&&f.url.match(/data\:/i))return c._wD(f.id+": data: URIs not supported via Flash. Exiting."),e();8a.instanceCount?(m(),e=a._setup_html5(),a.setPosition(a._iO.position),e.play()):(c._wD(a.id+": Cloning Audio() for instance #"+ -a.instanceCount+"..."),k=new Audio(a._iO.url),G=function(){x.remove(k,"ended",G);a._onfinish(a);ta(k);k=null},h=function(){x.remove(k,"canplay",h);try{k.currentTime=a._iO.position/1E3}catch(c){L(a.id+": multiShot play() failed to apply position of "+a._iO.position/1E3)}k.play()},x.add(k,"ended",G),a._iO.volume!==g&&(k.volume=Math.max(0,Math.min(1,a._iO.volume/100))),a.muted&&(k.muted=!0),a._iO.position?x.add(k,"canplay",h):k.play()):(B=l._start(a.id,a._iO.loops||1,9===n?a.position:a.position/1E3, -a._iO.multiShot||!1),9!==n||B||(c._wD(e+"No sound hardware, or 32-sound ceiling hit",2),a._iO.onplayerror&&a._iO.onplayerror.apply(a)))}return a};this.stop=function(b){var d=a._iO;1===a.playState&&(c._wD(a.id+": stop()"),a._onbufferchange(0),a._resetOnPosition(0),a.paused=!1,a.isHTML5||(a.playState=0),Xa(),d.to&&a.clearOnPosition(d.to),a.isHTML5?a._a&&(b=a.position,a.setPosition(0),a.position=b,a._a.pause(),a.playState=0,a._onTimer(),G()):(l._stop(a.id,b),d.serverURL&&a.unload()),a.instanceCount= -0,a._iO={},d.onstop&&d.onstop.apply(a));return a};this.setAutoPlay=function(b){c._wD(a.id+": Autoplay turned "+(b?"on":"off"));a._iO.autoPlay=b;a.isHTML5||(l._setAutoPlay(a.id,b),b&&!a.instanceCount&&1===a.readyState&&(a.instanceCount++,c._wD(a.id+": Incremented instance count to "+a.instanceCount)))};this.getAutoPlay=function(){return a._iO.autoPlay};this.setPosition=function(b){b===g&&(b=0);var d=a.isHTML5?Math.max(b,0):Math.min(a.duration||a._iO.duration,Math.max(b,0));a.position=d;b=a.position/ -1E3;a._resetOnPosition(a.position);a._iO.position=d;if(!a.isHTML5)b=9===n?a.position:b,a.readyState&&2!==a.readyState&&l._setPosition(a.id,b,a.paused||!a.playState,a._iO.multiShot);else if(a._a){if(a._html5_canplay){if(a._a.currentTime!==b){c._wD(a.id+": setPosition("+b+")");try{a._a.currentTime=b,(0===a.playState||a.paused)&&a._a.pause()}catch(e){c._wD(a.id+": setPosition("+b+") failed: "+e.message,2)}}}else if(b)return c._wD(a.id+": setPosition("+b+"): Cannot seek yet, sound not ready",2),a;a.paused&& -a._onTimer(!0)}return a};this.pause=function(b){if(a.paused||0===a.playState&&1!==a.readyState)return a;c._wD(a.id+": pause()");a.paused=!0;a.isHTML5?(a._setup_html5().pause(),G()):(b||b===g)&&l._pause(a.id,a._iO.multiShot);a._iO.onpause&&a._iO.onpause.apply(a);return a};this.resume=function(){var b=a._iO;if(!a.paused)return a;c._wD(a.id+": resume()");a.paused=!1;a.playState=1;a.isHTML5?(a._setup_html5().play(),m()):(b.isMovieStar&&!b.serverURL&&a.setPosition(a.position),l._pause(a.id,b.multiShot)); -!r&&b.onplay?(b.onplay.apply(a),r=!0):b.onresume&&b.onresume.apply(a);return a};this.togglePause=function(){c._wD(a.id+": togglePause()");if(0===a.playState)return a.play({position:9!==n||a.isHTML5?a.position/1E3:a.position}),a;a.paused?a.resume():a.pause();return a};this.setPan=function(c,b){c===g&&(c=0);b===g&&(b=!1);a.isHTML5||l._setPan(a.id,c);a._iO.pan=c;b||(a.pan=c,a.options.pan=c);return a};this.setVolume=function(b,d){b===g&&(b=100);d===g&&(d=!1);a.isHTML5?a._a&&(c.muted&&!a.muted&&(a.muted= -!0,a._a.muted=!0),a._a.volume=Math.max(0,Math.min(1,b/100))):l._setVolume(a.id,c.muted&&!a.muted||a.muted?0:b);a._iO.volume=b;d||(a.volume=b,a.options.volume=b);return a};this.mute=function(){a.muted=!0;a.isHTML5?a._a&&(a._a.muted=!0):l._setVolume(a.id,0);return a};this.unmute=function(){a.muted=!1;var b=a._iO.volume!==g;a.isHTML5?a._a&&(a._a.muted=!1):l._setVolume(a.id,b?a._iO.volume:a.options.volume);return a};this.toggleMute=function(){return a.muted?a.unmute():a.mute()};this.onposition=this.onPosition= -function(b,c,d){E.push({position:parseInt(b,10),method:c,scope:d!==g?d:a,fired:!1});return a};this.clearOnPosition=function(a,b){var c;a=parseInt(a,10);if(isNaN(a))return!1;for(c=0;c=b)return!1;for(--b;0<=b;b--)c=E[b],!c.fired&&a.position>=c.position&&(c.fired=!0,v++,c.method.apply(c.scope,[c.position]));return!0};this._resetOnPosition= -function(a){var b,c;b=E.length;if(!b)return!1;for(--b;0<=b;b--)c=E[b],c.fired&&a<=c.position&&(c.fired=!1,v--);return!0};y=function(){var b=a._iO,d=b.from,e=b.to,f,g;g=function(){c._wD(a.id+': "To" time of '+e+" reached.");a.clearOnPosition(e,g);a.stop()};f=function(){c._wD(a.id+': Playing "from" '+d);if(null!==e&&!isNaN(e))a.onPosition(e,g)};null===d||isNaN(d)||(b.position=d,b.multiShot=!1,f());return b};q=function(){var b,c=a._iO.onposition;if(c)for(b in c)if(c.hasOwnProperty(b))a.onPosition(parseInt(b, -10),c[b])};Xa=function(){var b,c=a._iO.onposition;if(c)for(b in c)c.hasOwnProperty(b)&&a.clearOnPosition(parseInt(b,10))};m=function(){a.isHTML5&&fb(a)};G=function(){a.isHTML5&&gb(a)};f=function(b){b||(E=[],v=0);r=!1;a._hasTimer=null;a._a=null;a._html5_canplay=!1;a.bytesLoaded=null;a.bytesTotal=null;a.duration=a._iO&&a._iO.duration?a._iO.duration:null;a.durationEstimate=null;a.buffered=[];a.eqData=[];a.eqData.left=[];a.eqData.right=[];a.failures=0;a.isBuffering=!1;a.instanceOptions={};a.instanceCount= -0;a.loaded=!1;a.metadata={};a.readyState=0;a.muted=!1;a.paused=!1;a.peakData={left:0,right:0};a.waveformData={left:[],right:[]};a.playState=0;a.position=null;a.id3={}};f();this._onTimer=function(b){var c,f=!1,g={};if(a._hasTimer||b)return a._a&&(b||(0opera.version()?new Audio(null):new Audio,c=a._a,c._called_load=!1,C&&(Ya=c);a.isHTML5=!0;a._a=c;c._s=a;h();a._apply_loop(c,b.loops);b.autoLoad||b.autoPlay?a.load():(c.autobuffer=!1,c.preload="auto");return c};h=function(){if(a._a._added_events)return!1;var b;a._a._added_events=!0;for(b in J)J.hasOwnProperty(b)&&a._a&&a._a.addEventListener(b,J[b],!1);return!0};k=function(){var b; -c._wD(a.id+": Removing event listeners");a._a._added_events=!1;for(b in J)J.hasOwnProperty(b)&&a._a&&a._a.removeEventListener(b,J[b],!1)};this._onload=function(b){var d=!!b||!a.isHTML5&&8===n&&a.duration;b=a.id+": ";c._wD(b+(d?"onload()":"Failed to load / invalid sound?"+(a.duration?" -":" Zero-length duration reported.")+" ("+a.url+")"),d?1:2);d||a.isHTML5||(!0===c.sandbox.noRemote&&c._wD(b+t("noNet"),1),!0===c.sandbox.noLocal&&c._wD(b+t("noLocal"),1));a.loaded=d;a.readyState=d?3:2;a._onbufferchange(0); -a._iO.onload&&ua(a,function(){a._iO.onload.apply(a,[d])});return!0};this._onbufferchange=function(b){if(0===a.playState||b&&a.isBuffering||!b&&!a.isBuffering)return!1;a.isBuffering=1===b;a._iO.onbufferchange&&(c._wD(a.id+": Buffer state change: "+b),a._iO.onbufferchange.apply(a,[b]));return!0};this._onsuspend=function(){a._iO.onsuspend&&(c._wD(a.id+": Playback suspended"),a._iO.onsuspend.apply(a));return!0};this._onfailure=function(b,d,e){a.failures++;c._wD(a.id+": Failure ("+a.failures+"): "+b); -if(a._iO.onfailure&&1===a.failures)a._iO.onfailure(b,d,e);else c._wD(a.id+": Ignoring failure")};this._onwarning=function(b,c,d){if(a._iO.onwarning)a._iO.onwarning(b,c,d)};this._onfinish=function(){var b=a._iO.onfinish;a._onbufferchange(0);a._resetOnPosition(0);a.instanceCount&&(a.instanceCount--,a.instanceCount||(Xa(),a.playState=0,a.paused=!1,a.instanceCount=0,a.instanceOptions={},a._iO={},G(),a.isHTML5&&(a.position=0)),a.instanceCount&&!a._iO.multiShotEvents||!b||(c._wD(a.id+": onfinish()"),ua(a, -function(){b.apply(a)})))};this._whileloading=function(b,c,d,e){var f=a._iO;a.bytesLoaded=b;a.bytesTotal=c;a.duration=Math.floor(d);a.bufferLength=e;a.durationEstimate=a.isHTML5||f.isMovieStar?a.duration:f.duration?a.duration>f.duration?a.duration:f.duration:parseInt(a.bytesTotal/a.bytesLoaded*a.duration,10);a.isHTML5||(a.buffered=[{start:0,end:a.duration}]);(3!==a.readyState||a.isHTML5)&&f.whileloading&&f.whileloading.apply(a)};this._whileplaying=function(b,c,d,e,f){var k=a._iO;if(isNaN(b)||null=== -b)return!1;a.position=Math.max(0,b);a._processOnPosition();!a.isHTML5&&8opera.version()?new Audio(null):new Audio:null,e,a,f={},h,k;h=c.audioFormats;for(e in h)if(h.hasOwnProperty(e)&&(a="audio/"+e,f[e]=b(h[e].type),f[a]=f[e],e.match(pb)?(c.flash[e]=!0,c.flash[a]=!0):(c.flash[e]=!1,c.flash[a]=!1),h[e]&&h[e].related))for(k=h[e].related.length-1;0<=k;k--)f["audio/"+h[e].related[k]]= -f[e],c.html5[h[e].related[k]]=f[e],c.flash[h[e].related[k]]=f[e];f.canPlayType=d?b:null;c.html5=A(c.html5,f);c.html5.usingFlash=ib();u=c.html5.usingFlash;return!0};z={notReady:"Unavailable - wait until onready() has fired.",notOK:"Audio support is not available.",domError:"soundManagerexception caught while appending SWF to DOM.",spcWmode:"Removing wmode, preventing known SWF loading issue(s)",swf404:"soundManager: Verify that %s is a valid path.",tryDebug:"Try soundManager.debugFlash = true for more security details (output goes to SWF.)", -checkSWF:"See SWF output for more debug info.",localFail:"soundManager: Non-HTTP page ("+m.location.protocol+" URL?) Review Flash player security settings for this special case:\nhttp://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html\nMay need to add/allow path, eg. c:/sm2/ or /users/me/sm2/",waitFocus:"soundManager: Special case: Waiting for SWF to load with window focus...",waitForever:"soundManager: Waiting indefinitely for Flash (will recover if unblocked)...", -waitSWF:"soundManager: Waiting for 100% SWF load...",needFunction:"soundManager: Function object expected for %s",badID:'Sound ID "%s" should be a string, starting with a non-numeric character',currentObj:"soundManager: _debug(): Current sound objects",waitOnload:"soundManager: Waiting for window.onload()",docLoaded:"soundManager: Document already loaded",onload:"soundManager: initComplete(): calling soundManager.onload()",onloadOK:"soundManager.onload() complete",didInit:"soundManager: init(): Already called?", -secNote:"Flash security note: Network/internet URLs will not load due to security restrictions. Access can be configured via Flash Player Global Security Settings Page: http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html",badRemove:"soundManager: Failed to remove Flash node.",shutdown:"soundManager.disable(): Shutting down",queue:"soundManager: Queueing %s handler",smError:"SMSound.load(): Exception: JS-Flash communication failed, or JS error.",fbTimeout:"No flash response, applying .swf_timedout CSS...", -fbLoaded:"Flash loaded",fbHandler:"soundManager: flashBlockHandler()",manURL:"SMSound.load(): Using manually-assigned URL",onURL:"soundManager.load(): current URL already assigned.",badFV:'soundManager.flashVersion must be 8 or 9. "%s" is invalid. Reverting to %s.',as2loop:"Note: Setting stream:false so looping can work (flash 8 limitation)",noNSLoop:"Note: Looping not implemented for MovieStar formats",needfl9:"Note: Switching to flash 9, required for MP4 formats.",mfTimeout:"Setting flashLoadTimeout = 0 (infinite) for off-screen, mobile flash case", -needFlash:"soundManager: Fatal error: Flash is needed to play some required formats, but is not available.",gotFocus:"soundManager: Got window focus.",policy:"Enabling usePolicyFile for data access",setup:"soundManager.setup(): allowed parameters: %s",setupError:'soundManager.setup(): "%s" cannot be assigned with this method.',setupUndef:'soundManager.setup(): Could not find option "%s"',setupLate:"soundManager.setup(): url, flashVersion and html5Test property changes will not take effect until reboot().", -noURL:"soundManager: Flash URL required. Call soundManager.setup({url:...}) to get started.",sm2Loaded:"SoundManager 2: Ready. "+String.fromCharCode(10003),reset:"soundManager.reset(): Removing event callbacks",mobileUA:"Mobile UA detected, preferring HTML5 by default.",globalHTML5:"Using singleton HTML5 Audio() pattern for this device.",ignoreMobile:"Ignoring mobile restrictions for this device."};t=function(){var b,c,e,a;b=kb.call(arguments);c=b.shift();if((a=z&&z[c]?z[c]:"")&&b&&b.length)for(c= -0,e=b.length;cn&&(c._wD(t("needfl9")),c.flashVersion=n=9);c.version=c.versionNumber+(c.html5Only?" (HTML5-only mode)":9===n?" (AS3/Flash 9)":" (AS2/Flash 8)");8'}if(X&&Y)return!1;if(c.html5Only)return Ea(),e(),c.oMC=F(c.movieID),za(),Y=X=!0,!1;var f=d||c.url,h=c.altURL||f,k=ma(),l=V(), -n=null,n=m.getElementsByTagName("html")[0],p,r,q,n=n&&n.dir&&n.dir.match(/rtl/i);b=b===g?c.id:b;Ea();c.url=db(ga?f:h);d=c.url;c.wmode=!c.wmode&&c.useHighPerformance?"transparent":c.wmode;null!==c.wmode&&(v.match(/msie 8/i)||!O&&!c.useHighPerformance)&&navigator.platform.match(/win32|win64/i)&&(M.push(z.spcWmode),c.wmode=null);k={name:b,id:b,src:d,quality:"high",allowScriptAccess:c.allowScriptAccess,bgcolor:c.bgColor,pluginspage:vb+"www.macromedia.com/go/getflashplayer",title:"JS/Flash audio component (SoundManager 2)", -type:"application/x-shockwave-flash",wmode:c.wmode,hasPriority:"true"};c.debugFlash&&(k.FlashVars="debug=1");c.wmode||delete k.wmode;if(O)f=m.createElement("div"),r=['',a("movie",d),a("AllowScriptAccess",c.allowScriptAccess),a("quality",k.quality),c.wmode?a("wmode",c.wmode):"",a("bgcolor", -c.bgColor),a("hasPriority","true"),c.debugFlash?a("FlashVars",k.FlashVars):"",""].join("");else for(p in f=m.createElement("embed"),k)k.hasOwnProperty(p)&&f.setAttribute(p,k[p]);Ga();l=V();if(k=ma())if(c.oMC=F(c.movieID)||m.createElement("div"),c.oMC.id)q=c.oMC.className,c.oMC.className=(q?q+" ":"movieContainer")+(l?" "+l:""),c.oMC.appendChild(f),O&&(p=c.oMC.appendChild(m.createElement("div")),p.className="sm2-object-box",p.innerHTML=r),Y=!0;else{c.oMC.id=c.movieID;c.oMC.className="movieContainer "+ -l;p=l=null;c.useFlashBlock||(c.useHighPerformance?l={position:"fixed",width:"8px",height:"8px",bottom:"0px",left:"0px",overflow:"hidden"}:(l={position:"absolute",width:"6px",height:"6px",top:"-9999px",left:"-9999px"},n&&(l.left=Math.abs(parseInt(l.left,10))+"px")));ub&&(c.oMC.style.zIndex=1E4);if(!c.debugFlash)for(q in l)l.hasOwnProperty(q)&&(c.oMC.style[q]=l[q]);try{O||c.oMC.appendChild(f),k.appendChild(c.oMC),O&&(p=c.oMC.appendChild(m.createElement("div")),p.className="sm2-object-box",p.innerHTML= -r),Y=!0}catch(u){throw Error(t("domError")+" \n"+u.toString());}}X=!0;e();return!0};la=function(){if(c.html5Only)return na(),!1;if(l)return!1;if(!c.url)return p("noURL"),!1;l=c.getMovie(c.id);l||(ba?(O?c.oMC.innerHTML=Ia:c.oMC.appendChild(ba),ba=null,X=!0):na(c.id,c.url),l=c.getMovie(c.id));"function"===typeof c.oninitmovie&&setTimeout(c.oninitmovie,1);Oa();return!0};T=function(){setTimeout($a,1E3)};Da=function(){h.setTimeout(function(){L("soundManager: useFlashBlock is false, 100% HTML5 mode is possible. Rebooting with preferFlash: false..."); -c.setup({preferFlash:!1}).reboot();c.didFlashBlock=!0;c.beginDelayedInit()},1)};$a=function(){var b,d=!1;if(!c.url||ca)return!1;ca=!0;x.remove(h,"load",T);if(H&&xa&&!Va)return p("waitFocus"),!1;q||(b=c.getMoviePercent(),0b&&(d=!0));setTimeout(function(){b=c.getMoviePercent();if(d)return ca=!1,c._wD(t("waitSWF")),h.setTimeout(T,1),!1;q||(c._wD("soundManager: No Flash response within expected time. Likely causes: "+(0===b?"SWF load failed, ":"")+"Flash blocked or JS-Flash security error."+(c.debugFlash? -" "+t("checkSWF"):""),2),!ga&&b&&(p("localFail",2),c.debugFlash||p("tryDebug",2)),0===b&&c._wD(t("swf404",c.url),1),D("flashtojs",!1,": Timed out"+(ga?" (Check flash security or flash blockers)":" (No plugin/missing SWF?)")));!q&&ob&&(null===b?c.useFlashBlock||0===c.flashLoadTimeout?(c.useFlashBlock&&Ja(),p("waitForever")):!c.useFlashBlock&&ea?Da():(p("waitForever"),P({type:"ontimeout",ignoreInit:!0,error:{type:"INIT_FLASHBLOCK"}})):0===c.flashLoadTimeout?p("waitForever"):!c.useFlashBlock&&ea?Da(): -Ha(!0))},c.flashLoadTimeout)};ka=function(){if(Va||!xa)return x.remove(h,"focus",ka),!0;Va=ob=!0;p("gotFocus");ca=!1;T();x.remove(h,"focus",ka);return!0};Oa=function(){M.length&&(c._wD("SoundManager 2: "+M.join(" "),1),M=[])};mb=function(){Oa();var b,d=[];if(c.useHTML5Audio&&c.hasHTML5){for(b in c.audioFormats)c.audioFormats.hasOwnProperty(b)&&d.push(b+" = "+c.html5[b]+(!c.html5[b]&&u&&c.flash[b]?" (using flash)":c.preferFlash&&c.flash[b]&&u?" (preferring flash)":c.html5[b]?"":" ("+(c.audioFormats[b].required? -"required, ":"")+"and no flash support)"));c._wD("SoundManager 2 HTML5 support: "+d.join(", "),1)}};Z=function(b){if(q)return!1;if(c.html5Only)return p("sm2Loaded",1),q=!0,S(),D("onload",!0),!0;var d=!0,e;c.useFlashBlock&&c.flashLoadTimeout&&!c.getMoviePercent()||(q=!0);e={type:!H&&u?"NO_FLASH":"INIT_TIMEOUT"};c._wD("SoundManager 2 "+(y?"failed to load":"loaded")+" ("+(y?"Flash security/load error":"OK")+") "+String.fromCharCode(y?10006:10003),y?2:1);y||b?(c.useFlashBlock&&c.oMC&&(c.oMC.className= -V()+" "+(null===c.getMoviePercent()?"swf_timedout":"swf_error")),P({type:"ontimeout",error:e,ignoreInit:!0}),D("onload",!1),U(e),d=!1):D("onload",!0);y||(c.waitForWindowLoad&&!ja?(p("waitOnload"),x.add(h,"load",S)):(c.waitForWindowLoad&&ja&&p("docLoaded"),S()));return d};Za=function(){var b,d=c.setupOptions;for(b in d)d.hasOwnProperty(b)&&(c[b]===g?c[b]=d[b]:c[b]!==d[b]&&(c.setupOptions[b]=c[b]))};za=function(){if(q)return p("didInit"),!1;if(c.html5Only)return q||(x.remove(h,"load",c.beginDelayedInit), -c.enabled=!0,Z()),!0;la();try{l._externalInterfaceTest(!1),ab(!0,c.flashPollingInterval||(c.useHighPerformance?10:50)),c.debugMode||l._disableDebug(),c.enabled=!0,D("jstoflash",!0),c.html5Only||x.add(h,"unload",ya)}catch(b){return c._wD("js/flash exception: "+b.toString()),D("jstoflash",!1),U({type:"JS_TO_FLASH_EXCEPTION",fatal:!0}),Ha(!0),Z(),!1}Z();x.remove(h,"load",c.beginDelayedInit);return!0};Q=function(){if(aa)return!1;aa=!0;Za();Ga();!H&&c.hasHTML5&&(c._wD("SoundManager 2: No Flash detected"+ -(c.useHTML5Audio?". Trying HTML5-only mode.":", enabling HTML5."),1),c.setup({useHTML5Audio:!0,preferFlash:!1}));jb();!H&&u&&(M.push(z.needFlash),c.setup({flashLoadTimeout:1}));m.removeEventListener&&m.removeEventListener("DOMContentLoaded",Q,!1);la();return!0};La=function(){"complete"===m.readyState&&(Q(),m.detachEvent("onreadystatechange",La));return!0};Fa=function(){ja=!0;Q();x.remove(h,"load",Fa)};Na();x.add(h,"focus",ka);x.add(h,"load",T);x.add(h,"load",Fa);m.addEventListener?m.addEventListener("DOMContentLoaded", -Q,!1):m.attachEvent?m.attachEvent("onreadystatechange",La):(D("onload",!1),U({type:"NO_DOM2_EVENTS",fatal:!0}))}if(!h||!h.document)throw Error("SoundManager requires a browser with window and document objects.");var W=null;h.SM2_DEFER!==g&&SM2_DEFER||(W=new K);"object"===typeof module&&module&&"object"===typeof module.exports?(module.exports.SoundManager=K,module.exports.soundManager=W):"function"===typeof define&&define.amd&&define(function(){return{constructor:K,getInstance:function(g){!h.soundManager&& -g instanceof Function&&(g=g(K),g instanceof K&&(h.soundManager=g));return h.soundManager}}});h.SoundManager=K;h.soundManager=W})(window); diff --git a/html/webapp/soundmanager2-setup.js b/html/webapp/soundmanager2-setup.js deleted file mode 100644 index 4d0ac6630d..0000000000 --- a/html/webapp/soundmanager2-setup.js +++ /dev/null @@ -1 +0,0 @@ -window.SM2_DEFER = true; \ No newline at end of file diff --git a/html/webapp/styles.css b/html/webapp/styles.css deleted file mode 100644 index a0aa688653..0000000000 --- a/html/webapp/styles.css +++ /dev/null @@ -1,23 +0,0 @@ -canvas { - cursor: default; - outline: none; - padding: 0px; - margin: 0px; -} - -body { - background-color: #191919; - margin: 0px; - padding: 0px; -} - -.gdx-meter.red > span { - background-color: #e44d3c !important; - background-image: -moz-linear-gradient(top, #f4ba6e, #d29d58) !important; - background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #f4ba6e),color-stop(1, #d29d58)) !important; - background-image: -webkit-linear-gradient(#f4ba6e, #d29d58) !important; -} - -.gdx-meter { - max-width: 100% !important; -} diff --git a/settings.gradle b/settings.gradle index 5621bab462..e788ba34a4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,4 @@ -include 'desktop', 'html', 'core', 'kryonet', 'server', 'ios', 'annotations', 'tools', 'tests' +include 'desktop', 'core', 'kryonet', 'server', 'ios', 'annotations', 'tools', 'tests' Properties properties = new Properties()