More unit progress

This commit is contained in:
Anuken
2020-07-10 20:04:45 -04:00
parent d7e432f730
commit 9cb4645b11
30 changed files with 106 additions and 221 deletions

View File

@@ -0,0 +1 @@
{fields:[{name:ammo,type:int,size:4},{name:armor,type:float,size:4},{name:controller,type:mindustry.entities.units.UnitController,size:-1},{name:elevation,type:float,size:4},{name:health,type:float,size:4},{name:isShooting,type:boolean,size:1},{name:mineTile,type:mindustry.world.Tile,size:-1},{name:mounts,type:"mindustry.entities.units.WeaponMount[]",size:-1},{name:rotation,type:float,size:4},{name:shield,type:float,size:4},{name:spawnedByCore,type:boolean,size:1},{name:stack,type:mindustry.type.ItemStack,size:-1},{name:statuses,type:arc.struct.Seq<mindustry.entities.units.StatusEntry>,size:-1},{name:team,type:mindustry.game.Team,size:-1},{name:type,type:mindustry.type.UnitType,size:-1},{name:x,type:float,size:4},{name:y,type:float,size:4}]}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 950 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 639 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 697 B

View File

@@ -1054,16 +1054,6 @@ team.derelict.name = derelict
team.green.name = green team.green.name = green
team.purple.name = purple team.purple.name = purple
#TODO - don't translate yet
#unit.crawler.name = Crawler
#unit.dagger.name = Dagger
#unit.fortress.name = Fortress
#unit.wraith.name = Wraith Fighter
#unit.ghoul.name = Ghoul Bomber
#unit.revenant.name = Revenant
#unit.lich.name = Lich
#unit.reaper.name = Reaper
tutorial.next = [lightgray]<Tap to continue> tutorial.next = [lightgray]<Tap to continue>
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper

View File

@@ -1535,7 +1535,7 @@ public class Blocks implements ContentList{
@Override @Override
public void init(Bullet b){ public void init(Bullet b){
for(int i = 0; i < rays; i++){ for(int i = 0; i < rays; i++){
Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), rayLength - Math.abs(i - (rays / 2)) * 20f); Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), rayLength - Math.abs(i - (rays / 2)) * 20f);
} }
} }
@@ -1689,7 +1689,7 @@ public class Blocks implements ContentList{
plans = new UnitPlan[]{ plans = new UnitPlan[]{
new UnitPlan(UnitTypes.dagger, 200f, with(Items.silicon, 10, Items.lead, 10)), new UnitPlan(UnitTypes.dagger, 200f, with(Items.silicon, 10, Items.lead, 10)),
new UnitPlan(UnitTypes.crawler, 200f, with(Items.silicon, 10, Items.blastCompound, 5)), new UnitPlan(UnitTypes.crawler, 200f, with(Items.silicon, 10, Items.blastCompound, 5)),
new UnitPlan(UnitTypes.nova, 200f, with(Items.silicon, 20, Items.lead, 10)), new UnitPlan(UnitTypes.nova, 200f, with(Items.silicon, 20, Items.lead, 20, Items.titanium, 20)),
}; };
size = 3; size = 3;
consumes.power(1.2f); consumes.power(1.2f);
@@ -1699,7 +1699,7 @@ public class Blocks implements ContentList{
requirements(Category.units, with(Items.copper, 30, Items.lead, 70)); requirements(Category.units, with(Items.copper, 30, Items.lead, 70));
plans = new UnitPlan[]{ plans = new UnitPlan[]{
new UnitPlan(UnitTypes.flare, 200f, with(Items.silicon, 10)), new UnitPlan(UnitTypes.flare, 200f, with(Items.silicon, 10)),
new UnitPlan(UnitTypes.mono, 200f, with(Items.silicon, 10)), new UnitPlan(UnitTypes.mono, 200f, with(Items.silicon, 15, Items.lead, 15)),
//new UnitPlan(UnitTypes.phantom, 200f, with(Items.silicon, 10)), //new UnitPlan(UnitTypes.phantom, 200f, with(Items.silicon, 10)),
}; };
size = 3; size = 3;

View File

@@ -289,24 +289,6 @@ public class Bullets implements ContentList{
lightningLength = 14; lightningLength = 14;
}}; }};
missileJavelin = new MissileBulletType(5f, 10.5f, "missile"){{
width = 8f;
height = 8f;
shrinkY = 0f;
drag = -0.003f;
keepVelocity = false;
splashDamageRadius = 20f;
splashDamage = 1f;
lifetime = 90f;
trailColor = Color.valueOf("b6c6fd");
hitEffect = Fx.blastExplosion;
despawnEffect = Fx.blastExplosion;
backColor = Pal.bulletYellowBack;
frontColor = Pal.bulletYellow;
weaveScale = 8f;
weaveMag = 2f;
}};
missileSwarm = new MissileBulletType(2.7f, 12, "missile"){{ missileSwarm = new MissileBulletType(2.7f, 12, "missile"){{
width = 8f; width = 8f;
height = 8f; height = 8f;

View File

@@ -29,8 +29,8 @@ public class UnitTypes implements ContentList{
//air (no special traits) //air (no special traits)
public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra; public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra;
//air + building //air + mining
public static @EntityDef({Unitc.class, Builderc.class}) UnitType mono; public static @EntityDef({Unitc.class, Minerc.class}) UnitType mono;
//air + building + mining //air + building + mining
public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType poly; public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType poly;
@@ -363,7 +363,7 @@ public class UnitTypes implements ContentList{
}}; }};
zenith = new UnitType("zenith"){{ zenith = new UnitType("zenith"){{
health = 220; health = 450;
speed = 1.9f; speed = 1.9f;
accel = 0.04f; accel = 0.04f;
drag = 0.016f; drag = 0.016f;
@@ -376,12 +376,15 @@ public class UnitTypes implements ContentList{
engineSize = 3f; engineSize = 3f;
weapons.add(new Weapon("zenith-missiles"){{ weapons.add(new Weapon("zenith-missiles"){{
reload = 70f; reload = 32f;
x = 7f; x = 7f;
rotate = true; rotate = true;
shake = 1f; shake = 1f;
shots = 2;
inaccuracy = 5f;
velocityRnd = 0.2f;
bullet = new MissileBulletType(2.7f, 12, "missile"){{ bullet = new MissileBulletType(3f, 12){{
width = 8f; width = 8f;
height = 8f; height = 8f;
shrinkY = 0f; shrinkY = 0f;
@@ -451,20 +454,28 @@ public class UnitTypes implements ContentList{
mono = new UnitType("mono"){{ mono = new UnitType("mono"){{
flying = true; flying = true;
drag = 0.05f; drag = 0.05f;
accel = 0.2f; accel = 0.15f;
speed = 2f; speed = 2f;
range = 50f;
health = 100; health = 100;
engineSize = 1.8f; engineSize = 1.8f;
engineOffset = 5.7f; engineOffset = 5.7f;
mineTier = 1;
mineSpeed = 2.5f;
weapons.add(new Weapon(){{ weapons.add(new Weapon(){{
y = 1.5f; y = 1.5f;
x = 0f;
reload = 40f; reload = 40f;
x = 0.5f;
ejectEffect = Fx.none; ejectEffect = Fx.none;
recoil = 2f; recoil = 2f;
bullet = Bullets.healBulletBig;
shootSound = Sounds.pew; shootSound = Sounds.pew;
mirror = false;
bullet = new HealBulletType(5.2f, 10){{
healPercent = 4f;
}};
}}); }});
}}; }};
@@ -473,29 +484,63 @@ public class UnitTypes implements ContentList{
flying = true; flying = true;
drag = 0.05f; drag = 0.05f;
speed = 3f; speed = 2f;
rotateSpeed = 15f; rotateSpeed = 15f;
accel = 0.3f; accel = 0.1f;
range = 70f; range = 70f;
itemCapacity = 70; itemCapacity = 70;
health = 400; health = 400;
buildSpeed = 0.5f; buildSpeed = 0.5f;
engineOffset = 6.5f; engineOffset = 6.5f;
hitsize = 8f; hitsize = 8f;
lowAltitude = true;
mineTier = 2;
mineSpeed = 3.5f;
abilities.add(new HealFieldAbility(5f, 60f * 5, 50f));
weapons.add(new Weapon("heal-weapon-mount"){{
y = -2.5f;
x = 3.5f;
reload = 34f;
ejectEffect = Fx.none;
recoil = 2f;
shootSound = Sounds.pew;
shots = 1;
velocityRnd = 0.5f;
inaccuracy = 15f;
alternate = true;
bullet = new MissileBulletType(4f, 10){{
homingPower = 0.08f;
weaveMag = 4;
weaveScale = 4;
lifetime = 50f;
keepVelocity = false;
shootEffect = Fx.shootHeal;
smokeEffect = Fx.hitLaser;
frontColor = Color.white;
backColor = Pal.heal;
trailColor = Pal.heal;
}};
}});
}}; }};
mega = new UnitType("mega"){{ mega = new UnitType("mega"){{
health = 500; health = 500;
speed = 2f; speed = 1.8f;
accel = 0.05f; accel = 0.06f;
drag = 0.016f; drag = 0.017f;
lowAltitude = true; lowAltitude = true;
flying = true; flying = true;
engineOffset = 10.5f; engineOffset = 10.5f;
rotateShooting = false; rotateShooting = false;
hitsize = 15f; hitsize = 15f;
engineSize = 3f; engineSize = 3f;
payloadCapacity = 3;
weapons.add( weapons.add(
new Weapon("heal-weapon-mount"){{ new Weapon("heal-weapon-mount"){{

View File

@@ -2,12 +2,10 @@ package mindustry.entities.bullet;
import arc.graphics.g2d.*; import arc.graphics.g2d.*;
import mindustry.content.*; import mindustry.content.*;
import mindustry.entities.*;
import mindustry.gen.*; import mindustry.gen.*;
//TODO scale velocity depending on fslope() //TODO scale velocity depending on fslope()
public class ArtilleryBulletType extends BasicBulletType{ public class ArtilleryBulletType extends BasicBulletType{
protected Effect trailEffect = Fx.artilleryTrail;
public ArtilleryBulletType(float speed, float damage, String bulletSprite){ public ArtilleryBulletType(float speed, float damage, String bulletSprite){
super(speed, damage, bulletSprite); super(speed, damage, bulletSprite);
@@ -17,6 +15,7 @@ public class ArtilleryBulletType extends BasicBulletType{
scaleVelocity = true; scaleVelocity = true;
hitShake = 1f; hitShake = 1f;
hitSound = Sounds.explosion; hitSound = Sounds.explosion;
trailEffect = Fx.artilleryTrail;
} }
public ArtilleryBulletType(){ public ArtilleryBulletType(){

View File

@@ -75,6 +75,11 @@ public abstract class BulletType extends Content{
public BulletType fragBullet = null; public BulletType fragBullet = null;
public Color hitColor = Color.white; public Color hitColor = Color.white;
public Color trailColor = Pal.missileYellowBack;
public float trailChance = -0.0001f;
public Effect trailEffect = Fx.missileTrail;
public float trailParam = 2f;
/** Use a negative value to disable splash damage. */ /** Use a negative value to disable splash damage. */
public float splashDamageRadius = -1f; public float splashDamageRadius = -1f;
@@ -118,7 +123,7 @@ public abstract class BulletType extends Content{
} }
public void hit(Bullet b){ public void hit(Bullet b){
hit(b, b.getX(), b.getY()); hit(b, b.x, b.y);
} }
public void hit(Bullet b, float x, float y){ public void hit(Bullet b, float x, float y){
@@ -140,20 +145,20 @@ public abstract class BulletType extends Content{
} }
if(splashDamageRadius > 0){ if(splashDamageRadius > 0){
Damage.damage(b.team(), x, y, splashDamageRadius, splashDamage * b.damageMultiplier(), collidesAir, collidesGround); Damage.damage(b.team, x, y, splashDamageRadius, splashDamage * b.damageMultiplier(), collidesAir, collidesGround);
if(status != StatusEffects.none){ if(status != StatusEffects.none){
Damage.status(b.team(), x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround); Damage.status(b.team, x, y, splashDamageRadius, status, statusDuration, collidesAir, collidesGround);
} }
} }
for(int i = 0; i < lightning; i++){ for(int i = 0; i < lightning; i++){
Lightning.create(b.team(), Pal.surge, lightningDamage < 0 ? damage : lightningDamage, b.getX(), b.getY(), Mathf.random(360f), lightningLength); Lightning.create(b.team, Pal.surge, lightningDamage < 0 ? damage : lightningDamage, b.x, b.y, Mathf.random(360f), lightningLength);
} }
} }
public void despawned(Bullet b){ public void despawned(Bullet b){
despawnEffect.at(b.getX(), b.getY(), b.rotation()); despawnEffect.at(b.x, b.y, b.rotation());
hitSound.at(b); hitSound.at(b);
if(fragBullet != null || splashDamageRadius > 0 || lightning > 0){ if(fragBullet != null || splashDamageRadius > 0 || lightning > 0){
@@ -165,7 +170,7 @@ public abstract class BulletType extends Content{
} }
public void drawLight(Bullet b){ public void drawLight(Bullet b){
Drawf.light(b.team(), b, lightRadius, lightColor, lightOpacity); Drawf.light(b.team, b, lightRadius, lightColor, lightOpacity);
} }
public void init(Bullet b){ public void init(Bullet b){
@@ -180,14 +185,20 @@ public abstract class BulletType extends Content{
public void update(Bullet b){ public void update(Bullet b){
if(homingPower > 0.0001f){ if(homingPower > 0.0001f){
Teamc target = Units.closestTarget(b.team(), b.getX(), b.getY(), homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); Teamc target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround);
if(target != null){ if(target != null){
b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower)); b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower));
} }
} }
if(weaveMag > 0){ if(weaveMag > 0){
b.vel.rotate(Mathf.sin(Time.time() + b.id() * 3, weaveScale, weaveMag) * Time.delta()); b.vel.rotate(Mathf.sin(Mathf.randomSeed(b.id, 10f) + b.time, weaveScale, weaveMag) * Time.delta());
}
if(trailChance > 0){
if(Mathf.chanceDelta(trailChance)){
trailEffect.at(b.x, b.y, trailParam, trailColor);
}
} }
} }
@@ -213,11 +224,11 @@ public abstract class BulletType extends Content{
} }
public Bullet create(Bullet parent, float x, float y, float angle){ public Bullet create(Bullet parent, float x, float y, float angle){
return create(parent.owner(), parent.team(), x, y, angle); return create(parent.owner(), parent.team, x, y, angle);
} }
public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl){ public Bullet create(Bullet parent, float x, float y, float angle, float velocityScl){
return create(parent.owner(), parent.team(), x, y, angle, velocityScl); return create(parent.owner(), parent.team, x, y, angle, velocityScl);
} }
public Bullet create(@Nullable Entityc owner, Team team, float x, float y, float angle, float damage, float velocityScl, float lifetimeScl, Object data){ public Bullet create(@Nullable Entityc owner, Team team, float x, float y, float angle, float damage, float velocityScl, float lifetimeScl, Object data){

View File

@@ -48,7 +48,7 @@ public class ContinuousLaserBulletType extends BulletType{
//damage every 5 ticks //damage every 5 ticks
if(b.timer(1, 5f)){ if(b.timer(1, 5f)){
Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), length, true); Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), length, true);
} }
if(shake > 0){ if(shake > 0){
@@ -72,7 +72,7 @@ public class ContinuousLaserBulletType extends BulletType{
Tmp.v1.trns(b.rotation(), baseLen * 1.1f); Tmp.v1.trns(b.rotation(), baseLen * 1.1f);
Drawf.light(b.team(), b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 40, Color.orange, 0.7f); Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, 40, Color.orange, 0.7f);
Draw.reset(); Draw.reset();
} }

View File

@@ -28,7 +28,7 @@ public class FlakBulletType extends BasicBulletType{
if(b.data() instanceof Integer) return; if(b.data() instanceof Integer) return;
if(b.timer(2, 6)){ if(b.timer(2, 6)){
Units.nearbyEnemies(b.team(), Tmp.r1.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> { Units.nearbyEnemies(b.team, Tmp.r1.setSize(explodeRange * 2f).setCenter(b.x, b.y), unit -> {
if(b.data() instanceof Float || !unit.checkTarget(collidesAir, collidesGround)) return; if(b.data() instanceof Float || !unit.checkTarget(collidesAir, collidesGround)) return;
if(unit.dst(b) < explodeRange){ if(unit.dst(b) < explodeRange){

View File

@@ -29,7 +29,7 @@ public class HealBulletType extends BulletType{
@Override @Override
public boolean collides(Bullet b, Building tile){ public boolean collides(Bullet b, Building tile){
return tile.team() != b.team() || tile.healthf() < 1f; return tile.team() != b.team || tile.healthf() < 1f;
} }
@Override @Override
@@ -46,7 +46,7 @@ public class HealBulletType extends BulletType{
public void hitTile(Bullet b, Building tile){ public void hitTile(Bullet b, Building tile){
super.hit(b); super.hit(b);
if(tile.team() == b.team() && !(tile.block() instanceof BuildBlock)){ if(tile.team() == b.team && !(tile.block() instanceof BuildBlock)){
Fx.healBlockFull.at(tile.x, tile.y, tile.block().size, Pal.heal); Fx.healBlockFull.at(tile.x, tile.y, tile.block().size, Pal.heal);
tile.heal(healPercent / 100f * tile.maxHealth()); tile.heal(healPercent / 100f * tile.maxHealth());
} }

View File

@@ -54,11 +54,11 @@ public class LaserBulletType extends BulletType{
furthest = null; furthest = null;
world.raycast(b.tileX(), b.tileY(), world.toTile(b.x + Tmp.v1.x), world.toTile(b.y + Tmp.v1.y), world.raycast(b.tileX(), b.tileY(), world.toTile(b.x + Tmp.v1.x), world.toTile(b.y + Tmp.v1.y),
(x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team() && furthest.block().absorbLasers); (x, y) -> (furthest = world.tile(x, y)) != null && furthest.team() != b.team && furthest.block().absorbLasers);
float resultLength = furthest != null ? Math.max(6f, b.dst(furthest.worldx(), furthest.worldy())) : length; float resultLength = furthest != null ? Math.max(6f, b.dst(furthest.worldx(), furthest.worldy())) : length;
Damage.collideLine(b, b.team(), hitEffect, b.x, b.y, b.rotation(), resultLength); Damage.collideLine(b, b.team, hitEffect, b.x, b.y, b.rotation(), resultLength);
if(furthest != null) b.data(resultLength); if(furthest != null) b.data(resultLength);
laserEffect.at(b.x, b.y, b.rotation(), resultLength * 0.75f); laserEffect.at(b.x, b.y, b.rotation(), resultLength * 0.75f);
@@ -93,7 +93,7 @@ public class LaserBulletType extends BulletType{
Draw.reset(); Draw.reset();
Tmp.v1.trns(b.rotation(), baseLen * 1.1f); Tmp.v1.trns(b.rotation(), baseLen * 1.1f);
Drawf.light(b.team(), b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, width * 1.4f * b.fout(), colors[0], 0.6f); Drawf.light(b.team, b.x, b.y, b.x + Tmp.v1.x, b.y + Tmp.v1.y, width * 1.4f * b.fout(), colors[0], 0.6f);
} }
@Override @Override

View File

@@ -32,6 +32,6 @@ public class LightningBulletType extends BulletType{
@Override @Override
public void init(Bullet b){ public void init(Bullet b){
Lightning.create(b.team(), lightningColor, damage, b.x, b.y, b.rotation(), lightningLength + Mathf.random(lightningLengthRand)); Lightning.create(b.team, lightningColor, damage, b.x, b.y, b.rotation(), lightningLength + Mathf.random(lightningLengthRand));
} }
} }

View File

@@ -1,32 +1,27 @@
package mindustry.entities.bullet; package mindustry.entities.bullet;
import arc.graphics.*;
import arc.math.*;
import mindustry.content.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
public class MissileBulletType extends BasicBulletType{ public class MissileBulletType extends BasicBulletType{
protected Color trailColor = Pal.missileYellowBack;
public MissileBulletType(float speed, float damage, String bulletSprite){ public MissileBulletType(float speed, float damage, String bulletSprite){
super(speed, damage, bulletSprite); super(speed, damage, bulletSprite);
backColor = Pal.missileYellowBack; backColor = Pal.missileYellowBack;
frontColor = Pal.missileYellow; frontColor = Pal.missileYellow;
homingPower = 0.08f; homingPower = 0.08f;
shrinkY = 0f;
width = 8f;
height = 8f;
hitSound = Sounds.explosion; hitSound = Sounds.explosion;
trailChance = 0.2f;
}
public MissileBulletType(float speed, float damage){
this(speed, damage, "missile");
} }
public MissileBulletType(){ public MissileBulletType(){
this(1f, 1f, "missile"); this(1f, 1f, "missile");
} }
@Override
public void update(Bullet b){
super.update(b);
if(Mathf.chanceDelta(0.2)){
Fx.missileTrail.at(b.x, b.y, 2f, trailColor);
}
}
} }

View File

@@ -603,7 +603,7 @@ public class DesktopInput extends InputHandler{
Payloadc pay = (Payloadc)unit; Payloadc pay = (Payloadc)unit;
if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){ if(Core.input.keyTap(Binding.pickupCargo) && pay.payloads().size < unit.type().payloadCapacity){
Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitsize * 1.1f, u -> u.isAI() && u.isGrounded()); Unit target = Units.closest(player.team(), pay.x(), pay.y(), unit.type().hitsize * 1.1f, u -> u.isAI() && u.isGrounded() && u.mass() < unit.mass());
if(target != null){ if(target != null){
Call.pickupUnitPayload(player, target); Call.pickupUnitPayload(player, target);
}else if(!pay.hasPayload()){ }else if(!pay.hasPayload()){

View File

@@ -112,6 +112,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
Payloadc pay = (Payloadc)unit; Payloadc pay = (Payloadc)unit;
if(target.isAI() && target.isGrounded() && pay.payloads().size < unit.type().payloadCapacity if(target.isAI() && target.isGrounded() && pay.payloads().size < unit.type().payloadCapacity
&& target.mass() < unit.mass()
&& target.within(unit, unit.type().hitsize * 1.5f)){ && target.within(unit, unit.type().hitsize * 1.5f)){
pay.pickup(target); pay.pickup(target);
} }

View File

@@ -1,139 +0,0 @@
package mindustry.io.legacy;
/*
Latest data: [build 81]
0 = Player
1 = Fire
2 = Puddle
3 = MinerDrone
4 = RepairDrone
5 = BuilderDrone
6 = GroundUnit
7 = GroundUnit
8 = GroundUnit
9 = GroundUnit
10 = GroundUnit
11 = FlyingUnit
12 = FlyingUnit
13 = Revenant
Before removal of lightining/bullet: [build 80]
0 = Player
1 = Fire
2 = Puddle
3 = Bullet
4 = Lightning
5 = MinerDrone
6 = RepairDrone
7 = BuilderDrone
8 = GroundUnit
9 = GroundUnit
10 = GroundUnit
11 = GroundUnit
12 = GroundUnit
13 = FlyingUnit
14 = FlyingUnit
15 = Revenant
Before addition of new units: [build 79 and below]
0 = Player
1 = Fire
2 = Puddle
3 = Bullet
4 = Lightning
5 = RepairDrone
6 = GroundUnit
7 = GroundUnit
8 = GroundUnit
9 = GroundUnit
10 = GroundUnit
11 = FlyingUnit
12 = FlyingUnit
13 = BuilderDrone
14 = Revenant
*/
public class LegacyTypeTable{
/*
0 = Player
1 = Fire
2 = Puddle
3 = Draug
4 = Spirit
5 = Phantom
6 = Dagger
7 = Crawler
8 = Titan
9 = Fortress
10 = Eruptor
11 = Wraith
12 = Ghoul
13 = Revenant
private static final Prov[] build81Table = {
Player::new,
Fire::new,
Puddle::new,
MinerDrone::new,
RepairDrone::new,
BuilderDrone::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
FlyingUnit::new,
FlyingUnit::new,
HoverUnit::new
};
private static final Prov[] build80Table = {
Player::new,
Fire::new,
Puddle::new,
Bullet::new,
Lightning::new,
MinerDrone::new,
RepairDrone::new,
BuilderDrone::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
FlyingUnit::new,
FlyingUnit::new,
HoverUnit::new
};
private static final Prov[] build79Table = {
Player::new,
Fire::new,
Puddle::new,
Bullet::new,
Lightning::new,
RepairDrone::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
GroundUnit::new,
FlyingUnit::new,
FlyingUnit::new,
BuilderDrone::new,
HoverUnit::new
};
public static Prov[] getTable(int build){
if(build == -1 || build == 81){
//return most recent one since that's probably it; not guaranteed
return build81Table;
}else if(build == 80){
return build80Table;
}else{
return build79Table;
}
}*/
}

View File

@@ -69,11 +69,11 @@ public class PointDefenseTurret extends Block{
//retarget //retarget
if(timer(timerTarget, retargetTime)){ if(timer(timerTarget, retargetTime)){
target = Groups.bullet.intersect(x - range, y - range, range*2, range*2).min(b -> b.team() == team || !b.type().hittable ? Float.MAX_VALUE : b.dst2(this)); target = Groups.bullet.intersect(x - range, y - range, range*2, range*2).min(b -> b.team == team || !b.type().hittable ? Float.MAX_VALUE : b.dst2(this));
} }
//look at target //look at target
if(target != null && target.within(this, range) && target.team() != team && target.type().hittable){ if(target != null && target.within(this, range) && target.team != team && target.type().hittable){
float dest = angleTo(target); float dest = angleTo(target);
rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta()); rotation = Angles.moveToward(rotation, dest, rotateSpeed * edelta());
reload -= edelta(); reload -= edelta();