74 lines
2.5 KiB
Go
74 lines
2.5 KiB
Go
package object
|
|
|
|
// Bitmap3D describes how a bitmap object should be represented in 3D world.
|
|
type Bitmap3D uint16
|
|
|
|
const (
|
|
bitmap3DBitmapNumberLowMask uint16 = 0x03FF
|
|
bitmap3DBitmapNumberHighMask uint16 = 0x8000
|
|
bitmap3DBitmapNumberMask = bitmap3DBitmapNumberLowMask | bitmap3DBitmapNumberHighMask
|
|
bitmap3DAnimationMask uint16 = 0x0400
|
|
bitmap3DRepeatMask uint16 = 0x0800
|
|
bitmap3DFrameNumberMask uint16 = 0x7000
|
|
|
|
// Bitmap3DBitmapNumberLimit is the maximum amount of bitmaps.
|
|
Bitmap3DBitmapNumberLimit uint16 = 0x07FF
|
|
// Bitmap3DFrameNumberLimit is the maximum amount of frames.
|
|
Bitmap3DFrameNumberLimit uint16 = 0x0007
|
|
)
|
|
|
|
// WithBitmapNumber returns a Bitmap3D with the given value.
|
|
func (bmp Bitmap3D) WithBitmapNumber(value uint16) Bitmap3D {
|
|
bitmapValue := value & bitmap3DBitmapNumberLowMask
|
|
if value >= Bitmap3DBitmapNumberLimit {
|
|
bitmapValue = bitmap3DBitmapNumberMask
|
|
} else if value > bitmap3DBitmapNumberLowMask {
|
|
bitmapValue |= bitmap3DBitmapNumberHighMask
|
|
}
|
|
return Bitmap3D((uint16(bmp) & ^bitmap3DBitmapNumberMask) | bitmapValue)
|
|
}
|
|
|
|
// BitmapNumber returns the number of bitmaps.
|
|
func (bmp Bitmap3D) BitmapNumber() uint16 {
|
|
return ((uint16(bmp) & bitmap3DBitmapNumberHighMask) >> 5) | (uint16(bmp) & bitmap3DBitmapNumberLowMask)
|
|
}
|
|
|
|
// WithFrameNumber returns a Bitmap3D with the given value.
|
|
func (bmp Bitmap3D) WithFrameNumber(value uint16) Bitmap3D {
|
|
frameValue := (value % (Bitmap3DFrameNumberLimit + 1)) << 12
|
|
return Bitmap3D((uint16(bmp) & ^bitmap3DFrameNumberMask) | frameValue)
|
|
}
|
|
|
|
// FrameNumber returns the frame number.
|
|
func (bmp Bitmap3D) FrameNumber() uint16 {
|
|
return (uint16(bmp) & bitmap3DFrameNumberMask) >> 12
|
|
}
|
|
|
|
// WithAnimation returns a Bitmap3D with the given value.
|
|
func (bmp Bitmap3D) WithAnimation(value bool) Bitmap3D {
|
|
animationValue := uint16(0)
|
|
if value {
|
|
animationValue = bitmap3DAnimationMask
|
|
}
|
|
return Bitmap3D((uint16(bmp) & ^bitmap3DAnimationMask) | animationValue)
|
|
}
|
|
|
|
// Animation returns whether this object is animated.
|
|
func (bmp Bitmap3D) Animation() bool {
|
|
return (uint16(bmp) & bitmap3DAnimationMask) != 0
|
|
}
|
|
|
|
// WithRepeat returns a Bitmap3D with the given value.
|
|
func (bmp Bitmap3D) WithRepeat(value bool) Bitmap3D {
|
|
repeatValue := uint16(0)
|
|
if value {
|
|
repeatValue = bitmap3DRepeatMask
|
|
}
|
|
return Bitmap3D((uint16(bmp) & ^bitmap3DRepeatMask) | repeatValue)
|
|
}
|
|
|
|
// Repeat returns whether this object repeats its animation.
|
|
func (bmp Bitmap3D) Repeat() bool {
|
|
return (uint16(bmp) & bitmap3DRepeatMask) != 0
|
|
}
|