Gamemode-specfic missions / Red-enabled location verification

This commit is contained in:
Anuken 2018-08-01 12:19:17 -04:00
parent 53b6e68a85
commit ba96ea5a0c
11 changed files with 54 additions and 22 deletions

View File

@ -24,6 +24,7 @@ public class Mechs implements ContentList{
speed = 0.5f; speed = 0.5f;
weapon = Weapons.blaster; weapon = Weapons.blaster;
trailColor = Palette.lightTrail; trailColor = Palette.lightTrail;
maxSpeed = 3f;
}}; }};
delta = new Mech("delta-mech", false){{ delta = new Mech("delta-mech", false){{
@ -37,16 +38,19 @@ public class Mechs implements ContentList{
weapon = Weapons.shockgun; weapon = Weapons.shockgun;
ammoCapacity = 50; ammoCapacity = 50;
trailColor = Color.valueOf("d3ddff"); trailColor = Color.valueOf("d3ddff");
maxSpeed = 3f;
}}; }};
tau = new Mech("tau-mech", false){{ tau = new Mech("tau-mech", false){{
drillPower = 2; drillPower = 2;
speed = 0.5f; speed = 0.5f;
maxSpeed = 3f;
}}; }};
omega = new Mech("omega-mech", false){{ omega = new Mech("omega-mech", false){{
drillPower = 1; drillPower = 1;
speed = 0.4f; speed = 0.4f;
maxSpeed = 3f;
}}; }};
dart = new Mech("dart-ship", true){{ dart = new Mech("dart-ship", true){{

View File

@ -131,11 +131,11 @@ public class Logic extends Module{
if(!state.is(State.paused) || Net.active()){ if(!state.is(State.paused) || Net.active()){
if(!state.mode.disableWaveTimer){ if(!state.mode.disableWaveTimer && !state.mode.disableWaves){
state.wavetime -= Timers.delta(); state.wavetime -= Timers.delta();
} }
if(!Net.client() && state.wavetime <= 0){ if(!Net.client() && state.wavetime <= 0 && !state.mode.disableWaves){
runWave(); runWave();
} }

View File

@ -12,9 +12,9 @@ import io.anuke.mindustry.content.Mechs;
import io.anuke.mindustry.core.GameState.State; import io.anuke.mindustry.core.GameState.State;
import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.Player;
import io.anuke.mindustry.entities.traits.SyncTrait; import io.anuke.mindustry.entities.traits.SyncTrait;
import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.gen.Call; import io.anuke.mindustry.gen.Call;
import io.anuke.mindustry.gen.RemoteReadServer; import io.anuke.mindustry.gen.RemoteReadServer;
import io.anuke.mindustry.game.Version;
import io.anuke.mindustry.net.*; import io.anuke.mindustry.net.*;
import io.anuke.mindustry.net.Administration.PlayerInfo; import io.anuke.mindustry.net.Administration.PlayerInfo;
import io.anuke.mindustry.net.Packets.*; import io.anuke.mindustry.net.Packets.*;
@ -175,16 +175,14 @@ public class NetServer extends Module{
NetConnection connection = Net.getConnection(id); NetConnection connection = Net.getConnection(id);
if(player == null || connection == null || packet.snapid < connection.lastRecievedClientSnapshot) return; if(player == null || connection == null || packet.snapid < connection.lastRecievedClientSnapshot) return;
boolean verifyPosition = !player.isDead() && !debug && headless && !player.mech.flying && player.getCarrier() == null; boolean verifyPosition = !player.isDead() && !debug && headless && player.getCarrier() == null;
if(connection.lastRecievedClientTime == 0) connection.lastRecievedClientTime = TimeUtils.millis() - 16; if(connection.lastRecievedClientTime == 0) connection.lastRecievedClientTime = TimeUtils.millis() - 16;
long elapsed = TimeUtils.timeSinceMillis(connection.lastRecievedClientTime); long elapsed = TimeUtils.timeSinceMillis(connection.lastRecievedClientTime);
float maxSpeed = (packet.boosting && !player.mech.flying ? player.mech.boostSpeed : player.mech.speed) * 2.5f; float maxSpeed = packet.boosting && !player.mech.flying ? player.mech.boostSpeed : player.mech.speed;
float maxMove = elapsed / 1000f * 60f * Math.min(compound(maxSpeed, player.mech.drag) * 1.1f, player.mech.maxSpeed * 1.05f);
//extra 1.1x multiplicaton is added just in case
float maxMove = elapsed / 1000f * 60f * maxSpeed * 1.1f;
player.pointerX = packet.pointerX; player.pointerX = packet.pointerX;
player.pointerY = packet.pointerY; player.pointerY = packet.pointerY;
@ -238,6 +236,15 @@ public class NetServer extends Module{
}); });
} }
private float compound(float speed, float drag){
float total = 0f;
for(int i = 0; i < 10; i++){
total *= (1f - drag);
total += speed;
}
return total;
}
/** /**
* Sends a raw byte[] snapshot to a client, splitting up into chunks when needed. * Sends a raw byte[] snapshot to a client, splitting up into chunks when needed.
*/ */

View File

@ -219,6 +219,7 @@ public class World extends Module{
/**Loads up a sector map. This does not call play(), but calls reset().*/ /**Loads up a sector map. This does not call play(), but calls reset().*/
public void loadSector(Sector sector){ public void loadSector(Sector sector){
currentSector = sector; currentSector = sector;
state.mode = sector.missions.peek().getMode();
Timers.mark(); Timers.mark();
Timers.mark(); Timers.mark();

View File

@ -547,7 +547,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
velocity.add(movement); velocity.add(movement);
} }
float prex = x, prey = y; float prex = x, prey = y;
updateVelocityStatus(mech.drag, 10f); updateVelocityStatus(mech.drag, mech.maxSpeed);
moved = distanceTo(prex, prey) > 0.01f; moved = distanceTo(prex, prey) > 0.01f;
}else{ }else{
velocity.setZero(); velocity.setZero();

View File

@ -4,20 +4,19 @@ import io.anuke.ucore.util.Bundles;
public enum GameMode{ public enum GameMode{
waves, waves,
//disabled for technical reasons sandbox{{
/*sandbox{
{
infiniteResources = true; infiniteResources = true;
disableWaveTimer = true; disableWaveTimer = true;
} }},
},*/ freebuild{{
freebuild{
{
disableWaveTimer = true; disableWaveTimer = true;
} }},
}; noWaves{{
disableWaves = true;
}};
public boolean infiniteResources; public boolean infiniteResources;
public boolean disableWaveTimer; public boolean disableWaveTimer;
public boolean disableWaves;
public String description(){ public String description(){
return Bundles.get("mode." + name() + ".description"); return Bundles.get("mode." + name() + ".description");

View File

@ -2,6 +2,7 @@ package io.anuke.mindustry.maps.missions;
import io.anuke.mindustry.Vars; import io.anuke.mindustry.Vars;
import io.anuke.mindustry.content.blocks.StorageBlocks; import io.anuke.mindustry.content.blocks.StorageBlocks;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.maps.Sector; import io.anuke.mindustry.maps.Sector;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
@ -14,6 +15,11 @@ public class BattleMission implements Mission{
this.difficulty = difficulty; this.difficulty = difficulty;
} }
@Override
public GameMode getMode(){
return GameMode.noWaves;
}
@Override @Override
public String displayString(){ public String displayString(){
return Bundles.get("text.mission.battle"); return Bundles.get("text.mission.battle");

View File

@ -1,11 +1,13 @@
package io.anuke.mindustry.maps.missions; package io.anuke.mindustry.maps.missions;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.maps.Sector; import io.anuke.mindustry.maps.Sector;
import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.Tile;
public interface Mission{ public interface Mission{
boolean isComplete(); boolean isComplete();
String displayString(); String displayString();
GameMode getMode();
default void generate(Tile[][] tiles, Sector sector){} default void generate(Tile[][] tiles, Sector sector){}
} }

View File

@ -1,6 +1,7 @@
package io.anuke.mindustry.maps.missions; package io.anuke.mindustry.maps.missions;
import io.anuke.mindustry.Vars; import io.anuke.mindustry.Vars;
import io.anuke.mindustry.game.GameMode;
import io.anuke.mindustry.type.Item; import io.anuke.mindustry.type.Item;
import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Bundles;
@ -13,6 +14,11 @@ public class ResourceMission implements Mission{
this.amount = amount; this.amount = amount;
} }
@Override
public GameMode getMode(){
return GameMode.waves;
}
@Override @Override
public boolean isComplete(){ public boolean isComplete(){
return Vars.state.teams.getTeams(true).first().cores.first().entity.items.has(item, amount); return Vars.state.teams.getTeams(true).first().cores.first().entity.items.has(item, amount);

View File

@ -1,8 +1,9 @@
package io.anuke.mindustry.maps.missions; package io.anuke.mindustry.maps.missions;
import io.anuke.mindustry.game.GameMode;
import io.anuke.ucore.util.Bundles; import io.anuke.ucore.util.Bundles;
import static io.anuke.mindustry.Vars.*; import static io.anuke.mindustry.Vars.state;
public class WaveMission implements Mission{ public class WaveMission implements Mission{
private final int target; private final int target;
@ -11,6 +12,11 @@ public class WaveMission implements Mission{
this.target = target; this.target = target;
} }
@Override
public GameMode getMode(){
return GameMode.waves;
}
@Override @Override
public String displayString(){ public String displayString(){
return Bundles.format("text.mission.wave", target); return Bundles.format("text.mission.wave", target);

View File

@ -285,6 +285,7 @@ public class HudFragment extends Fragment{
}); });
table.add().growX(); table.add().growX();
table.visible(() -> !state.mode.disableWaves);
playButton(uheight); playButton(uheight);
} }