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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

-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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