mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-19 12:17:40 +07:00
Misc improvements / Latum death unit spawning
This commit is contained in:
@ -39,6 +39,7 @@ poly=18
|
|||||||
pulsar=19
|
pulsar=19
|
||||||
quad=23
|
quad=23
|
||||||
quasar=32
|
quasar=32
|
||||||
|
renale=47
|
||||||
risso=20
|
risso=20
|
||||||
spiroct=21
|
spiroct=21
|
||||||
stell=43
|
stell=43
|
||||||
|
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment0.png
Normal file
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment0.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 326 B |
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment1.png
Normal file
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 750 B |
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment2.png
Normal file
BIN
core/assets-raw/sprites/units/neoplasm/renale-segment2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 505 B |
@ -567,3 +567,4 @@
|
|||||||
63117=afflict|block-afflict-ui
|
63117=afflict|block-afflict-ui
|
||||||
63116=shielded-wall|block-shielded-wall-ui
|
63116=shielded-wall|block-shielded-wall-ui
|
||||||
63115=fracture|block-fracture-ui
|
63115=fracture|block-fracture-ui
|
||||||
|
63114=renale|unit-renale-ui
|
||||||
|
@ -11,6 +11,7 @@ public class RepairAI extends AIController{
|
|||||||
|
|
||||||
@Nullable Teamc avoid;
|
@Nullable Teamc avoid;
|
||||||
float retreatTimer;
|
float retreatTimer;
|
||||||
|
Building damagedTarget;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateMovement(){
|
public void updateMovement(){
|
||||||
@ -57,14 +58,15 @@ public class RepairAI extends AIController{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateTargeting(){
|
public void updateTargeting(){
|
||||||
Building target = Units.findDamagedTile(unit.team, unit.x, unit.y);
|
if(timer.get(timerTarget, 15)){
|
||||||
|
damagedTarget = Units.findDamagedTile(unit.team, unit.x, unit.y);
|
||||||
|
if(damagedTarget instanceof ConstructBuild) damagedTarget = null;
|
||||||
|
}
|
||||||
|
|
||||||
if(target instanceof ConstructBuild) target = null;
|
if(damagedTarget == null){
|
||||||
|
|
||||||
if(target == null){
|
|
||||||
super.updateTargeting();
|
super.updateTargeting();
|
||||||
}else{
|
}else{
|
||||||
this.target = target;
|
this.target = damagedTarget;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4190,7 +4190,7 @@ public class Blocks{
|
|||||||
recoil = 3f;
|
recoil = 3f;
|
||||||
range = 340;
|
range = 340;
|
||||||
shootCone = 20f;
|
shootCone = 20f;
|
||||||
scaledHealth = 180;
|
scaledHealth = 220;
|
||||||
rotateSpeed = 1.5f;
|
rotateSpeed = 1.5f;
|
||||||
researchCostMultiplier = 0.05f;
|
researchCostMultiplier = 0.05f;
|
||||||
|
|
||||||
@ -4198,7 +4198,7 @@ public class Blocks{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
fracture = new ItemTurret("fracture"){{
|
fracture = new ItemTurret("fracture"){{
|
||||||
//requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 200, Items.graphite, 200, Items.carbide, 50));
|
requirements(Category.turret, with(Items.beryllium, 150, Items.silicon, 200, Items.graphite, 200, Items.carbide, 50));
|
||||||
|
|
||||||
ammo(
|
ammo(
|
||||||
Items.tungsten, new BasicBulletType(8f, 41){{
|
Items.tungsten, new BasicBulletType(8f, 41){{
|
||||||
@ -4215,19 +4215,28 @@ public class Blocks{
|
|||||||
trailLength = 3;
|
trailLength = 3;
|
||||||
hitEffect = despawnEffect = Fx.hitSquaresColor;
|
hitEffect = despawnEffect = Fx.hitSquaresColor;
|
||||||
buildingDamageMultiplier = 0.2f;
|
buildingDamageMultiplier = 0.2f;
|
||||||
|
|
||||||
|
if(false)
|
||||||
|
spawnBullets.add(new BulletType(){{
|
||||||
|
instantDisappear = true;
|
||||||
|
lightning = 6;
|
||||||
|
lightningLength = 10;
|
||||||
|
lightningLengthRand = 10;
|
||||||
|
lightningColor = Color.valueOf("ff6214");
|
||||||
|
lightningCone = 20f;
|
||||||
|
damage = 30;
|
||||||
|
despawnEffect = hitEffect = Fx.none;
|
||||||
|
}});
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
|
|
||||||
shoot = new ShootSpread(15, 2f);
|
|
||||||
|
|
||||||
coolantMultiplier = 6f;
|
coolantMultiplier = 6f;
|
||||||
|
|
||||||
inaccuracy = 0.2f;
|
|
||||||
velocityRnd = 0.17f;
|
|
||||||
shake = 1f;
|
shake = 1f;
|
||||||
ammoPerShot = 3;
|
|
||||||
maxAmmo = 30;
|
//shoot = new ShootAlternate(){{
|
||||||
consumeAmmoOnce = true;
|
// shots = 3;
|
||||||
|
// barrels = 3;
|
||||||
|
//}};
|
||||||
|
|
||||||
drawer = new DrawTurret("reinforced-"){{
|
drawer = new DrawTurret("reinforced-"){{
|
||||||
parts.add(new RegionPart("-blade"){{
|
parts.add(new RegionPart("-blade"){{
|
||||||
@ -4237,7 +4246,6 @@ public class Blocks{
|
|||||||
mirror = true;
|
mirror = true;
|
||||||
under = true;
|
under = true;
|
||||||
moveX = 2f;
|
moveX = 2f;
|
||||||
//moveY = -1f;
|
|
||||||
moveRot = -7f;
|
moveRot = -7f;
|
||||||
moves.add(new PartMove(PartProgress.recoil, 0f, -2f, 3f));
|
moves.add(new PartMove(PartProgress.recoil, 0f, -2f, 3f));
|
||||||
}},
|
}},
|
||||||
@ -4254,20 +4262,18 @@ public class Blocks{
|
|||||||
heatColor = Color.valueOf("ff6214");
|
heatColor = Color.valueOf("ff6214");
|
||||||
moveY = -8f;
|
moveY = -8f;
|
||||||
progress = PartProgress.recoil;
|
progress = PartProgress.recoil;
|
||||||
//drawRegion = false;
|
|
||||||
mirror = false;
|
mirror = false;
|
||||||
under = true;
|
under = true;
|
||||||
}});
|
}});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
shootY = 5f;
|
shootY = 11f;
|
||||||
outlineColor = Pal.darkOutline;
|
outlineColor = Pal.darkOutline;
|
||||||
size = 4;
|
size = 4;
|
||||||
envEnabled |= Env.space;
|
envEnabled |= Env.space;
|
||||||
reload = 30f;
|
reload = 30f;
|
||||||
recoil = 2f;
|
recoil = 2f;
|
||||||
range = 125;
|
range = 125;
|
||||||
shootCone = 40f;
|
|
||||||
scaledHealth = 210;
|
scaledHealth = 210;
|
||||||
rotateSpeed = 3f;
|
rotateSpeed = 3f;
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ public class UnitTypes{
|
|||||||
|
|
||||||
//region neoplasm
|
//region neoplasm
|
||||||
|
|
||||||
public static @EntityDef({Unitc.class, Crawlc.class}) UnitType latum;
|
public static @EntityDef({Unitc.class, Crawlc.class}) UnitType latum, renale;
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
@ -3906,6 +3906,27 @@ public class UnitTypes{
|
|||||||
//endregion
|
//endregion
|
||||||
//region erekir - neoplasm
|
//region erekir - neoplasm
|
||||||
|
|
||||||
|
renale = new NeoplasmUnitType("renale"){{
|
||||||
|
health = 500;
|
||||||
|
armor = 2;
|
||||||
|
hitSize = 9f;
|
||||||
|
omniMovement = false;
|
||||||
|
rotateSpeed = 2.5f;
|
||||||
|
drownTimeMultiplier = 2f;
|
||||||
|
drawCell = false;
|
||||||
|
segments = 3;
|
||||||
|
drawBody = false;
|
||||||
|
hidden = true;
|
||||||
|
crushDamage = 0.5f;
|
||||||
|
aiController = HugAI::new;
|
||||||
|
targetAir = false;
|
||||||
|
|
||||||
|
segmentScl = 3f;
|
||||||
|
segmentPhase = 5f;
|
||||||
|
segmentMag = 0.5f;
|
||||||
|
speed = 1.2f;
|
||||||
|
}};
|
||||||
|
|
||||||
latum = new NeoplasmUnitType("latum"){{
|
latum = new NeoplasmUnitType("latum"){{
|
||||||
health = 20000;
|
health = 20000;
|
||||||
armor = 12;
|
armor = 12;
|
||||||
@ -3924,6 +3945,8 @@ public class UnitTypes{
|
|||||||
segmentScl = 4f;
|
segmentScl = 4f;
|
||||||
segmentPhase = 5f;
|
segmentPhase = 5f;
|
||||||
speed = 1f;
|
speed = 1f;
|
||||||
|
|
||||||
|
abilities.add(new SpawnDeathAbility(renale, 5, 11f));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
@ -869,6 +869,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO I don't like where this is, move somewhere else?
|
||||||
/** Queues a building health update. This will be sent in a Call.buildHealthUpdate packet later. */
|
/** Queues a building health update. This will be sent in a Call.buildHealthUpdate packet later. */
|
||||||
public void buildHealthUpdate(Building build){
|
public void buildHealthUpdate(Building build){
|
||||||
buildHealthChanged.add(build.pos());
|
buildHealthChanged.add(build.pos());
|
||||||
|
39
core/src/mindustry/entities/abilities/SpawnDeathAbility.java
Normal file
39
core/src/mindustry/entities/abilities/SpawnDeathAbility.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package mindustry.entities.abilities;
|
||||||
|
|
||||||
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
|
import mindustry.*;
|
||||||
|
import mindustry.gen.*;
|
||||||
|
import mindustry.type.*;
|
||||||
|
|
||||||
|
/** Spawns a certain amount of units upon death. */
|
||||||
|
public class SpawnDeathAbility extends Ability{
|
||||||
|
public UnitType type;
|
||||||
|
public int amount = 1, randAmount = 0;
|
||||||
|
/** Random spread of units away from the spawned. */
|
||||||
|
public float spread = 8f;
|
||||||
|
/** If true, units spawned face outwards from the middle. */
|
||||||
|
public boolean faceOutwards = true;
|
||||||
|
|
||||||
|
public SpawnDeathAbility(UnitType type, int amount, float spread){
|
||||||
|
this.type = type;
|
||||||
|
this.amount = amount;
|
||||||
|
this.spread = spread;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpawnDeathAbility(){
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void death(Unit unit){
|
||||||
|
if(!Vars.net.client()){
|
||||||
|
int spawned = amount + Mathf.random(randAmount);
|
||||||
|
for(int i = 0; i < spawned; i++){
|
||||||
|
Tmp.v1.rnd(Mathf.random(spread));
|
||||||
|
var u = type.spawn(unit.team, unit.x + Tmp.v1.x, unit.y + Tmp.v1.y);
|
||||||
|
|
||||||
|
u.rotation = faceOutwards ? Tmp.v1.angle() : unit.rotation + Mathf.range(5f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,7 +26,7 @@ abstract class CrawlComp implements Posc, Rotc, Hitboxc, Unitc{
|
|||||||
|
|
||||||
transient Floor lastDeepFloor;
|
transient Floor lastDeepFloor;
|
||||||
transient float lastCrawlSlowdown = 1f;
|
transient float lastCrawlSlowdown = 1f;
|
||||||
transient float segmentRot, crawlTime;
|
transient float segmentRot, crawlTime = Mathf.random(100f);
|
||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,6 +3,7 @@ package mindustry.graphics;
|
|||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.graphics.gl.*;
|
import arc.graphics.gl.*;
|
||||||
|
import arc.math.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@ -31,6 +32,19 @@ public class CacheLayer{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Adds a cache layer at a certain position. All layers >= this index are shifted upwards.*/
|
||||||
|
public static void add(int index, CacheLayer layer){
|
||||||
|
index = Mathf.clamp(index, 0, all.length - 1);
|
||||||
|
|
||||||
|
var prev = all;
|
||||||
|
all = new CacheLayer[all.length + 1];
|
||||||
|
|
||||||
|
System.arraycopy(prev, 0, all, 0, index);
|
||||||
|
System.arraycopy(prev, index, all, index + 1, prev.length - index);
|
||||||
|
|
||||||
|
all[index] = layer;
|
||||||
|
}
|
||||||
|
|
||||||
/** Loads default cache layers. */
|
/** Loads default cache layers. */
|
||||||
public static void init(){
|
public static void init(){
|
||||||
add(
|
add(
|
||||||
|
Reference in New Issue
Block a user