-
Notifications
You must be signed in to change notification settings - Fork 7
/
DestroyEffect.go
51 lines (42 loc) · 1.57 KB
/
DestroyEffect.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package object
// DestroyEffect is a packed type describing effects during object destruction.
type DestroyEffect byte
const (
destroyEffectValueMask byte = 0x1F
destroyEffectSoundMask byte = 0x60
destroyEffectExplosionMask byte = 0x80
// DestroyEffectValueLimit is the maximum the value can take.
DestroyEffectValueLimit = destroyEffectValueMask
)
// WithValue returns a new destroy effect with given value.
func (effect DestroyEffect) WithValue(value byte) DestroyEffect {
return DestroyEffect((byte(effect) & ^destroyEffectValueMask) | value)
}
// Value returns the effect value.
func (effect DestroyEffect) Value() byte {
return byte(effect) & destroyEffectValueMask
}
// WithSound returns a new destroy effect that has sound playback marked.
func (effect DestroyEffect) WithSound(value bool) DestroyEffect {
soundValue := byte(0)
if value {
soundValue = 0x20
}
return DestroyEffect((byte(effect) & ^destroyEffectSoundMask) | soundValue)
}
// PlaySound returns true if a sound shall be played.
func (effect DestroyEffect) PlaySound() bool {
return (byte(effect) & destroyEffectSoundMask) != 0
}
// WithExplosion returns a new destroy effect that has explosion display marked.
func (effect DestroyEffect) WithExplosion(value bool) DestroyEffect {
explosionValue := byte(0)
if value {
explosionValue = 0x80
}
return DestroyEffect((byte(effect) & ^destroyEffectExplosionMask) | explosionValue)
}
// ShowExplosion returns true if an explosion shall be shown.
func (effect DestroyEffect) ShowExplosion() bool {
return (byte(effect) & destroyEffectExplosionMask) != 0
}