public void setAllColorSources(DefaultColorSource source) { for (BlockPart part : BlockPart.values()) { colorSources.put(part, source); } }
public void setColorSource(BlockColorSource colorSource) { for (BlockPart part : BlockPart.values()) { this.colorSource.put(part, colorSource); } }
public void setColorOffsets(Vector4f color) { for (BlockPart part : BlockPart.values()) { colorOffsets.put(part, color); } }
public void setAllTiles(BlockTile tile) { for (BlockPart part : BlockPart.values()) { blockTiles.put(part, tile); } }
public BlockAppearance(Map<BlockPart, BlockMeshPart> blockParts, Map<BlockPart, Vector2f> textureAtlasPos) { Preconditions.checkNotNull(blockParts); Preconditions.checkNotNull(textureAtlasPos); this.blockParts = blockParts; this.textureAtlasPos.putAll(textureAtlasPos); for (BlockPart part : BlockPart.values()) { Preconditions.checkNotNull("Missing texture atlas position for part " + part, textureAtlasPos.get(part)); } }
/** * Init. a new block with default properties in place. */ public Block() { for (BlockPart part : BlockPart.values()) { colorSource.put(part, DefaultColorSource.DEFAULT); colorOffsets.put(part, new Vector4f(1.0f, 1.0f, 1.0f, 1.0f)); } }
public void setAllColorOffsets(BaseVector4f offset) { for (BlockPart part : BlockPart.values()) { colorOffsets.put(part, new Vector4f(offset)); } }
private List<Vector3f> buildVertList(BlockShapeData shape) { List<Vector3f> result = new ArrayList<>(); for (BlockPart part : BlockPart.values()) { BlockMeshPart meshPart = shape.getMeshPart(part); if (meshPart != null) { for (int i = 0; i < meshPart.size(); ++i) { result.add(meshPart.getVertex(i)); } } } return result; }
if (jsonObject.has(singleName)) { T value = context.deserialize(jsonObject.get(singleName), type); for (BlockPart blockPart : BlockPart.values()) { supplier.get().put(blockPart, value); if (partsObject.has("all")) { T value = context.deserialize(partsObject.get("all"), type); for (BlockPart blockPart : BlockPart.values()) { supplier.get().put(blockPart, value); supplier.get().put(BlockPart.BOTTOM, value); for (BlockPart part : BlockPart.values()) { String partName = part.toString().toLowerCase(Locale.ENGLISH); if (partsObject.has(partName)) {
public SectionDefinitionData() { colorSources = Maps.newEnumMap(BlockPart.class); colorOffsets = Maps.newEnumMap(BlockPart.class); for (BlockPart part : BlockPart.values()) { colorSources.put(part, DefaultColorSource.DEFAULT); colorOffsets.put(part, new Vector4f(1, 1, 1, 1)); } }
public BlockAppearance() { blockParts = Maps.newEnumMap(BlockPart.class); textureAtlasPos = Maps.newEnumMap(BlockPart.class); for (BlockPart part : BlockPart.values()) { textureAtlasPos.put(part, new Vector2f()); } }
private void applyDefaults(ResourceUrn resourceUrn, SectionDefinitionData section) { Optional<BlockTile> defaultTile = assetManager.getAsset(resourceUrn, BlockTile.class); if (defaultTile.isPresent()) { for (BlockPart part : BlockPart.values()) { if (section.getBlockTiles().get(part) == null) { section.getBlockTiles().put(part, defaultTile.get()); } } } if (section.getSounds() == null) { section.setSounds(assetManager.getAsset(DEFAULT_SOUNDS, BlockSounds.class).get()); } }
@Override public Optional<BlockFamilyDefinitionData> getAssetData(ResourceUrn urn) throws IOException { Optional<BlockTile> blockTile = assetManager.getAsset(urn, BlockTile.class); if (blockTile.isPresent() && blockTile.get().isAutoBlock()) { BlockFamilyDefinitionData data = new BlockFamilyDefinitionData(); for (BlockPart part : BlockPart.values()) { data.getBaseSection().getBlockTiles().put(part, blockTile.get()); } data.getBaseSection().setSounds(assetManager.getAsset("engine:default", BlockSounds.class).get()); data.setBlockFamily(FreeformFamily.class); return Optional.of(data); } return Optional.empty(); } }
@Override public BlockShapeData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { BlockShapeData shape = new BlockShapeData(); JsonObject shapeObj = json.getAsJsonObject(); if (shapeObj.has(DISPLAY_NAME)) { shape.setDisplayName(shapeObj.getAsJsonPrimitive(DISPLAY_NAME).getAsString()); } for (BlockPart part : BlockPart.values()) { if (shapeObj.has(part.toString().toLowerCase(Locale.ENGLISH))) { JsonObject meshObj = shapeObj.getAsJsonObject(part.toString().toLowerCase(Locale.ENGLISH)); shape.setMeshPart(part, (BlockMeshPart) context.deserialize(meshObj, BlockMeshPart.class)); if (part.isSide() && meshObj.has(FULL_SIDE)) { shape.setBlockingSide(part.getSide(), meshObj.get(FULL_SIDE).getAsBoolean()); } } } if (shapeObj.has(COLLISION) && shapeObj.get(COLLISION).isJsonObject()) { JsonObject collisionInfo = shapeObj.get(COLLISION).getAsJsonObject(); processCollision(context, shape, collisionInfo); } else { shape.setCollisionShape(COLLISION_SHAPE_FACTORY.getNewUnitCube()); shape.setCollisionSymmetric(true); } return shape; }
@Override protected void doReload(BlockShapeData data) { collisionShape.clear(); displayName = data.getDisplayName(); for (BlockPart part : BlockPart.values()) { this.meshParts.put(part, data.getMeshPart(part)); } for (Side side : Side.getAllSides()) { this.fullSide.put(side, data.isBlockingSide(side)); } this.baseCollisionShape = data.getCollisionShape(); this.baseCollisionOffset.set(data.getCollisionOffset()); collisionShape.put(Rotation.none(), baseCollisionShape); yawSymmetric = data.isYawSymmetric(); pitchSymmetric = data.isPitchSymmetric(); rollSymmetric = data.isRollSymmetric(); }
private BlockAppearance createAppearance(BlockShape shape, Map<BlockPart, BlockTile> tiles, Rotation rot) { Map<BlockPart, BlockMeshPart> meshParts = Maps.newEnumMap(BlockPart.class); Map<BlockPart, Vector2f> textureAtlasPositions = Maps.newEnumMap(BlockPart.class); for (BlockPart part : BlockPart.values()) { // TODO: Need to be more sensible with the texture atlas. Because things like block particles read from a part that may not exist, we're being fairly lenient Vector2f atlasPos; if (tiles.get(part) == null) { atlasPos = new Vector2f(); } else { atlasPos = worldAtlas.getTexCoords(tiles.get(part), shape.getMeshPart(part) != null); } BlockPart targetPart = part.rotate(rot); textureAtlasPositions.put(targetPart, atlasPos); if (shape.getMeshPart(part) != null) { meshParts.put(targetPart, shape.getMeshPart(part).rotate(rot.getQuat4f()).mapTexCoords(atlasPos, worldAtlas.getRelativeTileSize())); } } return new BlockAppearance(meshParts, textureAtlasPositions); }
private void generateMesh() { Tessellator tessellator = new Tessellator(); for (BlockPart dir : BlockPart.values()) { BlockMeshPart part = block.getPrimaryAppearance().getPart(dir); if (part != null) { if (block.isDoubleSided()) { tessellator.addMeshPartDoubleSided(part); } else { tessellator.addMeshPart(part); } } } mesh = tessellator.generateMesh(new ResourceUrn("engine", "blockmesh", block.getURI().toString())); } }
@Override public Block constructCustomBlock(String defaultName, BlockShape shape, Rotation rotation, SectionDefinitionData section, BlockUri uri, BlockFamily blockFamily) { Block block = createRawBlock(defaultName, section); block.setRotation(rotation); block.setPrimaryAppearance(createAppearance(shape, section.getBlockTiles(), rotation)); setBlockFullSides(block, shape, rotation); block.setCollision(shape.getCollisionOffset(rotation), shape.getCollisionShape(rotation)); for (BlockPart part : BlockPart.values()) { block.setColorSource(part, section.getColorSources().get(part)); block.setColorOffset(part, section.getColorOffsets().get(part)); } block.setUri(uri); block.setBlockFamily(blockFamily); // Lowered mesh for liquids if (block.isLiquid()) { applyLiquidShapes(block, section.getBlockTiles()); } return block; }