Added new unit type / Made reactor use cryo only / Balancing

This commit is contained in:
Anuken
2019-02-01 15:55:11 -05:00
parent f00d1f9505
commit 163ecb160a
23 changed files with 1325 additions and 1268 deletions

View File

@@ -857,6 +857,7 @@ public class Blocks implements ContentList{
size = 3;
health = 700;
powerProduction = 11f;
consumes.liquid(Liquids.cryofluid, maxLiquidUse);
}};
fusionReactor = new FusionReactor("fusion-reactor"){{

View File

@@ -46,7 +46,7 @@ public class Bullets implements ContentList{
waterShot, cryoShot, slagShot, oilShot,
//environment, misc.
fireball, basicFlame, fuseShot, driverBolt, healBullet, frag,
fireball, basicFlame, fuseShot, driverBolt, healBullet, frag, eruptorShot,
//bombs
bombExplosive, bombIncendiary, bombOil, explode;
@@ -559,6 +559,12 @@ public class Bullets implements ContentList{
drag = 0.03f;
}};
eruptorShot = new LiquidBulletType(Liquids.slag){{
damage = 2;
speed = 2.1f;
drag = 0.02f;
}};
oilShot = new LiquidBulletType(Liquids.oil){{
speed = 2f;
drag = 0.03f;

View File

@@ -16,7 +16,7 @@ public class Liquids implements ContentList{
effect = StatusEffects.wet;
}};
slag = new Liquid("slag", Color.valueOf("ffcd66")){{
slag = new Liquid("slag", Color.valueOf("ffa166")){{
temperature = 1f;
viscosity = 0.8f;
tier = 2;

View File

@@ -52,6 +52,7 @@ public class UnitTypes implements ContentList{
rotatespeed = 0.1f;
weapon = Weapons.flamethrower;
health = 440;
immunities.add(StatusEffects.burning);
}};
fortress = new UnitType("fortress", Fortress.class, Fortress::new){{
@@ -69,15 +70,16 @@ public class UnitTypes implements ContentList{
eruptor = new UnitType("eruptor", Eruptor.class, Eruptor::new){{
maxVelocity = 0.81f;
speed = 0.17f;
speed = 0.16f;
drag = 0.4f;
mass = 5f;
hitsize = 9f;
rotatespeed = 0.07f;
weaponOffsetX = 1;
rotatespeed = 0.05f;
weaponOffsetX = 3;
targetAir = false;
weapon = Weapons.eruption;
health = 600;
immunities = ObjectSet.with(StatusEffects.burning, StatusEffects.melting);
}};
wraith = new UnitType("wraith", Wraith.class, Wraith::new){{

View File

@@ -11,11 +11,13 @@ public class Weapons implements ContentList{
@Override
public void load(){
eruption = new Weapon("eruption"){{
length = 1.5f;
reload = 14f;
length = 3f;
reload = 10f;
roundrobin = true;
ejectEffect = Fx.none;
ammo = Bullets.slagShot;
ammo = Bullets.eruptorShot;
recoil = 1f;
width = 9f;
}};
blaster = new Weapon("blaster"){{

View File

@@ -316,8 +316,8 @@ public class Zones implements ContentList{
impact = new Zone("impact0079", new MapGenerator("impact0079", 2)
.decor(
new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01),
new Decoration(Blocks.metalFloor, Blocks.metalFloorDamaged, 0.02))
){{
new Decoration(Blocks.metalFloor, Blocks.metalFloorDamaged, 0.02)
).drops(ItemStack.with(Items.copper, 2000, Items.lead, 1500, Items.silicon, 1000, Items.graphite, 1000, Items.pyratite, 2000, Items.titanium, 2000, Items.metaglass, 1000))){{
deployCost = ItemStack.with(Items.copper, 2500, Items.lead, 1000, Items.silicon, 300);
startingItems = ItemStack.with(Items.copper, 2000, Items.lead, 500, Items.silicon, 200);
itemRequirements = ItemStack.with(Items.silicon, 8000, Items.titanium, 6000, Items.graphite, 4000);

View File

@@ -27,7 +27,7 @@ public class StatusController implements Saveable{
private float armorMultiplier;
public void handleApply(Unit unit, StatusEffect effect, float duration){
if(effect == StatusEffects.none) return; //don't apply empty effects
if(effect == StatusEffects.none || unit.isImmune(effect)) return; //don't apply empty or immune effects
if(statuses.size > 0){
//check for opposite effects

View File

@@ -184,6 +184,10 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
damage(1);
}
public boolean isImmune(StatusEffect effect){
return false;
}
public boolean isOutOfBounds(){
return x < -worldBounds || y < -worldBounds || x > world.width() * tilesize + worldBounds || y > world.height() * tilesize + worldBounds;
}

View File

@@ -66,7 +66,7 @@ public abstract class BulletType extends Content{
/**Returns maximum distance the bullet this bullet type has can travel.*/
public float range(){
return speed * lifetime;
return speed * lifetime * (1f - drag);
}
public boolean collides(Bullet bullet, Tile tile){

View File

@@ -33,6 +33,11 @@ public class LiquidBulletType extends BulletType{
knockback = 0.5f;
}
@Override
public float range(){
return speed * lifetime /2f;
}
@Override
public void update(Bullet b) {
super.update(b);

View File

@@ -152,7 +152,7 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait, Poolable{
entity.damage(0.4f);
}
Damage.damageUnits(null, tile.worldx(), tile.worldy(), tilesize, 3f,
unit -> !unit.isFlying(),
unit -> !unit.isFlying() && !unit.isImmune(StatusEffects.burning),
unit -> unit.applyEffect(StatusEffects.burning, 60 * 5));
}
}

View File

@@ -212,7 +212,7 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai
}
});
if(liquid.temperature > 0.7f && tile.entity != null && Mathf.chance(0.3 * Time.delta())){
if(liquid.temperature > 0.7f && (tile.target().entity != null) && Mathf.chance(0.3 * Time.delta())){
Fire.create(tile);
}

View File

@@ -29,6 +29,7 @@ import io.anuke.mindustry.graphics.Palette;
import io.anuke.mindustry.net.Net;
import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.ItemStack;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.type.Weapon;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockFlag;
@@ -205,6 +206,11 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
}
}
@Override
public boolean isImmune(StatusEffect effect){
return type.immunities.contains(effect);
}
@Override
public boolean isValid(){
return super.isValid() && isAdded();

View File

@@ -3,7 +3,6 @@ package io.anuke.mindustry.entities.units;
import io.anuke.arc.Core;
import io.anuke.arc.collection.ObjectSet;
import io.anuke.arc.function.Supplier;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.scene.ui.layout.Table;
import io.anuke.arc.util.Log;
@@ -15,6 +14,7 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.game.UnlockableContent;
import io.anuke.mindustry.type.ContentType;
import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.StatusEffect;
import io.anuke.mindustry.type.Weapon;
import io.anuke.mindustry.ui.ContentDisplay;
@@ -42,7 +42,7 @@ public class UnitType extends UnlockableContent{
public float buildPower = 0.3f, minePower = 0.7f;
public Weapon weapon = Weapons.blaster;
public float weaponOffsetX, weaponOffsetY;
public Color trailColor = Color.valueOf("ffa665");
public ObjectSet<StatusEffect> immunities = new ObjectSet<>();
public TextureRegion iconRegion, legRegion, baseRegion, region;

View File

@@ -46,6 +46,11 @@ public class MapGenerator extends Generator{
this.enemySpawns = enemySpawns;
}
public MapGenerator drops(ItemStack[] drops){
this.storageDrops = drops;
return this;
}
public MapGenerator decor(Decoration... decor){
this.decorations.addAll(decor);
return this;

View File

@@ -6,17 +6,16 @@ import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.util.Time;
import io.anuke.arc.math.geom.Vector2;
import io.anuke.mindustry.content.Items;
import io.anuke.arc.util.Time;
import io.anuke.mindustry.content.Fx;
import io.anuke.mindustry.content.Items;
import io.anuke.mindustry.entities.Damage;
import io.anuke.mindustry.entities.TileEntity;
import io.anuke.mindustry.type.Liquid;
import io.anuke.mindustry.world.Tile;
import io.anuke.mindustry.world.meta.BlockStat;
import io.anuke.mindustry.world.meta.StatUnit;
import io.anuke.mindustry.world.meta.values.LiquidFilterValue;
import java.io.DataInput;
import java.io.DataOutput;
@@ -63,11 +62,9 @@ public class NuclearReactor extends PowerGenerator{
@Override
public void setStats(){
super.setStats();
stats.add(BlockStat.inputLiquid, new LiquidFilterValue(liquid -> liquid.temperature <= 0.5f));
stats.remove(BlockStat.basePowerGeneration);
// Display the power which will be produced at 50% efficiency
stats.add(BlockStat.basePowerGeneration, powerProduction * 60f * 0.5f, StatUnit.powerSecond);
stats.add(BlockStat.basePowerGeneration, powerProduction * 60f, StatUnit.powerSecond);
}
@Override
@@ -76,7 +73,7 @@ public class NuclearReactor extends PowerGenerator{
int fuel = entity.items.get(consumes.item());
float fullness = (float) fuel / itemCapacity;
entity.productionEfficiency = fullness / 2.0f; // Currently, efficiency of 0.5 = 100%
entity.productionEfficiency = fullness;
if(fuel > 0){
entity.heat += fullness * heating * Math.min(entity.delta(), 4f);
@@ -153,12 +150,6 @@ public class NuclearReactor extends PowerGenerator{
}
}
@Override
public boolean acceptLiquid(Tile tile, Tile source, Liquid liquid, float amount){
return tile.entity.liquids.get(liquid) + amount < liquidCapacity && liquid.temperature <= 0.5f &&
(tile.entity.liquids.current() == liquid || tile.entity.liquids.get(tile.entity.liquids.current()) < 0.01f);
}
@Override
public void draw(Tile tile){
super.draw(tile);