New menu background, unfinished
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 143 B |
Binary file not shown.
|
Before Width: | Height: | Size: 154 B |
@@ -138,6 +138,16 @@
|
|||||||
over: flat-over,
|
over: flat-over,
|
||||||
disabled: flat,
|
disabled: flat,
|
||||||
disabledFontColor: gray
|
disabledFontColor: gray
|
||||||
|
},
|
||||||
|
clear-toggle-menu: {
|
||||||
|
font: default-font,
|
||||||
|
fontColor: white,
|
||||||
|
checked: flat-down,
|
||||||
|
down: flat-down,
|
||||||
|
up: clear,
|
||||||
|
over: flat-over,
|
||||||
|
disabled: flat,
|
||||||
|
disabledFontColor: gray
|
||||||
}
|
}
|
||||||
toggle: {
|
toggle: {
|
||||||
font: default-font,
|
font: default-font,
|
||||||
|
|||||||
@@ -1,43 +1,74 @@
|
|||||||
package io.anuke.mindustry.graphics;
|
package io.anuke.mindustry.graphics;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.Core;
|
||||||
import io.anuke.arc.graphics.Camera;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.glutils.FrameBuffer;
|
import io.anuke.arc.graphics.glutils.FrameBuffer;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Matrix3;
|
||||||
import io.anuke.arc.util.Disposable;
|
import io.anuke.arc.util.*;
|
||||||
|
import io.anuke.arc.util.noise.Simplex;
|
||||||
import io.anuke.mindustry.content.Blocks;
|
import io.anuke.mindustry.content.Blocks;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
import static io.anuke.mindustry.Vars.world;
|
|
||||||
|
|
||||||
public class MenuRenderer implements Disposable{
|
public class MenuRenderer implements Disposable{
|
||||||
private static final int width = 30, height = 30;
|
private static final int width = 100, height = 50;
|
||||||
|
private static final float darkness = 0.1f;
|
||||||
|
|
||||||
private int cacheFloor, cacheWall;
|
private int cacheFloor, cacheWall;
|
||||||
private Camera camera = new Camera();
|
private Camera camera = new Camera();
|
||||||
|
private Matrix3 mat = new Matrix3();
|
||||||
private FrameBuffer shadows;
|
private FrameBuffer shadows;
|
||||||
private CacheBatch batch;
|
private CacheBatch batch;
|
||||||
|
|
||||||
public MenuRenderer(){
|
public MenuRenderer(){
|
||||||
|
Time.mark();
|
||||||
generate();
|
generate();
|
||||||
cache();
|
cache();
|
||||||
|
Log.info("Time to generate menu: {0}", Time.elapsed());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generate(){
|
private void generate(){
|
||||||
Tile[][] tiles = world.createTiles(width, height);
|
Tile[][] tiles = world.createTiles(width, height);
|
||||||
shadows = new FrameBuffer(width, height);
|
shadows = new FrameBuffer(width, height);
|
||||||
|
Simplex s1 = new Simplex(0);
|
||||||
|
Simplex s2 = new Simplex(1);
|
||||||
|
Simplex s3 = new Simplex(2);
|
||||||
|
|
||||||
for(int x = 0; x < width; x++){
|
for(int x = 0; x < width; x++){
|
||||||
for(int y = 0; y < height; y++){
|
for(int y = 0; y < height; y++){
|
||||||
Block floor = Blocks.metalFloor;
|
Block floor = Blocks.shale;
|
||||||
Block ore = Blocks.oreCopper;
|
Block ore = Blocks.air;
|
||||||
Block wall = Mathf.chance(0.5) ? Blocks.air : Blocks.darkMetal;
|
Block wall = Blocks.air;
|
||||||
|
|
||||||
tiles[x][y] = new Tile(x, y, floor.id, ore.id, wall.id);
|
if(s1.octaveNoise2D(3, 0.5, 1/10.0, x, y) > 0.5){
|
||||||
|
wall = Blocks.shaleRocks;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(s3.octaveNoise2D(3, 0.5, 1/10.0, x, y) > 0.5){
|
||||||
|
floor = Blocks.stone;
|
||||||
|
if(wall != Blocks.air){
|
||||||
|
wall = Blocks.rocks;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(s2.octaveNoise2D(3, 0.3, 1/30.0, x, y) > 0.5){
|
||||||
|
ore = Blocks.oreCopper;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(s2.octaveNoise2D(3, 0.3, 1/15.0, x, y+999999) > 0.7){
|
||||||
|
ore = Blocks.oreLead;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tile tile;
|
||||||
|
tiles[x][y] = (tile = new CachedTile());
|
||||||
|
tile.x = (short)x;
|
||||||
|
tile.y = (short)y;
|
||||||
|
tile.setFloor((Floor) floor);
|
||||||
|
tile.setBlock(wall);
|
||||||
|
tile.setOverlay(ore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -47,6 +78,7 @@ public class MenuRenderer implements Disposable{
|
|||||||
//draw shadows
|
//draw shadows
|
||||||
Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
|
Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
|
||||||
shadows.beginDraw(Color.CLEAR);
|
shadows.beginDraw(Color.CLEAR);
|
||||||
|
Draw.color(Color.BLACK);
|
||||||
for(int x = 0; x < width; x++){
|
for(int x = 0; x < width; x++){
|
||||||
for(int y = 0; y < height; y++){
|
for(int y = 0; y < height; y++){
|
||||||
if(world.rawTile(x, y).block() != Blocks.air){
|
if(world.rawTile(x, y).block() != Blocks.air){
|
||||||
@@ -54,13 +86,13 @@ public class MenuRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Draw.color();
|
||||||
shadows.endDraw();
|
shadows.endDraw();
|
||||||
|
|
||||||
batch = new CacheBatch(new SpriteCache(width * height * 5, true));
|
|
||||||
batch.beginCache();
|
|
||||||
|
|
||||||
SpriteBatch prev = Core.batch;
|
SpriteBatch prev = Core.batch;
|
||||||
Core.batch = batch;
|
|
||||||
|
Core.batch = batch = new CacheBatch(new SpriteCache(width * height * 6, false));
|
||||||
|
batch.beginCache();
|
||||||
|
|
||||||
for(int x = 0; x < width; x++){
|
for(int x = 0; x < width; x++){
|
||||||
for(int y = 0; y < height; y++){
|
for(int y = 0; y < height; y++){
|
||||||
@@ -90,25 +122,38 @@ public class MenuRenderer implements Disposable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Draw.rect("error", world.width() * tilesize/2f, world.height() * tilesize/2f, 100f, 100f);
|
||||||
|
|
||||||
cacheWall = batch.endCache();
|
cacheWall = batch.endCache();
|
||||||
|
|
||||||
Core.batch = prev;
|
Core.batch = prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void render(){
|
public void render(){
|
||||||
camera.position.set(Core.graphics.getWidth()/2f, Core.graphics.getHeight()/2f);
|
float scaling = 4f;
|
||||||
camera.resize(Core.graphics.getWidth(), Core.graphics.getHeight());
|
camera.position.set(width * tilesize/2f, height * tilesize/2f);
|
||||||
|
camera.resize(Core.graphics.getWidth() / scaling,
|
||||||
|
Core.graphics.getHeight() /scaling);
|
||||||
|
|
||||||
|
mat.set(Draw.proj());
|
||||||
Draw.flush();
|
Draw.flush();
|
||||||
|
Draw.proj(camera.projection());
|
||||||
batch.setProjection(camera.projection());
|
batch.setProjection(camera.projection());
|
||||||
batch.beginDraw();
|
batch.beginDraw();
|
||||||
batch.drawCache(cacheFloor);
|
batch.drawCache(cacheFloor);
|
||||||
batch.endDraw();
|
batch.endDraw();
|
||||||
Draw.rect(Draw.wrap(shadows.getTexture()), width * tilesize/2f, height * tilesize/2f, width * tilesize, height * tilesize);
|
Draw.rect(Draw.wrap(shadows.getTexture()),
|
||||||
|
width * tilesize/2f - 4f, height * tilesize/2f - 4f,
|
||||||
|
width * tilesize, -height * tilesize);
|
||||||
Draw.flush();
|
Draw.flush();
|
||||||
batch.beginDraw();
|
batch.beginDraw();
|
||||||
batch.drawCache(cacheWall);
|
batch.drawCache(cacheWall);
|
||||||
batch.endDraw();
|
batch.endDraw();
|
||||||
|
|
||||||
|
Draw.proj(mat);
|
||||||
|
Draw.color(0f, 0f, 0f, darkness);
|
||||||
|
Fill.crect(0, 0, Core.graphics.getWidth(), Core.graphics.getHeight());
|
||||||
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import io.anuke.arc.Core;
|
|||||||
import io.anuke.arc.Events;
|
import io.anuke.arc.Events;
|
||||||
import io.anuke.arc.graphics.Texture;
|
import io.anuke.arc.graphics.Texture;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.graphics.g2d.Draw;
|
||||||
import io.anuke.arc.scene.Group;
|
import io.anuke.arc.scene.*;
|
||||||
import io.anuke.arc.scene.event.Touchable;
|
import io.anuke.arc.scene.event.Touchable;
|
||||||
import io.anuke.arc.scene.ui.Button;
|
import io.anuke.arc.scene.ui.Button;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.arc.scene.ui.layout.Table;
|
||||||
@@ -24,10 +24,11 @@ public class MenuFragment extends Fragment{
|
|||||||
private Texture logo = new Texture("sprites/logo.png");
|
private Texture logo = new Texture("sprites/logo.png");
|
||||||
private Table container, submenu;
|
private Table container, submenu;
|
||||||
private Button currentMenu;
|
private Button currentMenu;
|
||||||
private MenuRenderer renderer = new MenuRenderer();
|
private MenuRenderer renderer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(Group parent){
|
public void build(Group parent){
|
||||||
|
renderer = new MenuRenderer();
|
||||||
|
|
||||||
Core.scene.table().addRect((a, b, w, h) -> {
|
Core.scene.table().addRect((a, b, w, h) -> {
|
||||||
renderer.render();
|
renderer.render();
|
||||||
@@ -39,6 +40,7 @@ public class MenuFragment extends Fragment{
|
|||||||
|
|
||||||
if(!mobile){
|
if(!mobile){
|
||||||
buildDesktop();
|
buildDesktop();
|
||||||
|
Events.on(ResizeEvent.class, event -> buildDesktop());
|
||||||
}else{
|
}else{
|
||||||
buildMobile();
|
buildMobile();
|
||||||
Events.on(ResizeEvent.class, event -> buildMobile());
|
Events.on(ResizeEvent.class, event -> buildMobile());
|
||||||
@@ -67,11 +69,11 @@ public class MenuFragment extends Fragment{
|
|||||||
|
|
||||||
boolean portrait = Core.graphics.getWidth() < Core.graphics.getHeight();
|
boolean portrait = Core.graphics.getWidth() < Core.graphics.getHeight();
|
||||||
float logoscl = (int)Unit.dp.scl(1);
|
float logoscl = (int)Unit.dp.scl(1);
|
||||||
float logow = Math.min(logo.getWidth() * logoscl, 768);
|
float logow = Math.min(Math.min(logo.getWidth() * logoscl, 768), Core.graphics.getWidth() - 10);
|
||||||
float logoh = logow * (float)logo.getHeight() / logo.getWidth();
|
float logoh = logow * (float)logo.getHeight() / logo.getWidth();
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
Draw.rect(Draw.wrap(logo), (int)(w / 2), (int)(h - 10 - logoh - Unit.dp.scl(portrait ? 30f : 0)) + logoh / 2, logow, logoh);
|
Draw.rect(Draw.wrap(logo), (int)(w / 2), (int)(h - 10 - logoh) + logoh / 2, logow, logoh);
|
||||||
}).visible(() -> state.is(State.menu)).grow().get().touchable(Touchable.disabled);
|
}).visible(() -> state.is(State.menu)).grow().get().touchable(Touchable.disabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,10 +132,15 @@ public class MenuFragment extends Fragment{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void buildDesktop(){
|
private void buildDesktop(){
|
||||||
|
container.clear();
|
||||||
|
container.setSize(Core.graphics.getWidth(), Core.graphics.getHeight());
|
||||||
|
|
||||||
|
|
||||||
float width = 230f;
|
float width = 230f;
|
||||||
String background = "dialogDim";
|
String background = "flat";
|
||||||
|
|
||||||
container.left();
|
container.left();
|
||||||
|
container.add().width(Core.graphics.getWidth()/10f);
|
||||||
container.table(background, t -> {
|
container.table(background, t -> {
|
||||||
t.defaults().width(width).height(70f);
|
t.defaults().width(width).height(70f);
|
||||||
|
|
||||||
@@ -208,7 +215,7 @@ public class MenuFragment extends Fragment{
|
|||||||
private void buttons(Table t, Buttoni... buttons){
|
private void buttons(Table t, Buttoni... buttons){
|
||||||
for(Buttoni b : buttons){
|
for(Buttoni b : buttons){
|
||||||
Button[] out = {null};
|
Button[] out = {null};
|
||||||
out[0] = t.addImageTextButton(b.text, b.icon + "-small", "clear-toggle",
|
out[0] = t.addImageTextButton(b.text, b.icon + "-small", "clear-toggle-menu",
|
||||||
iconsizesmall, () -> {
|
iconsizesmall, () -> {
|
||||||
if(currentMenu == out[0]){
|
if(currentMenu == out[0]){
|
||||||
currentMenu = null;
|
currentMenu = null;
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
package io.anuke.mindustry.world.blocks;
|
package io.anuke.mindustry.world.blocks;
|
||||||
|
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.Core;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.g2d.TextureRegion;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.mindustry.graphics.CacheLayer;
|
import io.anuke.mindustry.graphics.CacheLayer;
|
||||||
import io.anuke.mindustry.world.Pos;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
import static io.anuke.mindustry.Vars.world;
|
|
||||||
|
|
||||||
public class StaticWall extends Rock{
|
public class StaticWall extends Rock{
|
||||||
TextureRegion large;
|
TextureRegion large;
|
||||||
|
|||||||
Reference in New Issue
Block a user