This repository has been archived by the owner on Mar 7, 2022. It is now read-only.
/
evts_stats.go
73 lines (67 loc) · 1.78 KB
/
evts_stats.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package app
import (
"bytes"
"encoding/json"
"io/ioutil"
"github.com/CmdrVasquess/watched"
"git.fractalqb.de/fractalqb/ggja"
"git.fractalqb.de/fractalqb/qbsllm"
)
var (
selog = qbsllm.New(qbsllm.Lnormal, "e-status", nil, nil)
selogCfg = qbsllm.Config(selog)
)
func readStats(file string) (res ggja.GenObj) {
evt, err := ioutil.ReadFile(file)
if err != nil {
log.Panice(err)
}
selog.Debug(bytes.NewBuffer(evt))
err = json.Unmarshal(evt, &res)
if err != nil {
log.Panice(err)
}
return res
}
func statusEvent(statFile string) (chg Change) {
const flagsParked = watched.StatFlagDocked | watched.StatFlagLanded
defer recoverEvent("stats", statFile)
stats := ggja.Obj{Bare: readStats(statFile)}
writeState(noErr(func() {
flags := stats.MUint32("Flags")
cmdr.statFlags = flags
switch {
case watched.FlagsAny(flags, watched.StatFlagSupercruise):
chg |= cmdr.Loc.SetMode(Cruise)
case watched.FlagsAny(flags, flagsParked):
chg |= cmdr.Loc.SetMode(Parked)
default:
chg |= cmdr.Loc.SetMode(Move)
}
switch {
case watched.FlagsAny(flags, watched.StatFlagInMainShip):
chg |= cmdr.Loc.SetVehicle(InShip)
case watched.FlagsAny(flags, watched.StatFlagInSrv):
chg |= cmdr.Loc.SetVehicle(InSRV)
case watched.FlagsAny(flags, watched.StatFlagInFighter):
chg |= cmdr.Loc.SetVehicle(InFighter)
default:
chg |= cmdr.Loc.SetVehicle(AsCrew)
}
if watched.FlagsAny(flags, watched.StatFlagHasLatLon) {
chg |= cmdr.surfLoc.SetAlt(stats.MF64("Altitude"))
chg |= cmdr.surfLoc.SetLatLon(
stats.MF64("Latitude"),
stats.MF64("Longitude"),
)
if watched.FlagsAny(flags, watched.StatFlagDocked) {
chg |= cmdr.Loc.SetSurf(nil)
} else {
chg |= cmdr.Loc.SetSurf(&cmdr.surfLoc)
}
} else {
chg |= cmdr.Loc.SetSurf(nil)
}
}))
return chg
}