up3
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"github.com/df-mc/dragonfly/server/block/cube"
|
||||
"github.com/df-mc/dragonfly/server/world"
|
||||
)
|
||||
|
||||
// Trapdoor is a model used for trapdoors. It has no solid faces and a bounding box that changes depending on
|
||||
// the direction of the trapdoor.
|
||||
type Trapdoor struct {
|
||||
// Facing is the facing direction of the Trapdoor. In addition to the texture, it influences the direction in which
|
||||
// the Trapdoor is opened.
|
||||
Facing cube.Direction
|
||||
// Open and Top specify if the Trapdoor is opened and if it's in the top or bottom part of a block respectively.
|
||||
Open, Top bool
|
||||
}
|
||||
|
||||
// BBox returns a physics.BBox that depends on the facing direction of the Trapdoor and whether it is open and in the
|
||||
// top part of the block.
|
||||
func (t Trapdoor) BBox(cube.Pos, world.BlockSource) []cube.BBox {
|
||||
if t.Open {
|
||||
return []cube.BBox{full.ExtendTowards(t.Facing.Face(), -0.8125)}
|
||||
} else if t.Top {
|
||||
return []cube.BBox{cube.Box(0, 0.8125, 0, 1, 1, 1)}
|
||||
}
|
||||
return []cube.BBox{cube.Box(0, 0, 0, 1, 0.1875, 1)}
|
||||
}
|
||||
|
||||
// FaceSolid returns true if the face is completely filled with the trapdoor.
|
||||
func (t Trapdoor) FaceSolid(_ cube.Pos, face cube.Face, _ world.BlockSource) bool {
|
||||
if t.Open {
|
||||
return t.Facing.Face().Opposite() == face
|
||||
} else if t.Top {
|
||||
return face == cube.FaceUp
|
||||
}
|
||||
return face == cube.FaceDown
|
||||
}
|
||||
Reference in New Issue
Block a user