Make payload blocks run onDestroyed() of the block payload it carries when destroyed. (#8253)

* Payloads go boom.

* When a payload unit dies too

* Keep the functionality, but limit it to a rule
This commit is contained in:
MEEPofFaith
2024-03-29 12:17:19 -07:00
committed by GitHub
parent 520c423a59
commit d8c1ea17e1
8 changed files with 28 additions and 0 deletions

View File

@@ -1313,6 +1313,7 @@ rules.unitdamagemultiplier = Unit Damage Multiplier
rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier rules.unitcrashdamagemultiplier = Unit Crash Damage Multiplier
rules.solarmultiplier = Solar Power Multiplier rules.solarmultiplier = Solar Power Multiplier
rules.unitcapvariable = Cores Contribute To Unit Cap rules.unitcapvariable = Cores Contribute To Unit Cap
rules.unitpayloadsexplode = Carried Payloads Explode With The Unit
rules.unitcap = Base Unit Cap rules.unitcap = Base Unit Cap
rules.limitarea = Limit Map Area rules.limitarea = Limit Map Area
rules.enemycorebuildradius = Enemy Core No-Build Radius:[lightgray] (tiles) rules.enemycorebuildradius = Enemy Core No-Build Radius:[lightgray] (tiles)

View File

@@ -60,6 +60,11 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{
} }
} }
@Override
public void destroy(){
if(Vars.state.rules.unitPayloadsExplode) payloads.each(Payload::destroyed);
}
float payloadUsed(){ float payloadUsed(){
return payloads.sumf(p -> p.size() * p.size()); return payloads.sumf(p -> p.size() * p.size());
} }

View File

@@ -59,6 +59,8 @@ public class Rules{
public boolean unitAmmo = false; public boolean unitAmmo = false;
/** EXPERIMENTAL! If true, blocks will update in units and share power. */ /** EXPERIMENTAL! If true, blocks will update in units and share power. */
public boolean unitPayloadUpdate = false; public boolean unitPayloadUpdate = false;
/** If true, units' payloads are destroy()ed when the unit is destroyed. */
public boolean unitPayloadsExplode = false;
/** Whether cores add to unit limit */ /** Whether cores add to unit limit */
public boolean unitCapVariable = true; public boolean unitCapVariable = true;
/** If true, unit spawn points are shown. */ /** If true, unit spawn points are shown. */

View File

@@ -233,6 +233,7 @@ public class CustomRulesDialog extends BaseDialog{
title("@rules.title.unit"); title("@rules.title.unit");
check("@rules.unitcapvariable", b -> rules.unitCapVariable = b, () -> rules.unitCapVariable); check("@rules.unitcapvariable", b -> rules.unitCapVariable = b, () -> rules.unitCapVariable);
check("@rules.unitpayloadsexplode", b -> rules.unitPayloadsExplode = b, () -> rules.unitPayloadsExplode);
numberi("@rules.unitcap", f -> rules.unitCap = f, () -> rules.unitCap, -999, 999); numberi("@rules.unitcap", f -> rules.unitCap = f, () -> rules.unitCap, -999, 999);
number("@rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier); number("@rules.unitdamagemultiplier", f -> rules.unitDamageMultiplier = f, () -> rules.unitDamageMultiplier);
number("@rules.unitcrashdamagemultiplier", f -> rules.unitCrashDamageMultiplier = f, () -> rules.unitCrashDamageMultiplier); number("@rules.unitcrashdamagemultiplier", f -> rules.unitCrashDamageMultiplier = f, () -> rules.unitCrashDamageMultiplier);

View File

@@ -51,6 +51,11 @@ public class BuildPayload implements Payload{
build.updatePayload(unitHolder, buildingHolder); build.updatePayload(unitHolder, buildingHolder);
} }
@Override
public void destroyed(){
build.onDestroyed();
}
@Override @Override
public ItemStack[] requirements(){ public ItemStack[] requirements(){
return build.block.requirements; return build.block.requirements;

View File

@@ -54,6 +54,8 @@ public interface Payload extends Position{
return 0f; return 0f;
} }
default void destroyed(){};
/** writes the payload for saving. */ /** writes the payload for saving. */
void write(Writes write); void write(Writes write);

View File

@@ -151,6 +151,12 @@ public class PayloadBlock extends Block{
} }
} }
@Override
public void onDestroyed(){
if(payload != null) payload.destroyed();
super.onDestroyed();
}
public boolean blends(int direction){ public boolean blends(int direction){
return PayloadBlock.blends(this, direction); return PayloadBlock.blends(this, direction);
} }

View File

@@ -190,6 +190,12 @@ public class PayloadConveyor extends Block{
super.draw(); super.draw();
} }
@Override
public void onDestroyed(){
if(item != null) item.destroyed();
super.onDestroyed();
}
@Override @Override
public void draw(){ public void draw(){
super.draw(); super.draw();