package blocks import ( "edgaru089.ink/go/gl01/internal/util/itype" "edgaru089.ink/go/gl01/internal/world" ) type SlabBehaviour struct{} func (SlabBehaviour) Static() bool { return true } func (SlabBehaviour) RequireDataset() bool { return false } func (SlabBehaviour) RequireBlockUpdate() bool { return false } func (SlabBehaviour) Appearance(position itype.Vec3i, aux int, data itype.Dataset, w *world.World) world.BlockAppearance { var hitbox itype.Boxd if aux > 0 { // Bottom slab hitbox = itype.Boxd{0, 0, 0, 1, 0.5, 1} } else { // Top slab hitbox = itype.Boxd{0, 0.5, 0, 1, 0.5, 1} } return world.BlockAppearance{ Name: "", Transparent: true, NotSolid: false, Hitbox: []itype.Boxd{hitbox}, Lookbox: []itype.Boxd{hitbox}, RenderType: world.CustomRendering, CustomRenderAppend: func( position itype.Vec3i, aux int, data itype.Dataset, w *world.World, vertexArray []world.Vertex, vertsWater []world.Vertex) (verts, waters []world.Vertex) { var offset itype.Vec3f if aux < 0 { offset = itype.Vec3f{0, 0.5, 0} aux = -aux } var name string switch aux { case Stone: name = "stone" case Sand: name = "sand" case PlanksOak: name = "planks_oak" } vertexArray = appendFace(itype.YMinus, position, name+".png", itype.Vec3f{0, 0, 0}.Add(offset), vertexArray) vertexArray = appendFace(itype.YPlus, position, name+".png", itype.Vec3f{0, -0.5, 0}.Add(offset), vertexArray) vertexArray = appendFaceSized( itype.XPlus, position, name+".png", itype.Vec3f{1, 0.5, 1}, itype.Vec3f{0, 0, 0}.Add(offset), itype.Rectf{0, 0, 1, 0.5}, vertexArray, ) vertexArray = appendFaceSized( itype.XMinus, position, name+".png", itype.Vec3f{1, 0.5, 1}, itype.Vec3f{0, 0, 0}.Add(offset), itype.Rectf{0, 0, 1, 0.5}, vertexArray, ) vertexArray = appendFaceSized( itype.ZPlus, position, name+".png", itype.Vec3f{1, 0.5, 1}, itype.Vec3f{0, 0, 0}.Add(offset), itype.Rectf{0, 0, 1, 0.5}, vertexArray, ) vertexArray = appendFaceSized( itype.ZMinus, position, name+".png", itype.Vec3f{1, 0.5, 1}, itype.Vec3f{0, 0, 0}.Add(offset), itype.Rectf{0, 0, 1, 0.5}, vertexArray, ) return vertexArray, vertsWater }, } } func (SlabBehaviour) BlockUpdate(position itype.Vec3i, aux int, data itype.Dataset, w *world.World) bool { return false } func (SlabBehaviour) Break(position itype.Vec3i, aux int, data itype.Dataset, w *world.World) {}