mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-02-22 04:28:27 +07:00
Fixed shaky camera, many other small bugs
This commit is contained in:
parent
fae7bfa8c5
commit
857b76980b
@ -146,19 +146,9 @@ public class Renderer extends RendererModule{
|
||||
if(state.is(State.menu)){
|
||||
Graphics.clear(Color.BLACK);
|
||||
}else{
|
||||
boolean smoothcam = Settings.getBool("smoothcam");
|
||||
|
||||
Vector2 position = averagePosition();
|
||||
|
||||
if(!smoothcam){
|
||||
setCamera(position.x, position.y);
|
||||
}else{
|
||||
smoothCamera(position.x, position.y, mobile ? 0.3f : 0.14f);
|
||||
}
|
||||
|
||||
if(Settings.getBool("pixelate") && players.length == 1) {
|
||||
limitCamera(4f, position.x, position.y);
|
||||
}
|
||||
setCamera(position.x, position.y);
|
||||
|
||||
float prex = camera.position.x, prey = camera.position.y;
|
||||
updateShake(0.75f);
|
||||
@ -168,7 +158,7 @@ public class Renderer extends RendererModule{
|
||||
|
||||
float lastx = camera.position.x, lasty = camera.position.y;
|
||||
|
||||
if(snapCamera && smoothcam && Settings.getBool("pixelate")){
|
||||
if(snapCamera){
|
||||
camera.position.set((int) camera.position.x, (int) camera.position.y, 0);
|
||||
}
|
||||
|
||||
@ -259,7 +249,7 @@ public class Renderer extends RendererModule{
|
||||
Shaders.outline.color.set(team.color);
|
||||
|
||||
Graphics.beginShaders(Shaders.outline);
|
||||
Graphics.shader(Shaders.mix, false);
|
||||
Graphics.shader(Shaders.mix, true);
|
||||
Entities.draw(unitGroups[team.ordinal()], u -> u.isFlying() == flying);
|
||||
Entities.draw(playerGroup, p -> p.isFlying() == flying && p.team == team);
|
||||
Graphics.shader();
|
||||
|
@ -145,7 +145,7 @@ public class Player extends Unit implements BlockBuilder {
|
||||
public void drawSmooth(){
|
||||
if((debug && (!showPlayer || !showUI)) || dead) return;
|
||||
|
||||
boolean snap = snapCamera && Settings.getBool("smoothcam") && Settings.getBool("pixelate") && isLocal;
|
||||
boolean snap = snapCamera && isLocal;
|
||||
|
||||
String mname = mech.name;
|
||||
|
||||
@ -407,6 +407,16 @@ public class Player extends Unit implements BlockBuilder {
|
||||
rotation = Mathf.slerpDelta(rotation, targetAngle, 0.1f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player set(float x, float y){
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
if(mobile && !isLocal){
|
||||
Core.camera.position.set(x, y, 0f);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsAmmo(Item item) {
|
||||
return weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(weapon.getAmmoType(item));
|
||||
|
@ -4,6 +4,8 @@ import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.ObjectMap;
|
||||
import com.badlogic.gdx.utils.ObjectMap.Entry;
|
||||
import com.badlogic.gdx.utils.ObjectSet;
|
||||
import io.anuke.mindustry.game.EventType.UnlockEvent;
|
||||
import io.anuke.ucore.core.Events;
|
||||
import io.anuke.ucore.core.Settings;
|
||||
|
||||
public class ContentDatabase {
|
||||
@ -29,9 +31,18 @@ public class ContentDatabase {
|
||||
unlocked.put(content.getContentTypeName(), new ObjectSet<>());
|
||||
}
|
||||
|
||||
return unlocked.get(content.getContentTypeName()).add(content.getContentName());
|
||||
boolean ret = unlocked.get(content.getContentTypeName()).add(content.getContentName());
|
||||
|
||||
//fire unlock event so other classes can use it
|
||||
if(ret){
|
||||
Events.fire(UnlockEvent.class, content);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
//saving/loading currently disabled for testing.
|
||||
|
||||
private void load(){
|
||||
ObjectMap<String, Array<String>> result = Settings.getJson("content-database", ObjectMap.class);
|
||||
|
||||
|
@ -37,4 +37,9 @@ public class EventType {
|
||||
public interface StateChangeEvent extends Event{
|
||||
void handle(State from, State to);
|
||||
}
|
||||
|
||||
public interface UnlockEvent extends Event{
|
||||
void handle(Content content);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,7 +151,7 @@ public class OverlayRenderer {
|
||||
float x = unit.getDrawPosition().x;
|
||||
float y = unit.getDrawPosition().y;
|
||||
|
||||
if(unit == players[0] && players.length == 1 && snapCamera && Settings.getBool("smoothcam") && Settings.getBool("pixelate")) {
|
||||
if(unit == players[0] && players.length == 1 && snapCamera) {
|
||||
x = (int)x;
|
||||
y = (int)y;
|
||||
}
|
||||
|
@ -19,8 +19,6 @@ import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
|
||||
import io.anuke.mindustry.type.Recipe;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.types.BuildBlock;
|
||||
import io.anuke.mindustry.world.blocks.types.BuildBlock.BuildEntity;
|
||||
import io.anuke.ucore.core.Core;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Graphics;
|
||||
@ -267,14 +265,9 @@ public class AndroidInput extends InputHandler implements GestureListener{
|
||||
//only begin selecting if the tapped block is a request
|
||||
selecting = hasRequest(cursor) && isPlacing();
|
||||
|
||||
Tile linked = cursor.target();
|
||||
|
||||
//when tapping a build block, select it
|
||||
if(linked.block() instanceof BuildBlock){
|
||||
BuildEntity entity = linked.entity();
|
||||
player.replaceBuilding(linked.x, linked.y, linked.getRotation(), entity.recipe);
|
||||
}else if(pointer == 0 && !selecting){
|
||||
tileTapped(cursor);
|
||||
//call tap events
|
||||
if(pointer == 0 && !selecting){
|
||||
tileTapped(cursor.target());
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -145,7 +145,7 @@ public class DesktopInput extends InputHandler{
|
||||
|
||||
Tile cursor = tileAt(control.gdxInput().getX(), control.gdxInput().getY());
|
||||
|
||||
if(cursor != null && cursor.block().isConfigurable(cursor)){
|
||||
if(cursor != null && cursor.target().block().isCursor(cursor.target())){
|
||||
handCursor = true;
|
||||
}
|
||||
|
||||
@ -165,7 +165,6 @@ public class DesktopInput extends InputHandler{
|
||||
if(player.isDead() || state.is(State.menu) || ui.hasDialog()) return false;
|
||||
|
||||
Tile cursor = tileAt(screenX, screenY);
|
||||
|
||||
if(cursor == null) return false;
|
||||
|
||||
if(button == Buttons.LEFT) { //left = begin placing
|
||||
@ -174,7 +173,10 @@ public class DesktopInput extends InputHandler{
|
||||
selectY = cursor.y;
|
||||
mode = placing;
|
||||
} else {
|
||||
tileTapped(cursor);
|
||||
//only begin shooting if there's no cursor event
|
||||
if(!tileTapped(cursor) && player.getPlaceQueue().size == 0){
|
||||
shooting = true;
|
||||
}
|
||||
}
|
||||
}else if(button == Buttons.RIGHT){ //right = begin breaking
|
||||
selectX = cursor.x;
|
||||
@ -190,6 +192,10 @@ public class DesktopInput extends InputHandler{
|
||||
|
||||
@Override
|
||||
public boolean touchUp (int screenX, int screenY, int pointer, int button) {
|
||||
if(button == Buttons.LEFT){
|
||||
shooting = false;
|
||||
}
|
||||
|
||||
if(player.isDead() || state.is(State.menu) || ui.hasDialog()) return false;
|
||||
|
||||
Tile cursor = tileAt(screenX, screenY);
|
||||
@ -199,7 +205,6 @@ public class DesktopInput extends InputHandler{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
if(mode == placing){ //touch up while placing, place everything in selection
|
||||
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursor.x, cursor.y, rotation, true, maxLength);
|
||||
|
||||
|
@ -82,10 +82,14 @@ public abstract class InputHandler extends InputAdapter{
|
||||
}
|
||||
|
||||
/**Handles tile tap events that are not platform specific.*/
|
||||
public void tileTapped(Tile tile){
|
||||
public boolean tileTapped(Tile tile){
|
||||
tile = tile.target();
|
||||
|
||||
boolean consumed = false;
|
||||
|
||||
//check if tapped block is configurable
|
||||
if(tile.block().isConfigurable(tile)){
|
||||
consumed = true;
|
||||
if((!frag.config.isShown() //if the config fragment is hidden, show
|
||||
//alternatively, the current selected block can 'agree' to switch config tiles
|
||||
|| frag.config.getSelectedTile().block().onConfigureTileTapped(frag.config.getSelectedTile(), tile))) {
|
||||
@ -95,13 +99,18 @@ public abstract class InputHandler extends InputAdapter{
|
||||
}else if(!frag.config.hasConfigMouse()){ //make sure a configuration fragment isn't on the cursor
|
||||
//then, if it's shown and the current block 'agrees' to hide, hide it.
|
||||
if(frag.config.isShown() && frag.config.getSelectedTile().block().onConfigureTileTapped(frag.config.getSelectedTile(), tile)) {
|
||||
consumed = true;
|
||||
frag.config.hideConfig();
|
||||
}
|
||||
}
|
||||
|
||||
//TODO network event!
|
||||
//call tapped event
|
||||
tile.block().tapped(tile, player);
|
||||
if(tile.block().tapped(tile, player)){
|
||||
consumed = true;
|
||||
}
|
||||
|
||||
return consumed;
|
||||
}
|
||||
|
||||
//utility methods
|
||||
|
@ -102,6 +102,7 @@ public class BlocksFragment implements Fragment{
|
||||
}}.end();
|
||||
}
|
||||
|
||||
/**Rebuilds the whole placement menu, attempting to preserve previous state.*/
|
||||
void rebuild(){
|
||||
selectTable.clear();
|
||||
|
||||
|
@ -158,7 +158,14 @@ public class Block extends BaseBlock implements Content{
|
||||
public void load(){}
|
||||
|
||||
/**Called when the block is tapped.*/
|
||||
public void tapped(Tile tile, Player player){}
|
||||
public boolean tapped(Tile tile, Player player){
|
||||
return false;
|
||||
}
|
||||
|
||||
/**Returns whether or not a hand cursor should be shown over this block.*/
|
||||
public boolean isCursor(Tile tile){
|
||||
return isConfigurable(tile);
|
||||
}
|
||||
|
||||
/**Called when this block is tapped to build a UI on the table.
|
||||
* {@link #isConfigurable(Tile)} able} must return true for this to be called.*/
|
||||
|
@ -34,11 +34,18 @@ public class BuildBlock extends Block {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tapped(Tile tile, Player player) {
|
||||
public boolean tapped(Tile tile, Player player) {
|
||||
BuildEntity entity = tile.entity();
|
||||
|
||||
player.clearBuilding();
|
||||
player.addBuildRequest(new BuildRequest(tile.x, tile.y, tile.getRotation(), entity.recipe));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCursor(Tile tile) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -40,6 +40,11 @@ public class Door extends Wall{
|
||||
Draw.rect(name + "-open", tile.drawx(), tile.drawy());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCursor(Tile tile){
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSolidFor(Tile tile){
|
||||
@ -48,11 +53,11 @@ public class Door extends Wall{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tapped(Tile tile, Player player){
|
||||
public boolean tapped(Tile tile, Player player){
|
||||
DoorEntity entity = tile.entity();
|
||||
|
||||
if(anyEntities(tile) && entity.open){
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
entity.open = !entity.open;
|
||||
@ -61,6 +66,8 @@ public class Door extends Wall{
|
||||
}else{
|
||||
Effects.effect(openfx, tile.drawx(), tile.drawy());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean anyEntities(Tile tile){
|
||||
|
Loading…
Reference in New Issue
Block a user