/
observation.go
71 lines (64 loc) · 2.44 KB
/
observation.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
//Copyright (c) 2015. The goplanemp AUTHORS. All rights reserved.
//
// Use of this source code is governed by a license that can be found in the LICENSE file.
package goplanemp
import (
"github.com/abieberbach/goplane/xplm/processing"
"github.com/abieberbach/goplanemp/internal/csl"
)
//Liefert die Anzahl der aktuell verwalteten Flugzeuge zurück
func (self *MultiplayerManager) CountPlanes() int {
return len(self.planes)
}
// Liefert die ID des übergebenes Index zurück. Der boolsche Wert zeigt an, ob der Index gefunden wurde oder nicht.
func (self *MultiplayerManager) GetNthPlane(index int) (PlaneId, bool) {
if index < 0&&index >= self.CountPlanes() {
return PlaneId(-1), false
}
i := 0
self.planesMutex.RLock()
defer self.planesMutex.RUnlock()
for _, plane := range self.planes {
if i == index {
return plane.PlaneId, true
}
i++
}
return PlaneId(-1), false
}
//Liefert das ICAO-Kürzel und das Livery für das übergebene Flugzeug zurück. Der boolsche Wert zeigt an, ob die ID gültig war.
func (self *MultiplayerManager) GetPlaneICAOAndLivery(id PlaneId) (icao, livery string, found bool) {
plane, index := self.getPlane(id)
if index>=0 {
icao = plane.CslAircraft.Icao
livery = plane.CslAircraft.Livery
found=true
} else {
found = false
}
return
}
//Liefert die aktuellen Daten entsprechend des Übergebenen Datentyp für das gewünschte Flugzeug zurück.
//Alle anderen Zeiger sind nil. Zusätzlich liefert die Methode das Alter der Daten und den Rückgabewert des Callback-Moduls zurück
func (self *MultiplayerManager) GetPlaneData(id PlaneId, dataType PlaneDataType) (int, PlaneCallbackResult, *PlanePosition, *PlaneSurfaces, *PlaneRadar) {
plane, index := self.getPlane(id)
if index==-1 {
return -1, Data_Unavailable, nil, nil, nil
}
now := processing.GetCycleNumber()
callbackResult := plane.UpdateData(now, dataType)
switch dataType {
case DataType_Position:
return plane.positionDataAge, callbackResult, plane.PositionData, nil, nil
case DataType_Surfaces:
return plane.surfacesDataAge, callbackResult, nil, plane.SurfacesData, nil
case DataType_Radar:
return plane.radarDataAge, callbackResult, nil, nil, plane.RadarData
default:
return -1, Data_Unavailable, nil, nil, nil
}
}
//Überprüft ob der übergebene ICAO-Wert gültig ist, d.h. ob es Flugzeuge in den CSL-Paketen mit diesem ICAO gibt
func (self *MultiplayerManager) IsICAOValid(icao string) bool {
return csl.CslManagerInstance.IsICAOValid(icao)
}