Events, triggers

This commit is contained in:
Anuken
2019-09-10 22:50:00 -04:00
parent f30dc7dcd9
commit 565b79d1b2
9 changed files with 86 additions and 13 deletions

View File

@@ -1,10 +1,14 @@
package io.anuke.mindustry.content; package io.anuke.mindustry.content;
import io.anuke.arc.*;
import io.anuke.arc.math.Mathf; import io.anuke.arc.math.Mathf;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.game.ContentList; import io.anuke.mindustry.game.ContentList;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.type.StatusEffect; import io.anuke.mindustry.type.StatusEffect;
import static io.anuke.mindustry.Vars.waveTeam;
public class StatusEffects implements ContentList{ public class StatusEffects implements ContentList{
public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, corroded, boss; 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; speedMultiplier = 0.9f;
effect = Fx.wet; 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); opposite(() -> burning);
}}; }};

View File

@@ -1,6 +1,7 @@
package io.anuke.mindustry.entities.effect; package io.anuke.mindustry.entities.effect;
import io.anuke.annotations.Annotations.*; import io.anuke.annotations.Annotations.*;
import io.anuke.arc.*;
import io.anuke.arc.collection.*; import io.anuke.arc.collection.*;
import io.anuke.arc.math.*; import io.anuke.arc.math.*;
import io.anuke.arc.math.geom.*; 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.impl.*;
import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.traits.*;
import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.game.*; import io.anuke.mindustry.game.*;
import io.anuke.mindustry.gen.*; import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.net.*;
import io.anuke.mindustry.world.*; import io.anuke.mindustry.world.*;
import java.io.*; import java.io.*;
@@ -70,7 +71,11 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait{
*/ */
public static void extinguish(Tile tile, float intensity){ public static void extinguish(Tile tile, float intensity){
if(tile != null && map.containsKey(tile.pos())){ 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);
}
} }
} }

View File

@@ -1,5 +1,6 @@
package io.anuke.mindustry.game; package io.anuke.mindustry.game;
import io.anuke.annotations.Annotations.*;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.traits.BuilderTrait; import io.anuke.mindustry.entities.traits.BuilderTrait;
import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.Unit;
@@ -9,6 +10,44 @@ import io.anuke.mindustry.entities.type.Player;
public class EventType{ 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. */ /** Called when a zone's requirements are met. */
public static class ZoneRequireCompleteEvent{ public static class ZoneRequireCompleteEvent{
public final Zone zone, required; public final Zone zone, required;
@@ -137,11 +176,13 @@ public class EventType{
public static class BlockBuildEndEvent{ public static class BlockBuildEndEvent{
public final Tile tile; public final Tile tile;
public final Team team; public final Team team;
public final @Nullable Player player;
public final boolean breaking; 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.tile = tile;
this.team = team; this.team = team;
this.player = player;
this.breaking = breaking; this.breaking = breaking;
} }
} }

View File

@@ -49,11 +49,11 @@ public class BuildBlock extends Block{
} }
@Remote(called = Loc.server) @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(); Team team = tile.getTeam();
Effects.effect(Fx.breakBlock, tile.drawx(), tile.drawy(), block.size); Effects.effect(Fx.breakBlock, tile.drawx(), tile.drawy(), block.size);
world.removeBlock(tile); 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)); 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 //event first before they can recieve the placed() event modification results
Core.app.post(() -> tile.block().playerPlaced(tile)); 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)); Sounds.place.at(tile, Mathf.random(0.7f, 1.4f));
} }
@@ -247,7 +247,7 @@ public class BuildBlock extends Block{
progress = Mathf.clamp(progress - amount); progress = Mathf.clamp(progress - amount);
if(progress <= 0 || state.rules.infiniteResources){ 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);
} }
} }

View File

@@ -8,6 +8,7 @@ import io.anuke.arc.util.*;
import io.anuke.mindustry.content.*; import io.anuke.mindustry.content.*;
import io.anuke.mindustry.entities.*; import io.anuke.mindustry.entities.*;
import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*; import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.graphics.*;
import io.anuke.mindustry.ui.*; import io.anuke.mindustry.ui.*;
@@ -71,11 +72,17 @@ public class ImpactReactor extends PowerGenerator{
FusionReactorEntity entity = tile.entity(); FusionReactorEntity entity = tile.entity();
if(entity.cons.valid() && entity.power.satisfaction >= 0.99f){ 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); entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed);
if(Mathf.isEqual(entity.warmup, 1f, 0.001f)){ if(Mathf.isEqual(entity.warmup, 1f, 0.001f)){
entity.warmup = 1f; entity.warmup = 1f;
} }
if(!prevOut && (getPowerProduction(tile) <= consumes.getPower().requestedPower(entity))){
Events.fire(Trigger.impactPower);
}
if(entity.timer.get(timerUse, itemDuration / entity.timeScale)){ if(entity.timer.get(timerUse, itemDuration / entity.timeScale)){
entity.cons.trigger(); entity.cons.trigger();
} }

View File

@@ -1,6 +1,6 @@
package io.anuke.mindustry.world.blocks.power; 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.Color;
import io.anuke.arc.graphics.g2d.*; import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.Mathf; 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.Damage;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.gen.*; import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
@@ -111,6 +112,7 @@ public class NuclearReactor extends PowerGenerator{
entity.heat = Mathf.clamp(entity.heat); entity.heat = Mathf.clamp(entity.heat);
if(entity.heat >= 0.999f){ if(entity.heat >= 0.999f){
Events.fire(Trigger.thoriumReactorOverheat);
entity.kill(); entity.kill();
} }
} }

View File

@@ -286,7 +286,7 @@ public class PowerNode extends PowerBlock{
float fract = 1f-tile.entity.power.graph.getSatisfaction(); float fract = 1f-tile.entity.power.graph.getSatisfaction();
Draw.color(Color.white, Pal.powerLight, fract*0.86f + Mathf.absin(3f, 0.1f)); 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(); Draw.color();
} }

View File

@@ -1,5 +1,6 @@
package io.anuke.mindustry.world.blocks.storage; package io.anuke.mindustry.world.blocks.storage;
import io.anuke.arc.*;
import io.anuke.arc.graphics.g2d.Draw; import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines; import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.math.Mathf; 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.content.Fx;
import io.anuke.mindustry.entities.Effects; import io.anuke.mindustry.entities.Effects;
import io.anuke.mindustry.entities.type.TileEntity; import io.anuke.mindustry.entities.type.TileEntity;
import io.anuke.mindustry.game.EventType.*;
import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.graphics.Pal;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.mindustry.type.ItemType; 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)){ if(entity.cons.valid() && world.isZone() && entity.items.total() >= itemCapacity && entity.timer.get(timerLaunch, launchTime / entity.timeScale)){
for(Item item : Vars.content.items()){ for(Item item : Vars.content.items()){
Events.fire(Trigger.itemLaunch);
Effects.effect(Fx.padlaunch, tile); Effects.effect(Fx.padlaunch, tile);
data.addItem(item, entity.items.get(item)); data.addItem(item, entity.items.get(item));
entity.items.set(item, 0); entity.items.set(item, 0);

View File

@@ -35,7 +35,9 @@ public class SWorkshop implements SteamUGCCallback{
@Override @Override
public void onUnsubscribeItem(SteamPublishedFileID publishedFileID, SteamResult result){ public void onUnsubscribeItem(SteamPublishedFileID publishedFileID, SteamResult result){
ItemInstallInfo info = new ItemInstallInfo();
ugc.getItemInstallInfo(publishedFileID, info);
Log.info("Item unsubscribed from {0}", info.getFolder());
} }
@Override @Override
@@ -106,7 +108,9 @@ public class SWorkshop implements SteamUGCCallback{
@Override @Override
public void onDownloadItemResult(int appID, SteamPublishedFileID publishedFileID, SteamResult result){ 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 @Override
@@ -141,6 +145,8 @@ public class SWorkshop implements SteamUGCCallback{
@Override @Override
public void onDeleteItem(SteamPublishedFileID publishedFileID, SteamResult result){ public void onDeleteItem(SteamPublishedFileID publishedFileID, SteamResult result){
ItemInstallInfo info = new ItemInstallInfo();
ugc.getItemInstallInfo(publishedFileID, info);
Log.info("Item removed from {0}", info.getFolder());
} }
} }