Tar shader / Spritesheet split / Font cleanup

This commit is contained in:
Anuken
2019-03-10 11:11:16 -04:00
parent f861b75c7d
commit 1feb4a5e6d
33 changed files with 4717 additions and 2975 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,8 @@
{
duplicatePadding: true,
combineSubdirectories: true,
flattenPaths: true,
maxWidth: 2048,
maxHeight: 2048,
fast: true,
}

Before

Width:  |  Height:  |  Size: 195 B

After

Width:  |  Height:  |  Size: 195 B

Before

Width:  |  Height:  |  Size: 578 B

After

Width:  |  Height:  |  Size: 578 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

@@ -0,0 +1,8 @@
{
duplicatePadding: true,
combineSubdirectories: true,
flattenPaths: true,
maxWidth: 2048,
maxHeight: 2048,
fast: true,
}
+79
View File
@@ -0,0 +1,79 @@
#ifdef GL_ES
precision highp float;
precision mediump int;
#endif
#define s1 vec4(63.0, 63.0, 63.0, 255.0) / 255.0
uniform sampler2D u_texture;
uniform vec2 camerapos;
uniform vec2 screensize;
uniform float time;
varying vec4 v_color;
varying vec2 v_texCoord;
vec3 permute(vec3 x) { return mod(((x*34.0)+1.0)*x, 289.0); }
float snoise(vec2 v){
const vec4 C = vec4(0.211324865405187, 0.366025403784439,
-0.577350269189626, 0.024390243902439);
vec2 i = floor(v + dot(v, C.yy) );
vec2 x0 = v - i + dot(i, C.xx);
vec2 i1;
i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);
vec4 x12 = x0.xyxy + C.xxzz;
x12.xy -= i1;
i = mod(i, 289.0);
vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))
+ i.x + vec3(0.0, i1.x, 1.0 ));
vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy),
dot(x12.zw,x12.zw)), 0.0);
m = m*m ;
m = m*m ;
vec3 x = 2.0 * fract(p * C.www) - 1.0;
vec3 h = abs(x) - 0.5;
vec3 ox = floor(x + 0.5);
vec3 a0 = x - ox;
m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );
vec3 g;
g.x = a0.x * x0.x + h.x * x0.y;
g.yz = a0.yz * x12.xz + h.yz * x12.yw;
return 130.0 * dot(m, g);
}
void main() {
vec2 c = v_texCoord.xy;
vec4 color = texture2D(u_texture, c);
vec2 v = vec2(1.0/screensize.x, 1.0/screensize.y);
vec2 coords = vec2(c.x / v.x + camerapos.x, c.y / v.y + camerapos.y);
float stime = time / 5.0;
float mscl = 30.0;
float mth = 5.0;
vec4 old = color;
color = texture2D(u_texture, c + vec2(sin(stime/3.0 + coords.y/0.75) * v.x, 0.0)) * vec4(0.9, 0.9, 1, 1.0);
color.a = 1.0;
if(color.r < 0.01){
color = old;
}
float n1 = snoise(coords / 22.0 + vec2(-time) / 540.0);
float n2 = snoise((coords + vec2(632.0)) / 8.0 + vec2(0.0, time) / 510.0);
float r = (n1 + n2) / 2.0;
if(r < -0.3 && r > -0.6){
color *= 1.4;
color.a = 1.0;
}
gl_FragColor = color;
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 509 B

File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

@@ -36,7 +36,7 @@ public class Blocks implements ContentList{
//environment
air, part, spawn, deepwater, water, tar, stone, craters, charr, sand, ice, snow,
holostone, rocks, icerocks, cliffs, pine, whiteTree, whiteTreeDead, sporeCluster,
iceSnow, sandWater, duneRocks, sandRocks, stainedRocks, stainedStone, stainedRocksRed, stainedStoneRed, stainedRocksYellow, stainedStoneYellow, stainedBoulder,
iceSnow, sandWater, duneRocks, sandRocks, stainedRocks, stainedStone, stainedRocksRed, stainedStoneRed, stainedRocksYellow, stainedStoneYellow, stainedBoulder, grass,
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks,
//crafting
@@ -141,7 +141,7 @@ public class Blocks implements ContentList{
variants = 0;
liquidDrop = Liquids.oil;
isLiquid = true;
cacheLayer = CacheLayer.oil;
cacheLayer = CacheLayer.tar;
}};
stone = new Floor("stone"){{
@@ -179,6 +179,10 @@ public class Blocks implements ContentList{
edgeStyle = "blocky";
}};
grass = new Floor("grass"){{
}};
iceSnow = new Floor("ice-snow"){{
variants = 3;
}};
@@ -63,10 +63,11 @@ public class Control implements ApplicationListener{
Draw.scl = 1f / Core.atlas.find("scale_marker").getWidth();
content.initialize(Content::load);
/*
if(Core.atlas.getTextures().size != 1){
throw new IllegalStateException("Atlas must be exactly one texture. " +
"If more textures are used, the map editor will not display them correctly.");
}
}*/
data.load();
-1
View File
@@ -130,7 +130,6 @@ public class UI implements ApplicationListener{
generator = new FreeTypeFontGenerator(Core.files.internal("fonts/font.ttf"));
FreeTypeFontParameter param = new FreeTypeFontParameter();
param.size = (int)(9*2 * Math.max(Unit.dp.scl(1f), 0.5f));
//param.size = (int)(14*2 * Math.max(Unit.dp.scl(1f), 0.5f));
param.shadowColor = Color.DARK_GRAY;
param.shadowOffsetY = 2;
param.incremental = true;
@@ -4,6 +4,7 @@ import io.anuke.arc.Core;
import io.anuke.arc.collection.IntSet;
import io.anuke.arc.collection.IntSet.IntSetIterator;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.Texture;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
@@ -14,7 +15,6 @@ import io.anuke.mindustry.game.Team;
import io.anuke.mindustry.graphics.IndexedRenderer;
import io.anuke.mindustry.maps.MapTileData.DataPosition;
import io.anuke.mindustry.world.Block;
import io.anuke.mindustry.world.Block.Icon;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Vars.tilesize;
@@ -26,9 +26,11 @@ public class MapRenderer implements Disposable{
private IntSet delayedUpdates = new IntSet();
private MapEditor editor;
private int width, height;
private Texture texture;
public MapRenderer(MapEditor editor){
this.editor = editor;
texture = Core.atlas.find("clear-editor").getTexture();
}
public void resize(int width, int height){
@@ -52,7 +54,6 @@ public class MapRenderer implements Disposable{
updateAll();
}
public void draw(float tx, float ty, float tw, float th){
Draw.flush();
@@ -80,7 +81,7 @@ public class MapRenderer implements Disposable{
mesh.getTransformMatrix().setToTranslation(tx, ty).scale(tw / (width * tilesize), th / (height * tilesize));
mesh.setProjectionMatrix(Draw.proj());
mesh.render(Core.atlas.getTextures().first());
mesh.render(texture);
}
}
}
@@ -116,7 +117,7 @@ public class MapRenderer implements Disposable{
int idxDecal = (wx % chunksize) + (wy % chunksize) * chunksize + chunksize * chunksize;
if(bw != 0 && (wall.synthetic() || wall == Blocks.part)){
region = wall.icon(Icon.full) == Core.atlas.find("____") ? Core.atlas.find("clear") : wall.icon(Icon.full);
region = !Core.atlas.isFound(wall.editorIcon()) ? Core.atlas.find("clear-editor") : wall.editorIcon();
if(wall.rotate){
mesh.draw(idxWall, region,
@@ -129,7 +130,7 @@ public class MapRenderer implements Disposable{
region.getWidth() * Draw.scl, region.getHeight() * Draw.scl);
}
}else{
region = floor.variantRegions()[Mathf.randomSeed(idxWall, 0, floor.variantRegions().length-1)];
region = floor.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, floor.editorVariantRegions().length-1)];
mesh.draw(idxWall, region, wx * tilesize, wy * tilesize, 8, 8);
}
@@ -138,13 +139,13 @@ public class MapRenderer implements Disposable{
if(wall.update || wall.destructible){
mesh.setColor(team.color);
region = Core.atlas.find("block-border");
region = Core.atlas.find("block-border-editor");
}else if(!wall.synthetic() && bw != 0){
region = wall.icon(Icon.full) == Core.atlas.find("____") ? Core.atlas.find("clear") : wall.icon(Icon.full);
region = !Core.atlas.isFound(wall.editorIcon()) ? Core.atlas.find("clear-editor") : wall.editorIcon();
offsetX = tilesize/2f - region.getWidth()/2f * Draw.scl;
offsetY = tilesize/2f - region.getHeight()/2f * Draw.scl;
}else{
region = Core.atlas.find("clear");
region = Core.atlas.find("clear-editor");
}
mesh.draw(idxDecal, region,
@@ -3,6 +3,7 @@ package io.anuke.mindustry.graphics;
import io.anuke.arc.Core;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.glutils.Shader;
import static io.anuke.arc.Core.camera;
import static io.anuke.mindustry.Vars.renderer;
@@ -11,31 +12,25 @@ public enum CacheLayer{
water{
@Override
public void begin(){
if(!Core.settings.getBool("animatedwater")) return;
renderer.blocks.floor.endc();
renderer.shieldBuffer.begin();
Core.graphics.clear(Color.CLEAR);
renderer.blocks.floor.beginc();
beginShader();
}
@Override
public void end(){
if(!Core.settings.getBool("animatedwater")) return;
endShader(Shaders.water);
}
},
tar{
@Override
public void begin(){
beginShader();
}
renderer.blocks.floor.endc();
renderer.shieldBuffer.end();
Draw.shader(Shaders.water);
Draw.rect(Draw.wrap(renderer.shieldBuffer.getTexture()), camera.position.x, camera.position.y, camera.width, -camera.height);
Draw.shader();
renderer.blocks.floor.beginc();
@Override
public void end(){
endShader(Shaders.tar);
}
},
lava,
oil,
space,
normal,
walls;
@@ -46,4 +41,26 @@ public enum CacheLayer{
public void end(){
}
void beginShader(){
if(!Core.settings.getBool("animatedwater")) return;
renderer.blocks.floor.endc();
renderer.shieldBuffer.begin();
Core.graphics.clear(Color.CLEAR);
renderer.blocks.floor.beginc();
}
void endShader(Shader shader){
if(!Core.settings.getBool("animatedwater")) return;
renderer.blocks.floor.endc();
renderer.shieldBuffer.end();
Draw.shader(shader);
Draw.rect(Draw.wrap(renderer.shieldBuffer.getTexture()), camera.position.x, camera.position.y, camera.width, -camera.height);
Draw.shader();
renderer.blocks.floor.beginc();
}
}
@@ -14,7 +14,7 @@ public class Shaders{
public static UnitBuild build;
public static FogShader fog;
public static MenuShader menu;
public static SurfaceShader water;
public static SurfaceShader water, tar;
public static void init(){
shadow = new Shadow();
@@ -24,6 +24,7 @@ public class Shaders{
fog = new FogShader();
menu = new MenuShader();
water = new SurfaceShader("water");
tar = new SurfaceShader("tar");
}
public static class MenuShader extends LoadShader{
@@ -75,7 +75,7 @@ public class DeployDialog extends FloatingDialog{
show();
}
});
}).size(200f).get();
}).size(230f).get();
b[0] = button;
String color = "[lightgray]";
+21 -2
View File
@@ -10,6 +10,7 @@ import io.anuke.arc.function.Function;
import io.anuke.arc.graphics.Color;
import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.graphics.g2d.Lines;
import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion;
import io.anuke.arc.graphics.g2d.TextureRegion;
import io.anuke.arc.math.Mathf;
import io.anuke.arc.scene.ui.layout.Table;
@@ -110,8 +111,8 @@ public class Block extends BlockStorage{
protected Array<Tile> tempTiles = new Array<>();
protected TextureRegion[] icons = new TextureRegion[Icon.values().length];
protected TextureRegion[] generatedIcons;
protected TextureRegion[] variantRegions;
protected TextureRegion region;
protected TextureRegion[] variantRegions, editorVariantRegions;
protected TextureRegion region, editorIcon;
public Block(String name){
super(name);
@@ -513,6 +514,24 @@ public class Block extends BlockStorage{
return icons[icon.ordinal()];
}
/**Never use outside of the editor!*/
public TextureRegion editorIcon(){
if(editorIcon == null) editorIcon = Core.atlas.find(name + "-icon-editor");
return editorIcon;
}
/**Never use outside of the editor!*/
public TextureRegion[] editorVariantRegions(){
if(editorVariantRegions == null){
editorVariantRegions = new TextureRegion[variantRegions.length];
for(int i = 0; i < variantRegions.length; i ++){
AtlasRegion region = (AtlasRegion)variantRegions[i];
editorVariantRegions[i] = Core.atlas.find("editor-" + region.name);
}
}
return editorVariantRegions;
}
protected TextureRegion[] generateIcons(){
return new TextureRegion[]{Core.atlas.find(name)};
}
@@ -8,7 +8,6 @@ import io.anuke.arc.graphics.g2d.Draw;
import io.anuke.arc.math.Mathf;
public class Rock extends Block{
protected TextureRegion[] regions;
protected int variants;
public Rock(String name){
@@ -20,17 +19,12 @@ public class Rock extends Block{
@Override
public void draw(Tile tile){
if(variants > 0){
Draw.rect(regions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, regions.length - 1))], tile.worldx(), tile.worldy());
Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy());
}else{
Draw.rect(region, tile.worldx(), tile.worldy());
}
}
@Override
public TextureRegion[] variantRegions(){
return regions;
}
@Override
public TextureRegion[] generateIcons(){
return variants == 0 ? super.generateIcons() : new TextureRegion[]{Core.atlas.find(name + "1")};
@@ -41,10 +35,10 @@ public class Rock extends Block{
super.load();
if(variants > 0){
regions = new TextureRegion[variants];
variantRegions = new TextureRegion[variants];
for(int i = 0; i < variants; i++){
regions[i] = Core.atlas.find(name + (i + 1));
variantRegions[i] = Core.atlas.find(name + (i + 1));
}
}
}
@@ -31,7 +31,7 @@ public class StaticWall extends Rock{
Draw.rect(large, tile.worldx() + tilesize/2f, tile.worldy() + tilesize/2f);
}
}else if(variants > 0){
Draw.rect(regions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, regions.length - 1))], tile.worldx(), tile.worldy());
Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy());
}else{
Draw.rect(region, tile.worldx(), tile.worldy());
}
+1
View File
@@ -11,6 +11,7 @@ import java.awt.image.BufferedImage
def outFolder = "../core/assets-raw/sprites_out/"
def genFolder = "../core/assets-raw/sprites_out/generated/"
def packFile = "../core/assets-raw/sprites/pack.json"
def doAntialias = !project.hasProperty("disableAntialias")
def antialias = {File file ->
+19 -3
View File
@@ -16,6 +16,7 @@ import io.anuke.mindustry.world.blocks.OreBlock;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import static io.anuke.mindustry.Vars.content;
import static io.anuke.mindustry.Vars.tilesize;
@@ -26,11 +27,24 @@ public class Generators {
ImagePacker.generate("block-icons", () -> {
Image colors = new Image(256, 1);
Color outlineColor = new Color(0, 0, 0, 0.2f);
Color outlineColor = new Color(0, 0, 0, 0.3f);
for(Block block : content.blocks()){
TextureRegion[] regions = block.getGeneratedIcons();
try{
if(block instanceof Floor){
block.load();
for(TextureRegion region : block.variantRegions()){
GenRegion gen = (GenRegion)region;
if(gen.path == null) continue;
Files.copy(gen.path, Paths.get("../editor/editor-" + gen.path.getFileName()));
}
}
}catch(IOException e){
throw new RuntimeException(e);
}
if(regions.length == 0){
continue;
}
@@ -91,6 +105,8 @@ public class Generators {
image.save(block.name + "-icon-full");
}
image.save("../editor/" + block.name + "-icon-editor");
for(Icon icon : Icon.values()){
if(icon.size == 0 || (icon.size == image.width() && icon.size == image.height())) continue;
Image scaled = new Image(icon.size, icon.size);
@@ -212,7 +228,7 @@ public class Generators {
}
image.draw(ImagePacker.get(item.name + (i+1)));
image.save("ore-" + item.name + "-" + base.name + (i+1));
image.save("../blocks/environment/ore-" + item.name + "-" + base.name + (i+1));
//save icons
image.save(block.name + "-icon-full");
@@ -247,7 +263,7 @@ public class Generators {
}
}
result.save(floor.name + "-edge");
result.save("../blocks/environment/" + floor.name + "-edge");
}catch(Exception ignored){}
}