From b4852247d0628c28407c79e3a44f769610d151d9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 11 Dec 2017 23:48:37 -0500 Subject: [PATCH] More enemy balancing --- android/AndroidManifest.xml | 8 ++- android/build.gradle | 24 +++++-- android/res/layout/donations_activity.xml | 15 +++++ android/res/values/strings.xml | 8 +++ .../io/anuke/mindustry/AndroidLauncher.java | 12 +++- .../io/anuke/mindustry/DonationsActivity.java | 62 +++++++++++++++++++ build.gradle | 2 +- core/src/io/anuke/mindustry/Mindustry.java | 15 ++--- .../src/io/anuke/mindustry/core/Renderer.java | 3 +- .../anuke/mindustry/entities/BulletType.java | 2 +- .../anuke/mindustry/entities/WaveCreator.java | 8 +-- .../anuke/mindustry/entities/effect/EMP.java | 2 +- .../mindustry/entities/enemies/Enemy.java | 8 +++ .../blocks/types/defense/ShieldBlock.java | 4 +- 14 files changed, 145 insertions(+), 28 deletions(-) create mode 100644 android/res/layout/donations_activity.xml create mode 100644 android/src/io/anuke/mindustry/DonationsActivity.java diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 36ae017d35..91f3eb8269 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -1,10 +1,11 @@ + android:versionCode="24" + android:versionName="3.08b" > + + + + diff --git a/android/build.gradle b/android/build.gradle index 413b869046..a2073df378 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,3 +1,17 @@ + +repositories { + mavenCentral() + jcenter() + maven { + url "https://maven.google.com" + } +} + +dependencies { + compile 'com.android.support:support-v4:22.1.1' + compile 'org.sufficientlysecure:donations:2.5' +} + android { buildToolsVersion "25.0.0" compileSdkVersion 25 @@ -31,6 +45,12 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + productFlavors { + google { + buildConfigField "boolean", "DONATIONS_GOOGLE", "true" + } + } } // called every time gradle gets executed, takes the native dependencies of // the natives configuration, and extracts them to the proper libs/ folders @@ -130,8 +150,4 @@ idea { } } } -} - -dependencies { - //compile files('lib/ucore.jar') } \ No newline at end of file diff --git a/android/res/layout/donations_activity.xml b/android/res/layout/donations_activity.xml new file mode 100644 index 0000000000..1c71e7253e --- /dev/null +++ b/android/res/layout/donations_activity.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index d40cf3accd..482ac993cf 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -2,5 +2,13 @@ Mindustry + + 1 Dollar + 2 Dollars + 3 Dollars + 5 Dollars + 10 Dollars + 15 Dollars + diff --git a/android/src/io/anuke/mindustry/AndroidLauncher.java b/android/src/io/anuke/mindustry/AndroidLauncher.java index 6d87d0aef3..718805af04 100644 --- a/android/src/io/anuke/mindustry/AndroidLauncher.java +++ b/android/src/io/anuke/mindustry/AndroidLauncher.java @@ -8,6 +8,7 @@ import com.badlogic.gdx.backends.android.AndroidApplication; import com.badlogic.gdx.backends.android.AndroidApplicationConfiguration; import android.annotation.SuppressLint; +import android.content.Intent; import android.os.Bundle; import android.util.DisplayMetrics; import io.anuke.mindustry.io.Formatter; @@ -37,6 +38,8 @@ public class AndroidLauncher extends AndroidApplication{ return NumberFormat.getIntegerInstance().format(number); } }; + + Mindustry.donationsCallable = this::showDonations; if(doubleScaleTablets){ DisplayMetrics metrics = new DisplayMetrics(); @@ -55,7 +58,14 @@ public class AndroidLauncher extends AndroidApplication{ } //Mindustry.args.add("-debug"); - + + config.hideStatusBar = true; + initialize(new Mindustry(), config); } + + void showDonations(){ + Intent intent = new Intent(this, DonationsActivity.class); + startActivity(intent); + } } diff --git a/android/src/io/anuke/mindustry/DonationsActivity.java b/android/src/io/anuke/mindustry/DonationsActivity.java new file mode 100644 index 0000000000..07d1b6c1b1 --- /dev/null +++ b/android/src/io/anuke/mindustry/DonationsActivity.java @@ -0,0 +1,62 @@ +package io.anuke.mindustry; + +import android.content.Intent; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentActivity; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentTransaction; + +import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.backends.android.AndroidGraphics; + +import org.sufficientlysecure.donations.DonationsFragment; + +public class DonationsActivity extends FragmentActivity { + + /** + * Google + */ + private static final String GOOGLE_PUBKEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAg8bTVFK5zIg4FGYkHKKQ/j/iGZQlXU0qkAv2BA6epOX1ihbMz78iD4SmViJlECHN8bKMHxouRNd9pkmQKxwEBHg5/xDC/PHmSCXFx/gcY/xa4etA1CSfXjcsS9i94n+j0gGYUg69rNkp+p/09nO9sgfRTAQppTxtgKaXwpfKe1A8oqmDUfOnPzsEAG6ogQL6Svo6ynYLVKIvRPPhXkq+fp6sJ5YVT5Hr356yCXlM++G56Pk8Z+tPzNjjvGSSs/MsYtgFaqhPCsnKhb55xHkc8GJ9haq8k3PSqwMSeJHnGiDq5lzdmsjdmGkWdQq2jIhKlhMZMm5VQWn0T59+xjjIIwIDAQAB"; + private static final String[] GOOGLE_CATALOG = new String[]{"ntpsync.donation.1", + "ntpsync.donation.2", "ntpsync.donation.3", "ntpsync.donation.5", "ntpsync.donation.8", + "ntpsync.donation.13"}; + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + //TODO + setContentView(((AndroidGraphics)Gdx.graphics).getView()); + + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); + DonationsFragment donationsFragment; + if (BuildConfig.DONATIONS_GOOGLE) { + donationsFragment = DonationsFragment.newInstance(BuildConfig.DEBUG, true, GOOGLE_PUBKEY, GOOGLE_CATALOG, + getResources().getStringArray(R.array.donation_google_catalog_values), false, null, null, + null, false, null, null, false, null); + } + + ft.replace(R.id.donations_activity_container, donationsFragment, "donationsFragment"); + ft.commit(); + } + + /** + * Needed for Google Play In-app Billing. It uses startIntentSenderForResult(). The result is not propagated to + * the Fragment like in startActivityForResult(). Thus we need to propagate manually to our Fragment. + */ + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + FragmentManager fragmentManager = getSupportFragmentManager(); + Fragment fragment = fragmentManager.findFragmentByTag("donationsFragment"); + if (fragment != null) { + fragment.onActivityResult(requestCode, resultCode, data); + } + } + +} diff --git a/build.gradle b/build.gradle index 61901cb5b0..82190c74b5 100644 --- a/build.gradle +++ b/build.gradle @@ -79,7 +79,7 @@ project(":core") { apply plugin: "java" dependencies { - compile 'com.github.Anuken:ucore:6238d06' + compile 'com.github.Anuken:ucore:a1ae9be' compile "com.badlogicgames.gdx:gdx:$gdxVersion" compile "com.badlogicgames.gdx:gdx-ai:1.8.1" } diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index def6b2be5d..8b3f362030 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -13,23 +13,16 @@ import io.anuke.mindustry.world.World; import io.anuke.mindustry.world.blocks.*; import io.anuke.ucore.core.Inputs; import io.anuke.ucore.core.Timers; +import io.anuke.ucore.function.Callable; import io.anuke.ucore.modules.ModuleCore; import io.anuke.ucore.util.Profiler; public class Mindustry extends ModuleCore { + public static Callable donationsCallable; public static Array args = new Array<>(); public static Formatter formatter = new Formatter(){ - - @Override - public String format(Date date){ - return "invalid date"; - } - - @Override - public String format(int number){ - return number + ""; - } - + @Override public String format(Date date){ return "invalid date"; } + @Override public String format(int number){ return number + ""; } }; //always initialize blocks in this order, otherwise there are ID errors diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index 70fafe0276..333a0ce0cd 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -180,11 +180,12 @@ public class Renderer extends RendererModule{ Graphics.shader(); Entities.draw(Entities.defaultGroup()); - Entities.draw(control.bulletGroup); Profiler.end("entityDraw"); if(!optimize) drawBlocks(true, false); + + Entities.draw(control.bulletGroup); drawShield(); diff --git a/core/src/io/anuke/mindustry/entities/BulletType.java b/core/src/io/anuke/mindustry/entities/BulletType.java index 9e6f2f46eb..caa9df31c6 100644 --- a/core/src/io/anuke/mindustry/entities/BulletType.java +++ b/core/src/io/anuke/mindustry/entities/BulletType.java @@ -62,7 +62,7 @@ public abstract class BulletType extends BaseBulletType{ } } }, - emp = new BulletType(1.6f, 8){ + emp = new BulletType(1.6f, 6){ { lifetime = 50f; hitsize = 6f; diff --git a/core/src/io/anuke/mindustry/entities/WaveCreator.java b/core/src/io/anuke/mindustry/entities/WaveCreator.java index 22d4b72780..b4c32d801b 100644 --- a/core/src/io/anuke/mindustry/entities/WaveCreator.java +++ b/core/src/io/anuke/mindustry/entities/WaveCreator.java @@ -149,8 +149,8 @@ public class WaveCreator{ }}, new EnemySpawn(FortressEnemy.class){{ after = 12; - spacing = 4; - scaling = 6; + spacing = 5; + scaling = 7; }}, new EnemySpawn(HealerEnemy.class){{ scaling = 3; @@ -163,8 +163,8 @@ public class WaveCreator{ }}, new EnemySpawn(FlamerEnemy.class){{ after = 14; - spacing = 5; - scaling = 2; + spacing = 6; + scaling = 3; }}, new EnemySpawn(BlastEnemy.class){{ after = 12; diff --git a/core/src/io/anuke/mindustry/entities/effect/EMP.java b/core/src/io/anuke/mindustry/entities/effect/EMP.java index 61eba1aabd..edbb9cda48 100644 --- a/core/src/io/anuke/mindustry/entities/effect/EMP.java +++ b/core/src/io/anuke/mindustry/entities/effect/EMP.java @@ -53,7 +53,7 @@ public class EMP extends TimedEntity{ if(tile != null && tile.block() instanceof PowerAcceptor){ PowerAcceptor p = (PowerAcceptor)tile.block(); p.setPower(tile, 0f); - tile.entity.damage((int)(damage*1.6f)); //extra damage + tile.entity.damage((int)(damage*1.5f)); //extra damage } //entity may be null here, after the block is dead! diff --git a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java index 820f874e09..079484fa88 100644 --- a/core/src/io/anuke/mindustry/entities/enemies/Enemy.java +++ b/core/src/io/anuke/mindustry/entities/enemies/Enemy.java @@ -17,6 +17,7 @@ public class Enemy extends DestructibleEntity{ public final static Color[] tierColors = { Color.valueOf("ffe451"), Color.valueOf("f48e20"), Color.valueOf("ff6757"), Color.valueOf("ff2d86") }; public final static int maxtier = 4; public final static float maxIdle = 60*1.5f; + public final static float maxIdleLife = 60f*15f; //15 seconds idle = death protected int timeid; protected Timer timer = new Timer(5); @@ -64,6 +65,13 @@ public class Enemy extends DestructibleEntity{ void move(){ Tile core = Vars.control.getCore(); + if(idletime > maxIdleLife){ + Effects.effect(Fx.shellsmoke, this); + Effects.effect(Fx.explosion, this); + remove(); + return; + } + boolean nearCore = distanceTo(core.worldx(), core.worldy()) <= range - 18f && stopNearCore; Vector2 vec; diff --git a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java index 8a34f68161..4b0bba12ab 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/defense/ShieldBlock.java @@ -19,12 +19,12 @@ public class ShieldBlock extends PowerBlock{ public float powerDrain = 0.005f; public float powerPerDamage = 0.2f; public float maxRadius = 40f; - public float radiusScale = 80f; + public float radiusScale = 160f; public ShieldBlock(String name) { super(name); voltage = powerDrain; - powerCapacity = 30f; + powerCapacity = 40f; health = 100; }