26ed99fda6
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
39 lines
1.3 KiB
Go
39 lines
1.3 KiB
Go
package dialogue
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/go-gl/mathgl/mgl64"
|
|
)
|
|
|
|
// DisplaySettings holds optional fields that change the way the dialogue,
|
|
// particularly the entity shown in it, is displayed.
|
|
type DisplaySettings struct {
|
|
// EntityScale specifies the scale of the entity displayed in the dialogue.
|
|
EntityScale mgl64.Vec3
|
|
// EntityOffset specifies the offset of the entity shown in the dialogue.
|
|
EntityOffset mgl64.Vec3
|
|
// EntityRotation is the rotation of the entity shown in the dialogue. This
|
|
// rotation functions a bit differently to the normal entity rotation in
|
|
// Minecraft: The values are still degrees, but pitch (rot[1]) values are
|
|
// whole-body pitch instead of head-specific, and rot[2] is whole-body roll.
|
|
EntityRotation mgl64.Vec3
|
|
}
|
|
|
|
// MarshalJSON encodes the DisplaySettings to JSON.
|
|
func (d DisplaySettings) MarshalJSON() ([]byte, error) {
|
|
// Yaw and pitch are swapped in this display.
|
|
d.EntityRotation[0], d.EntityRotation[1] = d.EntityRotation[1], d.EntityRotation[0]-32
|
|
m := map[string]any{
|
|
// Translate needs to be multiplied by -32 to get a rough block
|
|
// equivalent.
|
|
"translate": d.EntityOffset.Mul(-32),
|
|
// Entity is rotated by 32 degrees by default.
|
|
"rotate": d.EntityRotation,
|
|
"scale": [3]float64{1, 1, 1},
|
|
}
|
|
if (d.EntityScale != mgl64.Vec3{}) {
|
|
m["scale"] = d.EntityScale
|
|
}
|
|
return json.Marshal(m)
|
|
}
|