mirror of
https://github.com/Anuken/Mindustry.git
synced 2025-07-13 01:07:30 +07:00
Added Placement Preview
This commit is contained in:
@ -270,6 +270,7 @@ setting.multithread.name=Multithreading
|
|||||||
setting.fps.name=Show FPS
|
setting.fps.name=Show FPS
|
||||||
setting.vsync.name=VSync
|
setting.vsync.name=VSync
|
||||||
setting.lasers.name=Show Power Lasers
|
setting.lasers.name=Show Power Lasers
|
||||||
|
setting.previewopacity.name = Placing Preview Opacity
|
||||||
setting.healthbars.name=Show Entity Health bars
|
setting.healthbars.name=Show Entity Health bars
|
||||||
setting.pixelate.name=Pixelate Screen
|
setting.pixelate.name=Pixelate Screen
|
||||||
setting.musicvol.name=Music Volume
|
setting.musicvol.name=Music Volume
|
||||||
|
@ -12,12 +12,16 @@ import io.anuke.mindustry.world.Layer;
|
|||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.Blocks;
|
import io.anuke.mindustry.world.blocks.Blocks;
|
||||||
import io.anuke.mindustry.world.blocks.types.StaticBlock;
|
import io.anuke.mindustry.world.blocks.types.StaticBlock;
|
||||||
|
import io.anuke.mindustry.world.blocks.types.defense.Turret;
|
||||||
|
import io.anuke.mindustry.world.blocks.types.production.Drill;
|
||||||
|
import io.anuke.mindustry.world.blocks.types.production.Pump;
|
||||||
import io.anuke.ucore.core.Core;
|
import io.anuke.ucore.core.Core;
|
||||||
import io.anuke.ucore.core.Graphics;
|
import io.anuke.ucore.core.Graphics;
|
||||||
import io.anuke.ucore.graphics.CacheBatch;
|
import io.anuke.ucore.graphics.CacheBatch;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
import io.anuke.ucore.util.Mathf;
|
import io.anuke.ucore.util.Mathf;
|
||||||
|
import io.anuke.ucore.core.*;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
@ -280,4 +284,42 @@ public class BlockRenderer{
|
|||||||
cbatch.dispose();
|
cbatch.dispose();
|
||||||
cbatch = new CacheBatch(world.width() * world.height() * 4);
|
cbatch = new CacheBatch(world.width() * world.height() * 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void drawPreview(Block block, float drawx, float drawy, float rotation, float opacity) {
|
||||||
|
Draw.reset();
|
||||||
|
Draw.alpha(opacity);
|
||||||
|
Draw.rect(block.name(), drawx, drawy, rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handlePreview(Block block, float rotation, float drawx, float drawy, int tilex, int tiley) {
|
||||||
|
|
||||||
|
if(control.input().recipe != null && state.inventory.hasItems(control.input().recipe.requirements)
|
||||||
|
&& control.input().validPlace(tilex, tiley, block) && (android || control.input().cursorNear())) {
|
||||||
|
|
||||||
|
float opacity = (float)Settings.getInt("previewopacity")/100f;
|
||||||
|
|
||||||
|
if(block.isMultiblock()) {
|
||||||
|
if((tiley - control.input().getBlockY()) % block.height != 0
|
||||||
|
|| (tilex - control.input().getBlockX()) % block.width != 0) return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(block instanceof Turret) {
|
||||||
|
Draw.alpha(opacity);
|
||||||
|
if (block.isMultiblock()) {
|
||||||
|
Draw.rect("block-" + block.width + "x" + block.height, drawx, drawy);
|
||||||
|
} else {
|
||||||
|
Draw.rect("block", drawx, drawy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
drawPreview(block, drawx, drawy, rotation, opacity);
|
||||||
|
|
||||||
|
Tile tile = world.tile(tilex, tiley);
|
||||||
|
if((block instanceof Drill || block instanceof Pump) && block.isLayer(tile)) {
|
||||||
|
block.drawLayer(tile);
|
||||||
|
}
|
||||||
|
|
||||||
|
Draw.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -7,6 +7,7 @@ import com.badlogic.gdx.math.Vector2;
|
|||||||
import io.anuke.mindustry.ui.fragments.ToolFragment;
|
import io.anuke.mindustry.ui.fragments.ToolFragment;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.blocks.types.production.Drill;
|
||||||
import io.anuke.ucore.core.Timers;
|
import io.anuke.ucore.core.Timers;
|
||||||
import io.anuke.ucore.graphics.Draw;
|
import io.anuke.ucore.graphics.Draw;
|
||||||
import io.anuke.ucore.graphics.Lines;
|
import io.anuke.ucore.graphics.Lines;
|
||||||
@ -40,11 +41,14 @@ public enum PlaceMode{
|
|||||||
tilesize * control.input().recipe.result.height + si);
|
tilesize * control.input().recipe.result.height + si);
|
||||||
|
|
||||||
control.input().recipe.result.drawPlace(tilex, tiley, control.input().rotation, valid);
|
control.input().recipe.result.drawPlace(tilex, tiley, control.input().rotation, valid);
|
||||||
Lines.stroke(2f);
|
|
||||||
|
renderer.getBlocks().handlePreview(control.input().recipe.result, control.input().recipe.result.rotate ? control.input().rotation * 90 : 0f, x + offset.x, y + offset.y, tilex, tiley);
|
||||||
|
|
||||||
if(control.input().recipe.result.rotate){
|
if(control.input().recipe.result.rotate){
|
||||||
|
|
||||||
Draw.color(Colors.get("placeRotate"));
|
Draw.color(Colors.get("placeRotate"));
|
||||||
tr.trns(control.input().rotation * 90, 7, 0);
|
tr.trns(control.input().rotation * 90, 7, 0);
|
||||||
|
Lines.stroke(2f);
|
||||||
Lines.line(x, y, x + tr.x, y + tr.y);
|
Lines.line(x, y, x + tr.x, y + tr.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,16 +285,19 @@ public enum PlaceMode{
|
|||||||
int px = tx + cx * Mathf.sign(ex - tx),
|
int px = tx + cx * Mathf.sign(ex - tx),
|
||||||
py = ty + cy * Mathf.sign(ey - ty);
|
py = ty + cy * Mathf.sign(ey - ty);
|
||||||
|
|
||||||
|
renderer.getBlocks().handlePreview(control.input().recipe.result, control.input().recipe.result.rotate ? rotation * 90 : 0f, px * t + offset.x, py * t + offset.y, px, py);
|
||||||
|
|
||||||
if(!control.input().validPlace(px, py, control.input().recipe.result)
|
if(!control.input().validPlace(px, py, control.input().recipe.result)
|
||||||
|| !state.inventory.hasItems(control.input().recipe.requirements, amount)){
|
|| !state.inventory.hasItems(control.input().recipe.requirements, amount))
|
||||||
Lines.crect(px * t + offset.x, py * t + offset.y, t*block.width, t*block.height);
|
Lines.crect(px * t + offset.x, py * t + offset.y, t*block.width, t*block.height);
|
||||||
}
|
|
||||||
amount ++;
|
amount ++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(control.input().recipe.result.rotate){
|
if(control.input().recipe.result.rotate){
|
||||||
float cx = tx * t, cy = ty * t;
|
float cx = tx * t, cy = ty * t;
|
||||||
|
Lines.stroke(2f);
|
||||||
Draw.color(Colors.get("placeRotate"));
|
Draw.color(Colors.get("placeRotate"));
|
||||||
tr.trns(rotation * 90, 7, 0);
|
tr.trns(rotation * 90, 7, 0);
|
||||||
Lines.line(cx, cy, cx + tr.x, cy + tr.y);
|
Lines.line(cx, cy, cx + tr.x, cy + tr.y);
|
||||||
|
@ -139,6 +139,7 @@ public class SettingsMenuDialog extends SettingsDialog{
|
|||||||
|
|
||||||
graphics.checkPref("fps", false);
|
graphics.checkPref("fps", false);
|
||||||
graphics.checkPref("lasers", true);
|
graphics.checkPref("lasers", true);
|
||||||
|
graphics.sliderPref("previewopacity", 50, 0, 100, i -> i + "%");
|
||||||
graphics.checkPref("indicators", true);
|
graphics.checkPref("indicators", true);
|
||||||
graphics.checkPref("healthbars", true);
|
graphics.checkPref("healthbars", true);
|
||||||
graphics.checkPref("pixelate", true, b -> {
|
graphics.checkPref("pixelate", true, b -> {
|
||||||
|
Reference in New Issue
Block a user