diff --git a/core/src/io/anuke/mindustry/content/StatusEffects.java b/core/src/io/anuke/mindustry/content/StatusEffects.java index 6250336233..cb4035dd0e 100644 --- a/core/src/io/anuke/mindustry/content/StatusEffects.java +++ b/core/src/io/anuke/mindustry/content/StatusEffects.java @@ -1,10 +1,14 @@ package io.anuke.mindustry.content; +import io.anuke.arc.*; import io.anuke.arc.math.Mathf; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.game.ContentList; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.type.StatusEffect; +import static io.anuke.mindustry.Vars.waveTeam; + public class StatusEffects implements ContentList{ public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss; @@ -37,7 +41,12 @@ public class StatusEffects implements ContentList{ speedMultiplier = 0.9f; effect = Fx.wet; - trans(() -> shocked, ((unit, time, newTime, result) -> unit.damage(20f))); + trans(() -> shocked, ((unit, time, newTime, result) -> { + unit.damage(20f); + if(unit.getTeam() == waveTeam){ + Events.fire(Trigger.shock); + } + })); opposite(() -> burning); }}; diff --git a/core/src/io/anuke/mindustry/entities/effect/Fire.java b/core/src/io/anuke/mindustry/entities/effect/Fire.java index f48445298b..c5a0bd2119 100644 --- a/core/src/io/anuke/mindustry/entities/effect/Fire.java +++ b/core/src/io/anuke/mindustry/entities/effect/Fire.java @@ -1,6 +1,7 @@ package io.anuke.mindustry.entities.effect; import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; import io.anuke.arc.collection.*; import io.anuke.arc.math.*; import io.anuke.arc.math.geom.*; @@ -10,9 +11,9 @@ import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.impl.*; import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.game.*; import io.anuke.mindustry.gen.*; -import io.anuke.mindustry.net.*; import io.anuke.mindustry.world.*; import java.io.*; @@ -70,7 +71,11 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait{ */ public static void extinguish(Tile tile, float intensity){ if(tile != null && map.containsKey(tile.pos())){ - map.get(tile.pos()).time += intensity * Time.delta(); + Fire fire = map.get(tile.pos()); + fire.time += intensity * Time.delta(); + if(fire.time >= fire.lifetime()){ + Events.fire(Trigger.fireExtinguish); + } } } diff --git a/core/src/io/anuke/mindustry/game/EventType.java b/core/src/io/anuke/mindustry/game/EventType.java index d1158e1265..ad1456f15f 100644 --- a/core/src/io/anuke/mindustry/game/EventType.java +++ b/core/src/io/anuke/mindustry/game/EventType.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.game; +import io.anuke.annotations.Annotations.*; import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.entities.traits.BuilderTrait; import io.anuke.mindustry.entities.type.Unit; @@ -9,6 +10,44 @@ import io.anuke.mindustry.entities.type.Player; public class EventType{ + //events that occur very often + public enum Trigger{ + shock, + impactPower, + thoriumReactorOverheat, + itemLaunch, + fireExtinguish + } + + //TODO + public static class WinEvent{} + + //TODO + public static class LoseEvent{} + + //TODO + public static class LaunchEvent{} + + //TODO + public static class PlayerDeathEvent{} + + //TODO + public static class MapMakeEvent{} + + //TODO + public static class MapPublishEvent{} + + //TODO + public static class PlayerChatEvent{ + public final Player player; + public final String message; + + public PlayerChatEvent(Player player, String message){ + this.player = player; + this.message = message; + } + } + /** Called when a zone's requirements are met. */ public static class ZoneRequireCompleteEvent{ public final Zone zone, required; @@ -137,11 +176,13 @@ public class EventType{ public static class BlockBuildEndEvent{ public final Tile tile; public final Team team; + public final @Nullable Player player; public final boolean breaking; - public BlockBuildEndEvent(Tile tile, Team team, boolean breaking){ + public BlockBuildEndEvent(Tile tile, @Nullable Player player, Team team, boolean breaking){ this.tile = tile; this.team = team; + this.player = player; this.breaking = breaking; } } diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index a1a7f153c8..a78445b81e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -49,11 +49,11 @@ public class BuildBlock extends Block{ } @Remote(called = Loc.server) - public static void onDeconstructFinish(Tile tile, Block block){ + public static void onDeconstructFinish(Tile tile, Block block, int builderID){ Team team = tile.getTeam(); Effects.effect(Fx.breakBlock, tile.drawx(), tile.drawy(), block.size); world.removeBlock(tile); - Events.fire(new BlockBuildEndEvent(tile, team, true)); + Events.fire(new BlockBuildEndEvent(tile, playerGroup.getByID(builderID), team, true)); Sounds.breaks.at(tile, Mathf.random(0.7f, 1.4f)); } @@ -74,7 +74,7 @@ public class BuildBlock extends Block{ //event first before they can recieve the placed() event modification results Core.app.post(() -> tile.block().playerPlaced(tile)); } - Core.app.post(() -> Events.fire(new BlockBuildEndEvent(tile, team, false))); + Core.app.post(() -> Events.fire(new BlockBuildEndEvent(tile, playerGroup.getByID(builderID), team, false))); Sounds.place.at(tile, Mathf.random(0.7f, 1.4f)); } @@ -247,7 +247,7 @@ public class BuildBlock extends Block{ progress = Mathf.clamp(progress - amount); if(progress <= 0 || state.rules.infiniteResources){ - Call.onDeconstructFinish(tile, this.cblock == null ? previous : this.cblock); + Call.onDeconstructFinish(tile, this.cblock == null ? previous : this.cblock, builderID); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java index a910a20920..9e851f4d2e 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/ImpactReactor.java @@ -8,6 +8,7 @@ import io.anuke.arc.util.*; import io.anuke.mindustry.content.*; import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.type.*; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.ui.*; @@ -71,11 +72,17 @@ public class ImpactReactor extends PowerGenerator{ FusionReactorEntity entity = tile.entity(); if(entity.cons.valid() && entity.power.satisfaction >= 0.99f){ + boolean prevOut = getPowerProduction(tile) <= consumes.getPower().requestedPower(entity); + entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed); if(Mathf.isEqual(entity.warmup, 1f, 0.001f)){ entity.warmup = 1f; } + if(!prevOut && (getPowerProduction(tile) <= consumes.getPower().requestedPower(entity))){ + Events.fire(Trigger.impactPower); + } + if(entity.timer.get(timerUse, itemDuration / entity.timeScale)){ entity.cons.trigger(); } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java index 546bf753d6..9a1d12ac39 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/NuclearReactor.java @@ -1,6 +1,6 @@ package io.anuke.mindustry.world.blocks.power; -import io.anuke.arc.Core; +import io.anuke.arc.*; import io.anuke.arc.graphics.Color; import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.math.Mathf; @@ -10,6 +10,7 @@ import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.entities.Damage; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.type.TileEntity; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.type.Item; @@ -111,6 +112,7 @@ public class NuclearReactor extends PowerGenerator{ entity.heat = Mathf.clamp(entity.heat); if(entity.heat >= 0.999f){ + Events.fire(Trigger.thoriumReactorOverheat); entity.kill(); } } diff --git a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java index 3345b2e4ab..9984a068e0 100644 --- a/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java +++ b/core/src/io/anuke/mindustry/world/blocks/power/PowerNode.java @@ -286,7 +286,7 @@ public class PowerNode extends PowerBlock{ float fract = 1f-tile.entity.power.graph.getSatisfaction(); Draw.color(Color.white, Pal.powerLight, fract*0.86f + Mathf.absin(3f, 0.1f)); - Drawf.laser(laser, laserEnd, x1, y1, x2, y2, 0.4f); + Drawf.laser(laser, laserEnd, x1, y1, x2, y2, 0.3f); Draw.color(); } diff --git a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java index 71c16f5393..32caf3ce27 100644 --- a/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java +++ b/core/src/io/anuke/mindustry/world/blocks/storage/LaunchPad.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.world.blocks.storage; +import io.anuke.arc.*; import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.math.Mathf; @@ -8,6 +9,7 @@ import io.anuke.mindustry.Vars; import io.anuke.mindustry.content.Fx; import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.type.TileEntity; +import io.anuke.mindustry.game.EventType.*; import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.ItemType; @@ -73,6 +75,7 @@ public class LaunchPad extends StorageBlock{ if(entity.cons.valid() && world.isZone() && entity.items.total() >= itemCapacity && entity.timer.get(timerLaunch, launchTime / entity.timeScale)){ for(Item item : Vars.content.items()){ + Events.fire(Trigger.itemLaunch); Effects.effect(Fx.padlaunch, tile); data.addItem(item, entity.items.get(item)); entity.items.set(item, 0); diff --git a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java index 0a9f4c674c..4277bcaefa 100644 --- a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java +++ b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java @@ -35,7 +35,9 @@ public class SWorkshop implements SteamUGCCallback{ @Override public void onUnsubscribeItem(SteamPublishedFileID publishedFileID, SteamResult result){ - + ItemInstallInfo info = new ItemInstallInfo(); + ugc.getItemInstallInfo(publishedFileID, info); + Log.info("Item unsubscribed from {0}", info.getFolder()); } @Override @@ -106,7 +108,9 @@ public class SWorkshop implements SteamUGCCallback{ @Override public void onDownloadItemResult(int appID, SteamPublishedFileID publishedFileID, SteamResult result){ - + ItemInstallInfo info = new ItemInstallInfo(); + ugc.getItemInstallInfo(publishedFileID, info); + Log.info("Item downloaded to {0}", info.getFolder()); } @Override @@ -141,6 +145,8 @@ public class SWorkshop implements SteamUGCCallback{ @Override public void onDeleteItem(SteamPublishedFileID publishedFileID, SteamResult result){ - + ItemInstallInfo info = new ItemInstallInfo(); + ugc.getItemInstallInfo(publishedFileID, info); + Log.info("Item removed from {0}", info.getFolder()); } }