ripple-api/vendor/gopkg.in/thehowl/go-osuapi.v1/mods.go

112 lines
2.0 KiB
Go
Raw Normal View History

2017-01-14 17:42:10 +00:00
package osuapi
// Mods in the game.
const (
ModNoFail Mods = 1 << iota
ModEasy
ModNoVideo
ModHidden
ModHardRock
ModSuddenDeath
ModDoubleTime
ModRelax
ModHalfTime
ModNightcore
ModFlashlight
ModAutoplay
ModSpunOut
ModRelax2
ModPerfect
ModKey4
ModKey5
ModKey6
ModKey7
ModKey8
ModFadeIn
ModRandom
ModLastMod
ModKey9
ModKey10
ModKey1
ModKey3
ModKey2
ModFreeModAllowed = ModNoFail | ModEasy | ModHidden | ModHardRock | ModSuddenDeath | ModFlashlight | ModFadeIn | ModRelax | ModRelax2 | ModSpunOut | ModKeyMod
ModKeyMod = ModKey4 | ModKey5 | ModKey6 | ModKey7 | ModKey8
)
// Mods is a bitwise enum of mods used in a score.
//
// Mods may appear complicated to use for a beginner programmer. Fear not!
// This is how hard they can get for creation of a mod combination:
//
// myModCombination := osuapi.ModHardRock | osuapi.ModDoubleTime | osuapi.ModHidden | osuapi.ModSpunOut
//
// As for checking that an existing mod comination is enabled:
//
// if modCombination&osuapi.ModHardRock != 0 {
// // HardRock is enabled
// }
//
// To learn more about bitwise operators, have a look at it on wikipedia:
// https://en.wikipedia.org/wiki/Bitwise_operation#Bitwise_operators
type Mods int
var modsString = [...]string{
"NF",
"EZ",
"NV",
"HD",
"HR",
"SD",
"DT",
"RX",
"HT",
"NC",
"FL",
"AU", // Auto.
"SO",
"AP", // Autopilot.
"PF",
"K4",
"K5",
"K6",
"K7",
"K8",
"K9",
"RN", // Random
"LM", // LastMod. Cinema?
"K9",
"K0",
"K1",
"K3",
"K2",
}
// ParseMods parse a string with mods in the format "HDHRDT"
func ParseMods(mods string) (m Mods) {
modsSl := make([]string, len(mods)/2)
for n, modPart := range mods {
modsSl[n/2] += string(modPart)
}
for _, mod := range modsSl {
for index, availableMod := range modsString {
if availableMod == mod {
m |= 1 << uint(index)
break
}
}
}
return
}
func (m Mods) String() (s string) {
for i := 0; i < len(modsString); i++ {
activated := 1&m == 1
if activated {
s += modsString[i]
}
m >>= 1
}
return
}