Fixed button collision detection

This commit is contained in:
josua 2020-06-17 10:54:51 +10:00
parent 7b8de0fa63
commit 3b612fc61d
33 changed files with 343 additions and 109 deletions

BIN
layer.bdf

Binary file not shown.

BIN
settings.bdf Normal file

Binary file not shown.

View File

@ -76,7 +76,7 @@ public class DisplayWindow implements IMainloopTask
width = w.get()*4;
height = h.get()*4;
//GLFW.glfwWindowHint(GLFW.GLFW_DOUBLEBUFFER, GLFW.GLFW_FALSE);
GLFW.glfwWindowHint(GLFW.GLFW_DOUBLEBUFFER, GLFW.GLFW_FALSE);
// Create the window
window = GraphicsHelpers.initWindow("Project Zombie", width, height, monitor);

View File

@ -32,10 +32,10 @@ public class TileLighting implements IMainloopTask
cx + MathHelpers.floor(player.pos.x / 16),
cy + MathHelpers.floor(player.pos.y / 16));
Chunk chunk = layer.chunks.get(cpos);
/*if(chunk.light_dirty) {
chunk.light_dirty = false;
if(chunk.isLightDirty()) {
chunk.resetLightDirty();
dirty = true;
}*/
}
}
}

View File

@ -34,9 +34,14 @@ public abstract class Entity implements IBdfClassManager
protected static final Random rand = new Random();
public boolean emitsLight = false;
public int stepOnTileCooldown = 0;
private boolean dead = false;
public abstract Model getModel();
public boolean isDead() {
return dead;
}
protected double getTilesLightDissipation() {
if(chunk == null) return 0;
TileState tsf = chunk.getFrontTile(pos.toInt());
@ -219,6 +224,7 @@ public abstract class Entity implements IBdfClassManager
public void kill() {
chunk.killEntity(this);
dead = true;
}
public void activateTile()

View File

@ -155,9 +155,7 @@ public class EntityBullet extends EntityParticle
// Spawn some blood particles
if(!EntityParticle.DISABLED) {
for(int i=0;i<ea.bloodParticles();i++) {
chunk.spawnEntity(new ParticleBlood(rand, pos.copy(), angle));
}
chunk.spawnEntity(ParticleBlood.createBloodParticles(pos, ea.bloodParticles()));
}
// Play the hit noise

View File

@ -0,0 +1,99 @@
package projectzombie.entity;
import bdf.classes.IBdfClassManager;
import bdf.types.BdfArray;
import bdf.types.BdfNamedList;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
public class EntityContainer extends Entity implements EntityHoldsEntities
{
private Entity[] entities;
public EntityContainer(BdfObject bdf) {
super(bdf);
}
public EntityContainer(Vec2d pos, Entity[] entities) {
super(pos);
this.entities = entities;
}
@Override
public Model getModel() {
return Models.EMPTY;
}
@Override
public Entity[] getEntities() {
return this.entities;
}
@Override
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
int dead = 0;
for(Entity entity : entities)
{
if(entity == null || entity.isDead()) {
dead += 1;
continue;
}
entity.tick(chunk, layer);
}
if(dead == entities.length - 1) {
kill();
}
}
@Override
public void BdfClassLoad(BdfObject bdf) {
super.BdfClassLoad(bdf);
BdfNamedList nl = bdf.getNamedList();
BdfArray array = nl.get("entities").getArray();
entities = new Entity[array.size()];
for(int i=0;i<entities.length;i++)
{
Entity entity = Entity.loadEntity(array.get(i));
if(entity != null) {
entities[i] = entity;
}
}
}
@Override
public void BdfClassSave(BdfObject bdf) {
super.BdfClassSave(bdf);
BdfNamedList nl = bdf.getNamedList();
BdfArray array = new BdfArray();
nl.set("entities", BdfObject.withArray(array));
for(int i=0;i<entities.length;i++)
{
Entity e = entities[i];
if(e.getID() == -1) {
continue;
}
BdfObject e_bdf = new BdfObject();
e.BdfClassSave(e_bdf);
array.add(e_bdf);
}
}
}

View File

@ -80,6 +80,10 @@ public class EntityExplosion extends Entity
}
}
int multiplier = killed_entities ? 2 : 1;
Entity[] entities = new Entity[(int)(Math.PI * radius * radius) * multiplier];
int upto = 0;
// Loop over the tiles around the tnt
for(int ex=-radius;ex<radius;ex++) {
for(int ey=-radius;ey<radius;ey++)
@ -118,16 +122,24 @@ public class EntityExplosion extends Entity
l.spawnEntity(new ParticleBreak(new Vec2d(tpos.x+rand.nextDouble(), tpos.y+rand.nextDouble()), fts, 1));
}
if(upto + multiplier > entities.length) {
continue;
}
// Spawn some blood if entities were killed
if(killed_entities)
l.spawnEntity(new ParticleBlood(rand, new Vec2d(px, py), py));
entities[upto + 1] = new ParticleBlood(new Vec2d(px, py));
// Spawn some smoke
l.spawnEntity(new ParticleSmoke(new Vec2d(px, py)));
entities[upto] = new ParticleSmoke(new Vec2d(px, py));
upto += multiplier;
}
}
}
layer.spawnEntity(new EntityContainer(pos, entities));
// Play the explosion sound
Sounds.EXPLOSION.play(new Vec3d(pos.x, pos.y, 0), 1);

View File

@ -2,6 +2,8 @@ package projectzombie.entity;
import bdf.types.BdfObject;
import gl_engine.vec.Vec2d;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.layer.Layer;
public class EntityFlare extends EntityTnt
@ -12,7 +14,6 @@ public class EntityFlare extends EntityTnt
@Override
protected void explode(Layer layer) {
kill();
}
public EntityFlare(Vec2d pos, double angle) {
@ -25,5 +26,10 @@ public class EntityFlare extends EntityTnt
public double getLightLevel() {
return getLightWithHeight(1 - (this.pos.y * (1/12.0))) * ( rand.nextDouble() / 10.0 + 0.9 );
}
@Override
public Model getModel() {
return active ? Models.ENTITY_FLARE : Models.EMPTY;
}
}

View File

@ -0,0 +1,6 @@
package projectzombie.entity;
public interface EntityHoldsEntities
{
public Entity[] getEntities();
}

View File

@ -5,22 +5,42 @@ import bdf.types.BdfObject;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec3d;
import projectzombie.entity.particle.ParticleSmoke;
import projectzombie.entity.particle.ParticleSpark;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
public class EntityTnt extends Entity
public class EntityTnt extends Entity implements EntityHeight, EntityHoldsEntities
{
protected boolean active = true;
protected double height = 0.4;
protected Vec3d velocity;
protected int explode_time;
private int explode_radius;
private double explode_damage;
private ParticleSpark[] smoke_particles;
@Override
public Entity[] getEntities() {
return smoke_particles;
}
@Override
public double getHeight() {
return height;
}
@Override
public void setHeight(double height) {
this.height = height;
}
public EntityTnt(BdfObject bdf) {
super(bdf);
this.smoke_particles = new ParticleSpark[50];
}
@Override
@ -60,6 +80,7 @@ public class EntityTnt extends Entity
this.crossUnWalkable = true;
this.goThroughSolid = false;
this.explode_damage = explode_damage;
this.smoke_particles = new ParticleSpark[100];
this.emitsLight = true;
// Set to 2.5 seconds
@ -68,18 +89,38 @@ public class EntityTnt extends Entity
protected void explode(Layer layer)
{
// Create an explosion
layer.spawnEntity(new EntityExplosion(pos, explode_radius, explode_damage));
// Delete the entity
kill();
return;
}
@Override
public void tick(Chunk chunk, Layer layer) {
super.tick(chunk, layer);
int dead_particle = 0;
int dead_particle_count = 0;
for(int i=0;i<smoke_particles.length;i++)
{
ParticleSpark particle = smoke_particles[i];
if(particle == null || particle.isDead()) {
dead_particle_count += 1;
dead_particle = i;
continue;
}
particle.tick(chunk, layer);
}
if(!active)
{
if(dead_particle_count == smoke_particles.length - 1) {
kill();
}
return;
}
// Create a downward gravitational pull
height += velocity.z;
velocity.z -= 0.001;
@ -107,11 +148,11 @@ public class EntityTnt extends Entity
// Explode if it is time for the tnt to blow up
explode_time -= 1;
if(explode_time < 0) {
active = false;
explode(layer);
}
// Create sparks
chunk.spawnEntity(new ParticleSpark(pos.copy()));
smoke_particles[dead_particle] = new ParticleSpark(new Vec3d(pos, height + 1));
}
@Override
@ -125,7 +166,7 @@ public class EntityTnt extends Entity
@Override
public Model getModel() {
return Models.EMPTY;
return active ? Models.ENTITY_TNT : Models.EMPTY;
}
}

View File

@ -216,7 +216,7 @@ public class EntityZombie extends Entity implements EntityAlive, EntityKillWithP
@Override
public int bloodParticles() {
return 10;
return 12;
}
@Override

View File

@ -22,7 +22,7 @@ public class EntityZombieArmored extends EntityZombie
@Override
public int bloodParticles() {
return 2;
return 6;
}
@Override

View File

@ -5,6 +5,8 @@ import java.util.Random;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityContainer;
import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityParticle;
import projectzombie.init.Models;
@ -15,7 +17,7 @@ import projectzombie.world.layer.Layer;
public class ParticleBlood extends EntityParticle implements EntityHeight
{
private double r_color;
private boolean done = false;
private double time = 1000;
private double height = 0;
private Vec3d velocity;
@ -30,17 +32,22 @@ public class ParticleBlood extends EntityParticle implements EntityHeight
this.height = height;
}
public ParticleBlood(Random rand, Vec2d pos, double angle) {
public ParticleBlood(Vec2d pos) {
super(pos);
angle += RandomHelpers.randrange(rand, -100, 100);
double angle_height = RandomHelpers.randrange(rand, 9000, 18000) / 100;
this.height = rand.nextDouble();
r_color = RandomHelpers.randrange(rand, 200, 800) / 1000.0;
velocity = MathHelpers.moveTowards3(0.1,
new Vec2d(Math.toRadians(angle), Math.toRadians(angle_height)));
time = RandomHelpers.randrange(rand, 800, 1200);
velocity = new Vec3d(MathHelpers.moveTowards2(0.01, rand.nextDouble() * 360), rand.nextDouble() * 0.12);
}
public static EntityContainer createBloodParticles(Vec2d pos, int size)
{
Entity[] entities = new Entity[size];
for(int i=0;i<entities.length;i++) {
entities[i] = new ParticleBlood(pos.copy());
}
return new EntityContainer(pos.copy(), entities);
}
@Override
@ -49,26 +56,26 @@ public class ParticleBlood extends EntityParticle implements EntityHeight
// Call super
super.tick(chunk, layer);
// Move in the velocity and remove some of it
pos.x += velocity.x;
pos.y += velocity.y;
height += velocity.z;
velocity.x /= 1.05;
velocity.y /= 1.05;
velocity.z -= MathHelpers.FallSpeed;
if(height < 0) {
height = 0;
velocity.z = 0;
if(DISABLED || time < 0) {
kill();
return;
}
// Remove some time
time -= 1;
// Should this particle too old; destroy it
if(time < 0) chunk.killEntity(this);
if(done) {
return;
}
if(DISABLED) {
kill();
// Move in the velocity and remove some of it
pos.x += velocity.x;
pos.y += velocity.y;
height += velocity.z;
velocity.z -= MathHelpers.FallSpeed;
if(height < 0) {
velocity = new Vec3d(0, 0, 0);
height = 0;
}
}

View File

@ -1,18 +1,44 @@
package projectzombie.entity.particle;
import java.util.Random;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec3d;
import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityParticle;
import projectzombie.init.Models;
import projectzombie.model.Model;
import projectzombie.world.chunk.Chunk;
import projectzombie.world.layer.Layer;
public class ParticleSpark extends EntityParticle
public class ParticleSpark extends EntityParticle implements EntityHeight
{
private double size = 0.1;
private int time;
private double height;
private Vec3d velocity;
private static final Random rand = new Random();
@Override
public double getHeight() {
return height;
}
@Override
public void setHeight(double height) {
this.height = height;
}
public ParticleSpark(Vec2d pos) {
super(pos);
public ParticleSpark(Vec3d pos) {
super(pos.xy());
velocity = new Vec3d(
rand.nextDouble() * 0.02 - 0.01,
rand.nextDouble() * 0.02 - 0.01,
rand.nextDouble() * 0.02);
height = pos.z;
time = 100;
}
@Override
@ -20,16 +46,12 @@ public class ParticleSpark extends EntityParticle
super.tick(chunk, layer);
// Reduce the size
size -= 0.004;
pos = pos.add(velocity.xy());
height += velocity.z;
time -= 1;
// Is the size zero
if(size <= 0)
{
// Destroy this particle
kill();
}
if(DISABLED) {
// Kill if at the end of life
if(time <= 0 || DISABLED) {
kill();
}
}

View File

@ -3,6 +3,8 @@ package projectzombie.entity.particle;
import gl_engine.MathHelpers;
import gl_engine.vec.Vec2d;
import gl_engine.vec.Vec3d;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityContainer;
import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityParticle;
import projectzombie.init.Models;
@ -26,12 +28,22 @@ public class ParticleWater extends EntityParticle implements EntityHeight
this.height = height;
}
public ParticleWater(Vec2d pos) {
ParticleWater(Vec2d pos) {
super(pos);
// Set the velocity
velocity = MathHelpers.moveTowards3(0.05, new Vec2d(Math.toRadians(
RandomHelpers.randrange(rand, 360)), Math.toRadians(RandomHelpers.randrange(rand, 0, 45))));
velocity = new Vec3d(MathHelpers.moveTowards2(0.04, rand.nextDouble() * 360), rand.nextDouble() * 0.04);
}
public static EntityContainer createWaterParticles(Vec2d pos, int amount)
{
Entity[] entities = new Entity[amount];
for(int i=0;i<amount;i++) {
entities[i] = new ParticleWater(pos.copy());
}
return new EntityContainer(pos.copy(), entities);
}
@Override

View File

@ -104,6 +104,9 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
// Create the inventory
inventory = new Inventory(10);
inventory.addItem(new ItemStack(Items.SPAWN_ZOMBIE, 99, (short)0));
inventory.addItem(new ItemStack(Items.AMMO, 999, (short)0));
}
@Override
@ -314,7 +317,7 @@ public class EntityPlayer extends Entity implements EntityAlive, EntityInventory
@Override
public int bloodParticles() {
return 5;
return 12;
}
@Override

View File

@ -6,6 +6,7 @@ import bdf.types.BdfObject;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityBoss;
import projectzombie.entity.EntityBullet;
import projectzombie.entity.EntityContainer;
import projectzombie.entity.EntityDummy;
import projectzombie.entity.EntityExplosion;
import projectzombie.entity.EntityFlare;
@ -45,5 +46,6 @@ public class Entities
register(EntityBullet.class);
register(EntityBoss.class);
register(EntityPlayer.class);
register(EntityContainer.class);
}
}

View File

@ -30,7 +30,7 @@ public class Models
public static final Model TILE_LAVA_FLOW = new ModelTile(Resources.ATLAS.get("/tile/lava_flow.png"), 16, 50);
public static final Model TILE_LANTERN = new ModelVertical(Resources.ATLAS.get("/tile/lantern.png"), 4, 5);
public static final Model ENTITY_BOSS_IDLE = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_still.png"), new Vec2d(4, 4), 4, 50);
public static final Model ENTITY_BOSS_IDLE = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_still.png"), new Vec2d(4, 4));
public static final Model ENTITY_BOSS_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_firing.png"), new Vec2d(4, 4), 4, 50);
public static final Model ENTITY_BOSS_WALKING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking.png"), new Vec2d(4, 4), 4, 50);
public static final Model ENTITY_BOSS_WALKING_AND_FIRING = new ModelVertical(Resources.ATLAS.get("/entity/boss1/boss_walking_firing.png"), new Vec2d(4, 4), 4, 50);
@ -56,8 +56,8 @@ public class Models
public static final ModelGui UI_BUTTON = new ModelGui(Resources.ATLAS.get("/gui/button_normal.png"), new Vec2d(12, 1.5));
public static final ModelGui UI_BUTTON_HOVER = new ModelGui(Resources.ATLAS.get("/gui/button_hover.png"), new Vec2d(12, 1.5));
public static final ModelGui UI_HEALTH_FG = new ModelGui(Resources.ATLAS.get("/gui/health_full.png"), new Vec2d(8, 0.5));
public static final ModelGui UI_HEALTH_BG = new ModelGui(Resources.ATLAS.get("/gui/health_empty.png"), new Vec2d(8, 0.5));
public static final ModelGui UI_HEALTH_FG = new ModelGui(Resources.ATLAS.get("/gui/health_full.png"), new Vec2d(6, 0.375));
public static final ModelGui UI_HEALTH_BG = new ModelGui(Resources.ATLAS.get("/gui/health_empty.png"), new Vec2d(6, 0.375));
public static final ModelGui UI_ITEM_SLOTS = new ModelGui(Resources.ATLAS.get("/gui/hotbar.png"), new Vec2d(15, 1.5));
public static final ModelGui UI_ACTIVE_SLOT = new ModelGui(Resources.ATLAS.get("/gui/hotbar_selected.png"), new Vec2d(1.5, 1.5));

View File

@ -24,24 +24,22 @@ public class Button implements GUIComponent, GUISelectable
private GUISelectable[] SELECTABLE = {null, null, null, null};
private void updateMatrix()
private double getOffset()
{
double offset;
switch(alignment) {
case CENTRE:
offset = Models.UI_BUTTON.getWidth() / 2;
break;
return Models.UI_BUTTON.getWidth() / 2;
case RIGHT:
offset = Models.UI_BUTTON.getWidth();
break;
return Models.UI_BUTTON.getWidth();
default:
offset = 0;
return 0;
}
matrix = Matrix4.translate(pos.x - offset, pos.y, 0);
}
private void updateMatrix()
{
matrix = Matrix4.translate(pos.x - getOffset(), pos.y, 0);
matrix_text = Matrix4.multiply(matrix, Matrix4.translate(
Models.UI_BUTTON.getWidth() / 2 - 0.25 * text.length(),
@ -102,20 +100,15 @@ public class Button implements GUIComponent, GUISelectable
this.dirty = false;
}
double mx = -pos.x / Main.window.getWidth() * 2 + 1;
double my = -pos.y / Main.window.getHeight() * 2 + 1;
double offset = getOffset();
double mx = (pos.x / Main.window.getWidth() * 20 - 10) * GlHelpers.getAspectRatio();
double my = -pos.y / Main.window.getHeight() * 20 + 10;
ModelGui model = Models.UI_BUTTON;
Matrix4 mat = Matrix4.multiply(matrix, DisplayRenderUI.projection);
Vec3d point_s = Matrix4.multiply(mat, this.pos.xyn());
Vec3d point_e = Matrix4.multiply(mat, new Vec3d(
model.getWidth() + this.pos.x,
model.getHeight() + this.pos.y, 0));
//System.out.println("mx="+mx+" my="+my+" bx="+point.x+" by="+point.y+" w="+Models.UI_BUTTON.getWidth()+" h="+Models.UI_BUTTON.getHeight());
return (mx > point_s.x && mx < point_e.x &&
my > point_s.y && my < point_e.y);
return (mx > this.pos.x - offset && mx < this.pos.x + model.getWidth() - offset &&
my > this.pos.y && my < this.pos.y + model.getHeight());
}
@Override

View File

@ -24,9 +24,7 @@ public class TileWater extends Tile
super.onWalkedOn(chunk, layer, pos, entity, state);
// Spawn some water particles
for(int i=0;i<4;i++) {
layer.spawnEntity(new ParticleWater(entity.pos.copy()));
}
layer.spawnEntity(ParticleWater.createWaterParticles(entity.pos, 4));
}
@Override

View File

@ -1,6 +1,7 @@
package projectzombie.world.chunk;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Random;
import org.lwjgl.opengl.GL33;
@ -21,6 +22,7 @@ import projectzombie.display.Camera;
import projectzombie.entity.Entity;
import projectzombie.entity.EntityAlive;
import projectzombie.entity.EntityHeight;
import projectzombie.entity.EntityHoldsEntities;
import projectzombie.entity.EntityKillWithParticles;
import projectzombie.entity.particle.ParticleBreak;
import projectzombie.init.Tiles;
@ -78,6 +80,14 @@ public class Chunk implements IBdfClassManager
this.dirty = true;
}
public boolean isLightDirty() {
return light_dirty;
}
public void resetLightDirty() {
this.light_dirty = false;
}
@Override
public void BdfClassLoad(BdfObject bdf)
{
@ -176,6 +186,39 @@ public class Chunk implements IBdfClassManager
}
}
private void renderEntities(Object[] entities)
{
// Render each entity
for(Object o : entities)
{
Entity e = (Entity)o;
if(e == null || e.isDead()) {
continue;
}
Model model = e.getModel();
double h = 0;
if(e instanceof EntityHoldsEntities) {
renderEntities(((EntityHoldsEntities) e).getEntities());
}
// Don't try to render anything if the model is empty
if(model.getSize() == 0) {
continue;
}
if(e instanceof EntityHeight) {
h = ((EntityHeight)e).getHeight();
}
// Render the model
model.setModel(Matrix4.translate(e.pos.x - 0.5, h, e.pos.y - 0.5));
model.render();
}
}
public void render(Camera camera)
{
if(this.render_dirty)
@ -266,23 +309,11 @@ public class Chunk implements IBdfClassManager
model = new ModelChunk(verticies, textures, verticies_size);
}
{
model.setModel(Matrix4.translate(c_pos.x * 16, 0, c_pos.y * 16));
model.render();
}
// Render all the tiles in the chunk as a block
model.setModel(Matrix4.translate(c_pos.x * 16, 0, c_pos.y * 16));
model.render();
for(Entity e : entities)
{
Model model = e.getModel();
double h = 0;
if(e instanceof EntityHeight) {
h = ((EntityHeight)e).getHeight();
}
model.setModel(Matrix4.translate(e.pos.x - 0.5, h, e.pos.y - 0.5));
model.render();
}
renderEntities(entities.toArray());
}
public void spawnEntity(Entity e) {

View File

@ -12,7 +12,5 @@ void main()
{
FragColor = texture(tex, pTexture) * color;
if(FragColor.a == 0 || (pPos.x > tex_cut.y && tex_cut.x > 0.5)) {
discard;
}
discard(FragColor.a == 0 || (pPos.x > tex_cut.y && tex_cut.x > 0.5));
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 952 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 829 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 B

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1005 B

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 984 B

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 985 B

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1021 B

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 932 B

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB