Crash fixes / New ammo types / New turrets / Missiles added

This commit is contained in:
Anuken
2018-07-01 14:36:16 -04:00
parent 7177e0a576
commit 02b8e34242
48 changed files with 1182 additions and 931 deletions
@@ -6,6 +6,7 @@ import com.badlogic.gdx.math.Vector2;
import io.anuke.mindustry.content.bullets.TurretBullets;
import io.anuke.mindustry.content.fx.ExplosionFx;
import io.anuke.mindustry.content.fx.Fx;
import io.anuke.mindustry.entities.effect.Fire;
import io.anuke.mindustry.entities.effect.Lightning;
import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.gen.CallEntity;
@@ -64,6 +65,17 @@ public class Damage {
Effects.effect(ExplosionFx.blockExplosion, x, y);
}
public static void createIncend(float x, float y, float range, int amount){
for (int i = 0; i < amount; i++) {
float cx = x + Mathf.range(range);
float cy = y + Mathf.range(range);
Tile tile = world.tileWorld(cx, cy);
if(tile != null){
Fire.create(tile);
}
}
}
/**Damages entities in a line.
* Only enemies of the specified team are damaged.*/
public static void collideLine(SolidEntity hitter, Team team, Effect effect, float x, float y, float angle, float length){
@@ -1,11 +1,11 @@
package io.anuke.mindustry.entities;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Pools;
import io.anuke.mindustry.content.StatusEffects;
import io.anuke.mindustry.entities.traits.Saveable;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.util.Pooling;
import java.io.DataInput;
import java.io.DataOutput;
@@ -50,7 +50,7 @@ public class StatusController implements Saveable{
}
//otherwise, no opposites found, add direct effect
StatusEntry entry = Pools.obtain(StatusEntry.class);
StatusEntry entry = Pooling.obtain(StatusEntry.class);
entry.set(effect, newTime);
statuses.add(entry);
}
@@ -70,7 +70,7 @@ public class StatusController implements Saveable{
entry.time = Math.max(entry.time - Timers.delta(), 0);
if(entry.time <= 0){
Pools.free(entry);
Pooling.free(entry);
removals.add(entry);
}else{
speedMultiplier *= entry.effect.speedMultiplier;
@@ -116,7 +116,7 @@ public class StatusController implements Saveable{
@Override
public void readSave(DataInput stream) throws IOException {
for (StatusEntry effect : statuses){
Pools.free(effect);
Pooling.free(effect);
}
statuses.clear();
@@ -125,7 +125,7 @@ public class StatusController implements Saveable{
for (int i = 0; i < amount; i++) {
byte id = stream.readByte();
float time = stream.readShort() / 2f;
StatusEntry entry = Pools.obtain(StatusEntry.class);
StatusEntry entry = Pooling.obtain(StatusEntry.class);
entry.set(StatusEffect.getByID(id), time);
statuses.add(entry);
}
@@ -2,21 +2,26 @@ package io.anuke.mindustry.entities.bullet;
import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Effects.Effect;
import io.anuke.ucore.graphics.Draw;
//TODO scale velocity depending on fslope()
public class ArtilleryBulletType extends BasicBulletType {
protected Effect trailEffect = BulletFx.artilleryTrail;
public ArtilleryBulletType(float speed, float damage, String bulletSprite) {
super(speed, damage, bulletSprite);
collidesTiles = false;
collides = false;
hitShake = 1f;
}
@Override
public void update(Bullet b) {
super.update(b);
if(b.timer.get(0, 3 + b.fslope()*2f)){
Effects.effect(BulletFx.artilleryTrail, b.x, b.y, b.fslope() * 4f);
Effects.effect(trailEffect, backColor, b.x, b.y, b.fslope() * 4f);
}
}
@@ -3,7 +3,11 @@ package io.anuke.mindustry.entities.bullet;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.Unit;
import io.anuke.mindustry.entities.Units;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.ucore.core.Effects;
import io.anuke.ucore.core.Timers;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf;
@@ -23,9 +27,18 @@ public class BasicBulletType extends BulletType {
public float splashDamageRadius = -1f;
public float splashDamage = 6f;
public int incendAmount = 0;
public float incendSpread = 8f;
public float incendChance = 1f;
public float homingPower = 0f;
public float homingRange = 40f;
public TextureRegion backRegion;
public TextureRegion frontRegion;
public float hitShake = 0f;
public BasicBulletType(float speed, float damage, String bulletSprite) {
super(speed, damage);
this.bulletSprite = bulletSprite;
@@ -48,10 +61,24 @@ public class BasicBulletType extends BulletType {
Draw.color();
}
@Override
public void update(Bullet b) {
super.update(b);
if(homingPower > 0.0001f){
Unit target = Units.getClosestEnemy(b.getTeam(), b.x, b.y, homingRange, unit -> true);
if(target != null){
b.getVelocity().setAngle(Angles.moveToward(b.getVelocity().angle(), b.angleTo(target), homingPower * Timers.delta()));
}
}
}
@Override
public void hit(Bullet b, float x, float y) {
super.hit(b, x, y);
Effects.shake(hitShake, hitShake, b);
if(fragBullet != null) {
for (int i = 0; i < fragBullets; i++) {
float len = Mathf.random(1f, 7f);
@@ -60,8 +87,12 @@ public class BasicBulletType extends BulletType {
}
}
if(Mathf.chance(incendChance)) {
Damage.createIncend(x, y, incendSpread, incendAmount);
}
if(splashDamageRadius > 0){
Damage.damage(x, y, splashDamageRadius, splashDamage);
Damage.damage(b.getTeam(), x, y, splashDamageRadius, splashDamage);
}
}
@@ -1,7 +1,6 @@
package io.anuke.mindustry.entities.bullet;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Pools;
import com.badlogic.gdx.utils.TimeUtils;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
@@ -17,6 +16,7 @@ import io.anuke.ucore.entities.impl.BulletEntity;
import io.anuke.ucore.entities.trait.Entity;
import io.anuke.ucore.entities.trait.SolidTrait;
import io.anuke.ucore.entities.trait.VelocityTrait;
import io.anuke.ucore.util.Pooling;
import io.anuke.ucore.util.Timer;
import java.io.DataInput;
@@ -48,7 +48,7 @@ public class Bullet extends BulletEntity<BulletType> implements TeamTrait, SyncT
}
public static void create (BulletType type, Entity owner, Team team, float x, float y, float angle, float velocityScl, Object data){
Bullet bullet = Pools.obtain(Bullet.class);
Bullet bullet = Pooling.obtain(Bullet.class);
bullet.type = type;
bullet.owner = owner;
bullet.data = data;
@@ -214,7 +214,7 @@ public class Bullet extends BulletEntity<BulletType> implements TeamTrait, SyncT
@Override
public void removed() {
Pools.free(this);
Pooling.free(this);
}
@Override
@@ -0,0 +1,24 @@
package io.anuke.mindustry.entities.bullet;
import io.anuke.mindustry.content.fx.BulletFx;
import io.anuke.mindustry.graphics.Palette;
import io.anuke.ucore.core.Effects;
public class MissileBulletType extends BasicBulletType {
public MissileBulletType(float speed, float damage, String bulletSprite) {
super(speed, damage, bulletSprite);
backColor = Palette.missileYellowBack;
frontColor = Palette.missileYellow;
homingPower = 6f;
}
@Override
public void update(Bullet b) {
super.update(b);
if(b.timer.get(0, 4f)){
Effects.effect(BulletFx.missileTrail, b.x, b.y, 2f);
}
}
}
@@ -3,7 +3,6 @@ package io.anuke.mindustry.entities.effect;
import com.badlogic.gdx.math.GridPoint2;
import com.badlogic.gdx.utils.IntMap;
import com.badlogic.gdx.utils.Pool.Poolable;
import com.badlogic.gdx.utils.Pools;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.content.StatusEffects;
@@ -24,6 +23,7 @@ import io.anuke.ucore.entities.EntityGroup;
import io.anuke.ucore.entities.impl.TimedEntity;
import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Pooling;
import java.io.DataInput;
import java.io.DataOutput;
@@ -48,7 +48,7 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait, Poolable
Fire fire = map.get(tile.packedPosition());
if(fire == null){
fire = Pools.obtain(Fire.class);
fire = Pooling.obtain(Fire.class);
fire.tile = tile;
fire.lifetime = baseLifetime;
fire.set(tile.worldx(), tile.worldy());
@@ -3,7 +3,6 @@ package io.anuke.mindustry.entities.effect;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Pool.Poolable;
import com.badlogic.gdx.utils.Pools;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.content.fx.UnitFx;
@@ -29,6 +28,7 @@ import io.anuke.ucore.entities.trait.TimeTrait;
import io.anuke.ucore.entities.trait.VelocityTrait;
import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Pooling;
import java.io.DataInput;
import java.io.DataOutput;
@@ -48,7 +48,7 @@ public class ItemDrop extends SolidEntity implements SaveTrait, SyncTrait, DrawT
private float sinktime;
public static ItemDrop create(Item item, int amount, float x, float y, float angle){
ItemDrop drop = Pools.obtain(ItemDrop.class);
ItemDrop drop = Pooling.obtain(ItemDrop.class);
drop.item = item;
drop.amount = amount;
drop.velocity.set(4f, 0f).rotate(angle);
@@ -190,7 +190,7 @@ public class ItemDrop extends SolidEntity implements SaveTrait, SyncTrait, DrawT
@Override
public void removed() {
Pools.free(this);
Pooling.free(this);
}
@Override
@@ -2,7 +2,6 @@ package io.anuke.mindustry.entities.effect;
import com.badlogic.gdx.math.Interpolation;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Pools;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.entities.Unit;
@@ -19,6 +18,7 @@ import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Fill;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Pooling;
import static io.anuke.mindustry.Vars.effectGroup;
import static io.anuke.mindustry.Vars.threads;
@@ -61,7 +61,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
}
public static void create(Item item, float fromx, float fromy, PosTrait to, Runnable done){
ItemTransfer tr = Pools.obtain(ItemTransfer.class);
ItemTransfer tr = Pooling.obtain(ItemTransfer.class);
tr.item = item;
tr.from.set(fromx, fromy);
tr.to = to;
@@ -93,7 +93,7 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
if(done != null){
threads.run(done);
}
Pools.free(this);
Pooling.free(this);
}
@Override
@@ -5,7 +5,6 @@ import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Pool.Poolable;
import com.badlogic.gdx.utils.Pools;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.content.StatusEffects;
@@ -24,6 +23,7 @@ import io.anuke.ucore.graphics.Draw;
import io.anuke.ucore.graphics.Lines;
import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Pooling;
import io.anuke.ucore.util.SeedRandom;
import static io.anuke.mindustry.Vars.bulletGroup;
@@ -48,7 +48,7 @@ public class Lightning extends TimedEntity implements Poolable, DrawTrait{
@Remote(called = Loc.server, in = In.entities)
public static void createLighting(int seed, Team team, Effect effect, Color color, float damage, float x, float y, float targetAngle, int length){
Lightning l = Pools.obtain(Lightning.class);
Lightning l = Pooling.obtain(Lightning.class);
l.x = x;
l.y = y;
@@ -126,7 +126,7 @@ public class Lightning extends TimedEntity implements Poolable, DrawTrait{
@Override
public void removed() {
Pools.free(this);
Pooling.free(this);
}
@Override
@@ -5,7 +5,6 @@ import com.badlogic.gdx.math.GridPoint2;
import com.badlogic.gdx.math.Rectangle;
import com.badlogic.gdx.utils.IntMap;
import com.badlogic.gdx.utils.Pool.Poolable;
import com.badlogic.gdx.utils.Pools;
import io.anuke.annotations.Annotations.Loc;
import io.anuke.annotations.Annotations.Remote;
import io.anuke.mindustry.content.Liquids;
@@ -32,6 +31,7 @@ import io.anuke.ucore.graphics.Hue;
import io.anuke.ucore.util.Angles;
import io.anuke.ucore.util.Geometry;
import io.anuke.ucore.util.Mathf;
import io.anuke.ucore.util.Pooling;
import java.io.DataInput;
import java.io.DataOutput;
@@ -89,7 +89,7 @@ public class Puddle extends BaseEntity implements SaveTrait, Poolable, DrawTrait
if(p == null){
if(Net.client()) return; //not clientside.
Puddle puddle = Pools.obtain(Puddle.class);
Puddle puddle = Pooling.obtain(Puddle.class);
puddle.tile = tile;
puddle.liquid = liquid;
puddle.amount = amount;