48 lines
1.4 KiB
Go
48 lines
1.4 KiB
Go
|
|
package model
|
||
|
|
|
||
|
|
import (
|
||
|
|
"github.com/df-mc/dragonfly/server/block/cube"
|
||
|
|
"github.com/df-mc/dragonfly/server/world"
|
||
|
|
)
|
||
|
|
|
||
|
|
// Wall is a model used by all wall types.
|
||
|
|
type Wall struct {
|
||
|
|
// NorthConnection is the height of the connection for the north direction.
|
||
|
|
NorthConnection float64
|
||
|
|
// EastConnection is the height of the connection for the east direction.
|
||
|
|
EastConnection float64
|
||
|
|
// SouthConnection is the height of the connection for the south direction.
|
||
|
|
SouthConnection float64
|
||
|
|
// WestConnection is the height of the connection for the west direction.
|
||
|
|
WestConnection float64
|
||
|
|
// Post is if the wall is the full height of a block or not.
|
||
|
|
Post bool
|
||
|
|
}
|
||
|
|
|
||
|
|
// BBox ...
|
||
|
|
func (w Wall) BBox(cube.Pos, world.BlockSource) []cube.BBox {
|
||
|
|
postHeight := 0.8125
|
||
|
|
if w.Post {
|
||
|
|
postHeight = 1
|
||
|
|
}
|
||
|
|
boxes := []cube.BBox{cube.Box(0.25, 0, 0.25, 0.75, postHeight, 0.75)}
|
||
|
|
if w.NorthConnection > 0 {
|
||
|
|
boxes = append(boxes, cube.Box(0.25, 0, 0, 0.75, w.NorthConnection, 0.25))
|
||
|
|
}
|
||
|
|
if w.EastConnection > 0 {
|
||
|
|
boxes = append(boxes, cube.Box(0.75, 0, 0.25, 1, w.EastConnection, 0.75))
|
||
|
|
}
|
||
|
|
if w.SouthConnection > 0 {
|
||
|
|
boxes = append(boxes, cube.Box(0.25, 0, 0.75, 0.75, w.SouthConnection, 1))
|
||
|
|
}
|
||
|
|
if w.WestConnection > 0 {
|
||
|
|
boxes = append(boxes, cube.Box(0, 0, 0.25, 0.25, w.WestConnection, 0.75))
|
||
|
|
}
|
||
|
|
return boxes
|
||
|
|
}
|
||
|
|
|
||
|
|
// FaceSolid returns true if the face is in the Y axis.
|
||
|
|
func (w Wall) FaceSolid(_ cube.Pos, face cube.Face, _ world.BlockSource) bool {
|
||
|
|
return face.Axis() == cube.Y
|
||
|
|
}
|