From 3251dde4a87eb55970cb88595757d28a7f65ebfa Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Jul 2020 17:13:21 -0400 Subject: [PATCH] Spore storms / Weather attribute effects --- core/assets/planets/TODO.dat | Bin 23558 -> 23522 bytes core/src/mindustry/content/Weathers.java | 88 +++++++++++++++++- core/src/mindustry/core/GameState.java | 3 + core/src/mindustry/core/Logic.java | 4 + core/src/mindustry/editor/WaveGraph.java | 3 +- .../mindustry/entities/comp/BuildingComp.java | 6 +- core/src/mindustry/type/Sector.java | 4 +- core/src/mindustry/type/Weather.java | 2 + .../mindustry/world/blocks/Attributes.java | 44 ++++++++- .../world/blocks/power/SolarGenerator.java | 6 +- .../world/blocks/power/ThermalGenerator.java | 13 +-- .../world/blocks/production/Cultivator.java | 4 +- .../world/blocks/production/SolidPump.java | 2 +- core/src/mindustry/world/meta/Attribute.java | 14 ++- .../mindustry/tools/SectorDataGenerator.java | 5 + 15 files changed, 177 insertions(+), 21 deletions(-) diff --git a/core/assets/planets/TODO.dat b/core/assets/planets/TODO.dat index e8220fa4817b2c41b053132c4c9f6557a4154ac3..eb42302979b85297383fa59219182a3e8d6187a3 100644 GIT binary patch literal 23522 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 literal 23558 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 state.envAttrs.add(w.weather.attrs, w.opacity)); + Groups.update(); } diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index eb2ac64359..c6e7a9cac6 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -139,7 +139,7 @@ public class WaveGraph extends Table{ for(Mode m : Mode.all){ t.button("$wavemode." + m.name(), Styles.fullTogglet, () -> { mode = m; - }).group(group).height(32f).update(b -> b.setChecked(m == mode)).width(100f); + }).group(group).height(32f).update(b -> b.setChecked(m == mode)).width(130f); } }).growX(); } @@ -201,6 +201,7 @@ public class WaveGraph extends Table{ enum Mode{ counts, totals, health; + static Mode[] all = values(); } } diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index b9f557fd28..621bad7959 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -703,7 +703,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } public float getProgressIncrease(float baseTime){ - return 1f / baseTime * delta() * efficiency(); + return 1f / baseTime * edelta(); + } + + public float getDisplayEfficiency(){ + return getProgressIncrease(1f) / edelta(); } /** @return whether this block should play its active sound.*/ diff --git a/core/src/mindustry/type/Sector.java b/core/src/mindustry/type/Sector.java index d6aab89708..d42560ba9a 100644 --- a/core/src/mindustry/type/Sector.java +++ b/core/src/mindustry/type/Sector.java @@ -390,6 +390,8 @@ public class Sector{ /** Has sandstorms. */ desert, /** Has an enemy base. */ - base + base, + /** Has spore weather. */ + spores } } diff --git a/core/src/mindustry/type/Weather.java b/core/src/mindustry/type/Weather.java index a1d23a0a76..21f3863dcc 100644 --- a/core/src/mindustry/type/Weather.java +++ b/core/src/mindustry/type/Weather.java @@ -8,12 +8,14 @@ import mindustry.annotations.Annotations.*; import mindustry.ctype.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.world.blocks.*; import static mindustry.Vars.renderer; public abstract class Weather extends MappableContent{ /** Default duration of this weather event in ticks. */ public float duration = 15f * Time.toMinutes; + public Attributes attrs = new Attributes(); //internals public Rand rand = new Rand(); diff --git a/core/src/mindustry/world/blocks/Attributes.java b/core/src/mindustry/world/blocks/Attributes.java index 487b093314..50c907e218 100644 --- a/core/src/mindustry/world/blocks/Attributes.java +++ b/core/src/mindustry/world/blocks/Attributes.java @@ -1,15 +1,51 @@ package mindustry.world.blocks; +import arc.util.serialization.*; +import arc.util.serialization.Json.*; import mindustry.world.meta.Attribute; -public class Attributes{ - private float[] array = new float[Attribute.values().length]; +import java.util.*; + +public class Attributes implements Serializable{ + private final float[] arr = new float[Attribute.all.length]; + + public void clear(){ + Arrays.fill(arr, 0); + } public float get(Attribute attr){ - return array[attr.ordinal()]; + return arr[attr.ordinal()]; } public void set(Attribute attr, float value){ - array[attr.ordinal()] = value; + arr[attr.ordinal()] = value; + } + + public void add(Attributes other){ + for(int i = 0; i < arr.length; i++){ + arr[i] += other.arr[i]; + } + } + + public void add(Attributes other, float scl){ + for(int i = 0; i < arr.length; i++){ + arr[i] += other.arr[i] * scl; + } + } + + @Override + public void write(Json json){ + for(Attribute at : Attribute.all){ + if(arr[at.ordinal()] != 0){ + json.writeValue(at.name(), arr[at.ordinal()]); + } + } + } + + @Override + public void read(Json json, JsonValue data){ + for(Attribute at : Attribute.all){ + arr[at.ordinal()] = data.getFloat(at.name(), 0); + } } } diff --git a/core/src/mindustry/world/blocks/power/SolarGenerator.java b/core/src/mindustry/world/blocks/power/SolarGenerator.java index 2c79557e5d..2ca0030e1e 100644 --- a/core/src/mindustry/world/blocks/power/SolarGenerator.java +++ b/core/src/mindustry/world/blocks/power/SolarGenerator.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.power; +import arc.math.*; import arc.struct.*; import mindustry.world.meta.*; @@ -23,7 +24,10 @@ public class SolarGenerator extends PowerGenerator{ public class SolarGeneratorEntity extends GeneratorEntity{ @Override public void updateTile(){ - productionEfficiency = state.rules.solarPowerMultiplier < 0 ? (state.rules.lighting ? 1f - state.rules.ambientLight.a : 1f) : state.rules.solarPowerMultiplier; + productionEfficiency = + Mathf.maxZero(Attribute.light.env() + state.rules.solarPowerMultiplier < 0 ? + (state.rules.lighting ? 1f - state.rules.ambientLight.a : 1f) : + state.rules.solarPowerMultiplier); } } } diff --git a/core/src/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/mindustry/world/blocks/power/ThermalGenerator.java index 83d2212eb5..8dd5555690 100644 --- a/core/src/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/mindustry/world/blocks/power/ThermalGenerator.java @@ -37,8 +37,12 @@ public class ThermalGenerator extends PowerGenerator{ } public class ThermalGeneratorEntity extends GeneratorEntity{ + public float sum; + @Override public void updateTile(){ + productionEfficiency = sum + attribute.env(); + if(productionEfficiency > 0.1f && Mathf.chance(0.05 * delta())){ generateEffect.at(x + Mathf.range(3f), y + Mathf.range(3f)); } @@ -53,14 +57,7 @@ public class ThermalGenerator extends PowerGenerator{ public void onProximityAdded(){ super.onProximityAdded(); - productionEfficiency = sumAttribute(attribute, tile.x, tile.y); - } - - @Override - public float getPowerProduction(){ - //in this case, productionEfficiency means 'total heat' - //thus, it may be greater than 1.0 - return powerProduction * productionEfficiency; + sum = sumAttribute(attribute, tile.x, tile.y); } } } diff --git a/core/src/mindustry/world/blocks/production/Cultivator.java b/core/src/mindustry/world/blocks/production/Cultivator.java index f4587a4a82..cc9efdd8f2 100644 --- a/core/src/mindustry/world/blocks/production/Cultivator.java +++ b/core/src/mindustry/world/blocks/production/Cultivator.java @@ -33,7 +33,7 @@ public class Cultivator extends GenericCrafter{ super.setBars(); bars.add("multiplier", (CultivatorEntity entity) -> new Bar(() -> Core.bundle.formatFloat("bar.efficiency", - ((entity.boost + 1f) * entity.warmup) * 100f, 1), + ((entity.boost + 1f + attribute.env()) * entity.warmup) * 100f, 1), () -> Pal.ammo, () -> entity.warmup)); } @@ -101,7 +101,7 @@ public class Cultivator extends GenericCrafter{ @Override public float getProgressIncrease(float baseTime){ - return super.getProgressIncrease(baseTime) * (1f + boost); + return super.getProgressIncrease(baseTime) * (1f + boost + attribute.env()); } @Override diff --git a/core/src/mindustry/world/blocks/production/SolidPump.java b/core/src/mindustry/world/blocks/production/SolidPump.java index 422557ff8d..abf531ba2a 100644 --- a/core/src/mindustry/world/blocks/production/SolidPump.java +++ b/core/src/mindustry/world/blocks/production/SolidPump.java @@ -120,7 +120,7 @@ public class SolidPump extends Pump{ if(canPump(tile)) fraction = 1f; } - fraction += boost; + fraction += boost + (attribute == null ? 0 : attribute.env()); fraction = Math.max(fraction, 0); if(cons.valid() && typeLiquid() < liquidCapacity - 0.001f){ diff --git a/core/src/mindustry/world/meta/Attribute.java b/core/src/mindustry/world/meta/Attribute.java index 815f471c9d..07699ba6b3 100644 --- a/core/src/mindustry/world/meta/Attribute.java +++ b/core/src/mindustry/world/meta/Attribute.java @@ -1,5 +1,7 @@ package mindustry.world.meta; +import mindustry.*; + public enum Attribute{ /** Heat of this block. Used for calculating output of thermal generators. */ heat, @@ -8,5 +10,15 @@ public enum Attribute{ /** Water content of this block. Used for increasing water extractor yield. */ water, /** Oil content of this block. Used for increasing oil extractor yield. */ - oil + oil, + /** Light coverage. Negative values decrease solar panel efficiency. */ + light; + + public static final Attribute[] all = values(); + + /** @return the envrionmental value for this attribute. */ + public float env(){ + if(Vars.state == null) return 0; + return Vars.state.envAttrs.get(this); + } } diff --git a/tools/src/mindustry/tools/SectorDataGenerator.java b/tools/src/mindustry/tools/SectorDataGenerator.java index e0c4828280..deb9b7343b 100644 --- a/tools/src/mindustry/tools/SectorDataGenerator.java +++ b/tools/src/mindustry/tools/SectorDataGenerator.java @@ -124,6 +124,7 @@ public class SectorDataGenerator{ boolean hasSnow = data.floors[0].name.contains("ice") || data.floors[0].name.contains("snow"); boolean hasRain = !hasSnow && data.floors[0].name.contains("water"); boolean hasDesert = !hasSnow && !hasRain && data.floors[0].name.contains("sand"); + boolean hasSpores = data.floors[0].name.contains("spore") || data.floors[0].name.contains("moss") || data.floors[0].name.contains("tainted"); if(hasSnow){ data.attributes |= (1 << SectorAttribute.snowy.ordinal()); @@ -137,6 +138,10 @@ public class SectorDataGenerator{ data.attributes |= (1 << SectorAttribute.desert.ordinal()); } + if(hasSpores){ + data.attributes |= (1 << SectorAttribute.spores.ordinal()); + } + data.resources = content.asArray().sort(Structs.comps(Structs.comparing(Content::getContentType), Structs.comparingInt(c -> c.id))).toArray(UnlockableContent.class); //50% water -> naval attribute