From f74c731a3d7e5a091cd6c4f351f881e5f6205547 Mon Sep 17 00:00:00 2001 From: OLEGSHA Date: Fri, 27 Aug 2021 12:20:58 +0300 Subject: [PATCH] Fixed GUI buttons and a rare crash on startup --- .../client/graphics/gui/BasicButton.java | 1 + .../client/graphics/model/Shapes.java | 18 ++++ .../server/comms/ClientManager.java | 2 +- .../planet/PlanetTerrainGenerator.java | 17 +++ .../progressia/test/TestBlockRenderTux.java | 100 ++++++++++++++++++ .../windcorp/progressia/test/TestContent.java | 4 + .../resources/assets/textures/blocks/Tux.png | Bin 0 -> 921 bytes 7 files changed, 141 insertions(+), 1 deletion(-) create mode 100644 src/main/java/ru/windcorp/progressia/test/TestBlockRenderTux.java create mode 100644 src/main/resources/assets/textures/blocks/Tux.png diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java index cd30152..0ae328e 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/gui/BasicButton.java @@ -120,6 +120,7 @@ public abstract class BasicButton extends Component { public void setPressed(boolean isPressed) { if (this.isPressed != isPressed) { this.isPressed = isPressed; + requestReassembly(); if (isPressed) { takeFocus(); diff --git a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java index 29d8629..803f05d 100644 --- a/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java +++ b/src/main/java/ru/windcorp/progressia/client/graphics/model/Shapes.java @@ -20,10 +20,12 @@ package ru.windcorp.progressia.client.graphics.model; import java.util.Map; +import glm.mat._4.Mat4; import glm.vec._3.Vec3; import glm.vec._4.Vec4; import ru.windcorp.progressia.client.graphics.backend.Usage; import ru.windcorp.progressia.client.graphics.texture.Texture; +import ru.windcorp.progressia.common.util.VectorUtil; import ru.windcorp.progressia.common.world.rels.AbsFace; public class Shapes { @@ -271,6 +273,22 @@ public class Shapes { return this; } + + public PppBuilder apply(Mat4 transform) { + VectorUtil.applyMat4(origin, transform); + VectorUtil.rotateOnly(width, transform); + VectorUtil.rotateOnly(height, transform); + VectorUtil.rotateOnly(depth, transform); + return this; + } + + public PppBuilder scale(float factor) { + origin.mul(factor); + width.mul(factor); + height.mul(factor); + depth.mul(factor); + return this; + } public PppBuilder flip() { this.flip = true; diff --git a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java index 6b1595e..dbcf081 100644 --- a/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java +++ b/src/main/java/ru/windcorp/progressia/server/comms/ClientManager.java @@ -95,7 +95,7 @@ public class ClientManager { } public void processPackets() { - getClients().forEach(CommsChannel::processPackets); + clients.forEach(CommsChannel::processPackets); } /** diff --git a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetTerrainGenerator.java b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetTerrainGenerator.java index a43ad9f..cb4507c 100644 --- a/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetTerrainGenerator.java +++ b/src/main/java/ru/windcorp/progressia/server/world/generation/planet/PlanetTerrainGenerator.java @@ -86,6 +86,11 @@ class PlanetTerrainGenerator { } private void generateBorderTerrain(Server server, DefaultChunkData chunk) { + if (chunk.getPosition().x == 0 && chunk.getPosition().y == 0 && chunk.getPosition().z == 0) { + generateCore(server, chunk); + return; + } + BlockData stone = BlockDataRegistry.getInstance().get("Test:Stone"); BlockData air = BlockDataRegistry.getInstance().get("Test:Air"); @@ -109,4 +114,16 @@ class PlanetTerrainGenerator { }); } + private void generateCore(Server server, DefaultChunkData chunk) { + BlockData tux = BlockDataRegistry.getInstance().get("Test:Tux"); + BlockData air = BlockDataRegistry.getInstance().get("Test:Air"); + + + GenericChunks.forEachBiC(bic -> { + chunk.setBlock(bic, air, false); + }); + + chunk.setBlock(new Vec3i(7, 7, 0), tux, false); + } + } diff --git a/src/main/java/ru/windcorp/progressia/test/TestBlockRenderTux.java b/src/main/java/ru/windcorp/progressia/test/TestBlockRenderTux.java new file mode 100644 index 0000000..de6d291 --- /dev/null +++ b/src/main/java/ru/windcorp/progressia/test/TestBlockRenderTux.java @@ -0,0 +1,100 @@ +/* + * Progressia + * Copyright (C) 2020-2021 Wind Corporation and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package ru.windcorp.progressia.test; + +import glm.mat._4.Mat4; +import glm.vec._3.Vec3; +import glm.vec._3.i.Vec3i; +import ru.windcorp.progressia.client.graphics.Colors; +import ru.windcorp.progressia.client.graphics.backend.Usage; +import ru.windcorp.progressia.client.graphics.model.Renderable; +import ru.windcorp.progressia.client.graphics.model.Shape; +import ru.windcorp.progressia.client.graphics.model.ShapeParts; +import ru.windcorp.progressia.client.graphics.model.Shapes; +import ru.windcorp.progressia.client.graphics.model.StaticModel; +import ru.windcorp.progressia.client.graphics.texture.ComplexTexture; +import ru.windcorp.progressia.client.graphics.texture.SimpleTextures; +import ru.windcorp.progressia.client.graphics.texture.TexturePrimitive; +import ru.windcorp.progressia.client.graphics.world.WorldRenderProgram; +import ru.windcorp.progressia.client.world.block.BlockRender; +import ru.windcorp.progressia.common.world.DefaultChunkData; + +public class TestBlockRenderTux extends BlockRender { + + private final Renderable model; + + public TestBlockRenderTux(String id) { + super(id); + + TexturePrimitive primitive = SimpleTextures.get("blocks/Tux").getSprite().getPrimitive(); + ComplexTexture texture = new ComplexTexture(primitive, 72, 60); + + WorldRenderProgram program = WorldRenderProgram.getDefault(); + StaticModel.Builder builder = StaticModel.builder(); + + final float scale = 1f / 40; + final float lift = -1f / 2 / scale; + + builder.addPart( + new Shapes.PppBuilder(program, texture.getCuboidTextures(0, 36, 12)).setSize(12) + .centerAt(0, 0, 18 + (12 / 2) + lift).scale(scale).create() + ); + builder.addPart( + new Shapes.PppBuilder(program, texture.getCuboidTextures(0, 0, 18)).setSize(18) + .centerAt(0, 0, 18 / 2 + lift).scale(scale).create() + ); + builder.addPart( + new Shape( + Usage.STATIC, + program, + ShapeParts.createRectangle( + program, + texture.get(48, 44, 24, 16), + Colors.WHITE, + new Vec3(18 / 2 + 1, -(24 / 2), lift), + new Vec3(0, 24, 0), + new Vec3(0, 0, 16), + false + ), + ShapeParts.createRectangle( + program, + texture.get(48, 44, 24, 16), + Colors.WHITE, + new Vec3(18 / 2 + 1, -(24 / 2), lift), + new Vec3(0, 24, 0), + new Vec3(0, 0, 16), + true + ) + ), + new Mat4().scale(scale) + ); + + this.model = builder.build(); + } + + @Override + public Renderable createRenderable(DefaultChunkData chunk, Vec3i relBlockInChunk) { + return model; + } + + @Override + public boolean needsOwnRenderable() { + return true; + } + +} diff --git a/src/main/java/ru/windcorp/progressia/test/TestContent.java b/src/main/java/ru/windcorp/progressia/test/TestContent.java index 9ad6518..8396e21 100644 --- a/src/main/java/ru/windcorp/progressia/test/TestContent.java +++ b/src/main/java/ru/windcorp/progressia/test/TestContent.java @@ -135,6 +135,10 @@ public class TestContent { register(new BlockData("Test:StatieSpawner")); register(new BlockRenderOpaqueCube("Test:StatieSpawner", getBlockTexture("StatieSpawner"))); register(new TestBlockLogicStatieSpawner("Test:StatieSpawner")); + + register(new BlockData("Test:Tux")); + register(new TestBlockRenderTux("Test:Tux")); + register(new BlockLogic("Test:Tux")); BlockDataRegistry.getInstance().values().forEach(PLACEABLE_BLOCKS::add); PLACEABLE_BLOCKS.removeIf(b -> placeableBlacklist.contains(b.getId())); diff --git a/src/main/resources/assets/textures/blocks/Tux.png b/src/main/resources/assets/textures/blocks/Tux.png new file mode 100644 index 0000000000000000000000000000000000000000..f96c5be84944cf9b96fdab32a9cfb1d1ad0bfeb7 GIT binary patch literal 921 zcmV;K17`e*P)%TG!#CRnz{f002y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00RL@L_t(|+U=S>YU4l{hF^(* zNwKxq6s~s(F)6l{tA(wcYWp0(H_!oe1KlA3cUw6a0#fUMv2Wlai@UUHR$F90qmAcJ zqnWWR&j$fBqmea_-tTYX01YjU;|dn7D2f0_wsJQG01ToG7w~ofX0zJj=5`1G2tAfV zBRI?X#4CuW95SyUhH^Zh4>pK045ExV=K*~H%%^%hm@nbag}RG zNxg6}Rs~G9oKGs9Il8BI7R&P-05BepmBuZmGa z*Iv|{S8W&LZQhk~cpIb5iRJ|{>tKDW7}P~bO=8w^K9OE)q>^6DM#s)%dzZMm9irS# z|8pPFc~5+2YY`DZ(XT_K#k`h%7j7OXdU$Z=b9OR-pAd+ zA!VopToxqJOCCfSTK^9!j$``Rsh&<&9}!Sem(?tGiY5cotK$xT9^?UeKpv0>)H7So zCrY)`Spq6|Q>DJ_ECH#u8cqsDSy%7++^8v>v#F$Yz*u)Nl`|pN=SG49`tw%MpK^`M zVWFj@vk20c!-A=#>#uKKL3N|Eqb5oUYUep^t_V-&^}uLjh1_=ubN{S;}Tc z_T?31!o`v#v91KwwW`n3sczonL%Rmh8c>oXNYhkl{`c#v_Jh#cG);w&Wb>U;P#whkxPYzZC%TB9aFzo7hKKP zL8bx8vYIRqH??D{$SbG~AlBP+{YF`e)m5=G1-XLc5`^(y%r+z*9M|zk`G@49n#5$P vr^7SZ_jL}C?QXsf=cLoTtqped$LD_m@Eg96zGh_-00000NkvXXu0mjf;kBEA literal 0 HcmV?d00001