goplanemp

package module
v0.0.0-...-9c16395 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 28, 2015 License: MIT Imports: 14 Imported by: 0

README

goplanemp

GoDoc

Multiplayer-Bibliothek für X-Plane. Die Umsetzung basiert auf dem Code der libxplanemp Bibliothek. Weitere Informationen unter https://github.com/wadesworld2112/libxplanemp.

Für die Darstellung können vorhandene CSL-Pakete genutzt werden. Zusätzlich unterstützt diese Bibliothek auch die Darstellung von OBJ8-Objekten. Bei den OBJ8-Objekte werden auch Animationen unterstützt.

Die Bibliothek kann in einem X-Plane Plugin wie folgt genutzt werden:

Voraussetzungen

Diese Bibliothek kann in Plugins verwendet werden, die in der Programmiersprace GO geschrieben sind. Zusätzlich verwendet es die GO-Bindings des X-Plane SDKs. Sie werden im Projekt goplane verwaltet.

Erstellung des MultiplayerManagers

Schritt 1 (während der Start-Phase des Plugins) MultiplayerManager angelegen

config := NewDefaultConfiguration()
mpManager, err := New(cslPath, relatedTxt, lightsPng, defaultIcao, config)

Schritt 2 (während der Enable-Phase des Plugins) MultiplayerManager aktivieren

if mpManager != nil {
	mpManager.Enable()
}

Neue Flugzeuge und Fahrzeuge hinzufügen

Flugzeuge und Fahrzeuge können über die CreatePlane-Funktion hinzugefügt werden. Dazu muss das ICAO-Kürzel des Flugzeugs und der Airline und ggf. ein Livery angegeben werden. Welches Objekt der MultiplayerManager auswählt, erfolgt nach dieser Reihenfolge:

1. ICAO, Airline und Livery stimmen überein
2. ICAO und Airline stimmen überein
3. verwandter ICAO, Airline und Livery stimmen überein
4. verwandter ICAO und Airline stimmen überein
5. ICAO stimmt überein
6. verwandter ICAO stimmt überein
7. Standard-ICAO stimmt überein
8. verwandter Standard-ICAO stimmt überein
9. beliebiges Flugzeug nehmen

Beispiel zum Hinzufügen eines neuen Flugzeugs

planeId := mpManager.CreatePlane("B738", "BER", "WL", dataFunc, ref)

Unterstütze Plattformen

License

This library is distributed under license found in the LICENSE file.

Documentation

Overview

Multiplayer-Bibliothek für X-Plane. Die Umsetzung basiert auf dem Code der libxplanemp Bibliothek. Weitere Informationen unter https://github.com/wadesworld2112/libxplanemp.

Für die Darstellung können vorhandene CSL-Pakete genutzt werden. Zusätzlich unterstützt diese Bibliothek auch die Darstellung von OBJ8-Objekten. Bei den OBJ8-Objekte werden auch Animationen unterstützt.

Die Bibliothek kann in einem X-Plane Plugin wie folgt genutzt werden:

Erstellung des MultiplayerManagers

Schritt 1 (während der Start-Phase des Plugins) MultiplayerManager angelegen

config := NewDefaultConfiguration()
mpManager, err := New(cslPath, relatedTxt, lightsPng, defaultIcao, config)

Schritt 2 (während der Enable-Phase des Plugins) MultiplayerManager aktivieren

if mpManager != nil {
	mpManager.Enable()
}

Neue Flugzeuge und Fahrzeuge hinzufügen

Flugzeuge und Fahrzeuge können über die CreatePlane-Funktion hinzugefügt werden. Dazu muss das ICAO-Kürzel des Flugzeugs und der Airline und ggf. ein Livery angegeben werden. Welches Objekt der MultiplayerManager auswählt, erfolgt nach dieser Reihenfolge:

  1. ICAO, Airline und Livery stimmen überein
  2. ICAO und Airline stimmen überein
  3. verwandter ICAO, Airline und Livery stimmen überein
  4. verwandter ICAO und Airline stimmen überein
  5. ICAO stimmt überein
  6. verwandter ICAO stimmt überein
  7. Standard-ICAO stimmt überein
  8. verwandter Standard-ICAO stimmt überein
  9. beliebiges Flugzeug nehmen

Beispiel zum Hinzufügen eines neuen Flugzeugs

planeId := mpManager.CreatePlane("B738", "BER", "WL", dataFunc, ref)

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Configuration

type Configuration struct {
	FullDistance           float32 //Entfernung in km bis zu der das Objekt voll gezeichnet wird, danach nur noch die Lichter
	Resolution             int     //Auflösung für OBJ7-Texturen (0[schlechteste Qualität] .. 5 [beste Qualität])
	CalculationMod         int     //Modulo-Wert für die Abfrage der Daten (je niedriger der Wert umso öfter werden die Daten abgerufen)
	EnableRenderStatistics bool    //Flag ob Statistiken zum DefaultRenderer als DataRef zur Verfügung gestellt werden sollen
	RenderAircraftLabels   bool    //Flag ob Labels gezeichnet werden sollen
	UseAnyLitTexture       bool    //Flag ob bei fehlender Nachttextur eine beliebige andere Nachttextur des Models genommen werden soll
	MergeLitTextures       bool    //Flag ob die Nachttexturen mit der Tagtextur gemischt werden soll (besseres Aussehen)
	UseObj8Lights          bool    //Flag ob bei OBJ7-Objekten anstatt der eigenen Lichter die neuen OBJ8 Lichter genutzt werden sollen
	DisableObj8LightSpills bool    //Flag ob bei OBJ8-Objekten die LightSpills entfernt werden sollen (bessere Performance)
}

Enthält die Einstellungen für die Multiplayer-Bibliothek

func NewDefaultConfiguration

func NewDefaultConfiguration() *Configuration

Erzeugt eine neue Standardkonfiguration

FullDistance           = 5.0 km
Resolution             = 3
CalculationMod         = 50
EnableRenderStatistics = false
RenderAircraftLabels   = false
UseAnyLitTexture       = false
MergeLitTextures       = false
UseObj8Lights          = false
DisableObj8LightSpills = true

type LightStatus

type LightStatus struct {
	TimeOffset    int           //Offset für die Berechnung der Strobe und Beacon-Lichter
	LandingLights bool          //Zustand der Landelichter
	BeaconLights  bool          //Zustand der Beacon-Lights
	StrobeLights  bool          //Zustand der Strobe-Lights
	NavLights     bool          //Zustand der Navigationslichter
	TaxiLights    bool          //Zustand der Taxi-Lights
	FlashPattern  LightsPattern //Muster für die Beacon- und Strobe-Lights
}

Enthält die Informationen über die Beleuchtung

type LightsPattern

type LightsPattern int

Muster für die Strobe- und Beacon-Lichter

const (
	LightsPattern_Default LightsPattern = 0 // Jets: one strobe flash, short beacon (-*---*---*---)
	LightsPattern_EADS    LightsPattern = 1 // Airbus+EADS: strobe flashes twice (-*-*-----*-*--), short beacon
	LightsPattern_GA      LightsPattern = 2 // GA: one strobe flash, long beacon (-*--------*---)
)

type MultiplayerManager

type MultiplayerManager struct {
	// contains filtered or unexported fields
}

Schnittstelle zur Multiplayer-Bibliothek

func New

func New(cslFolder, relatedFile, lightsFile, defaultICAO string, config *Configuration) (*MultiplayerManager, error)

Erzeugt einen neuen MultiplayerManager

func (*MultiplayerManager) ChangePlaneModel

func (self *MultiplayerManager) ChangePlaneModel(id PlaneId, icao, airline, livery string)

Ändert für ein Flugzeug das Aussehen. Dabei kommen die gleichen Regeln wie bei CreatePlane zum Einsatz.

func (*MultiplayerManager) CountPlanes

func (self *MultiplayerManager) CountPlanes() int

Liefert die Anzahl der aktuell verwalteten Flugzeuge zurück

func (*MultiplayerManager) CreatePlane

func (self *MultiplayerManager) CreatePlane(icao, airline, livery string, dataFunc PlaneDataFunc, refData interface{}) PlaneId

Fügt ein neues Flugzeug dem Manager hinzu. Dazu wird versucht entsprechend der Angaben das genaue Flugzeug zu finden. Die Datenbereitstellung erfolgt über die PlaneDataFunc. Die zusätzlichen refData werden an die PlaneDataFunc übergeben.

func (*MultiplayerManager) DestroyPlane

func (self *MultiplayerManager) DestroyPlane(id PlaneId)

Entfernt das übergebene Flugzeug aus der Überwachung des MultiplayerManagers. Nach diesem Aufruf wird das Flugzeug nicht mehr gezeichnet.

func (*MultiplayerManager) DisableAircraftLabels

func (self *MultiplayerManager) DisableAircraftLabels()

Deaktiviert das Zeichnen der Flugzeugbeschriftungen.

func (*MultiplayerManager) DrawingAircraftLabels

func (self *MultiplayerManager) DrawingAircraftLabels() bool

Gibt an, ob die Flugzeugbeschriftungen gezeichnet werden.

func (*MultiplayerManager) DumpOneCycle

func (self *MultiplayerManager) DumpOneCycle()

Dumpt alle Informationen eines Zykluses in die Log-Datei von X-Plane.

func (*MultiplayerManager) Enable

func (self *MultiplayerManager) Enable() error

Aktiviert den MultiplayerManager. Erst nach diesem Aufruf können neue Objekte erzeugt werden.

func (*MultiplayerManager) EnableAircraftLabels

func (self *MultiplayerManager) EnableAircraftLabels()

Aktiviert das Zeichnen der Flugzeugbeschriftungen.

func (*MultiplayerManager) GetConfiguration

func (self *MultiplayerManager) GetConfiguration() *Configuration

Liefert die aktuelle Konfiguration

func (*MultiplayerManager) GetNthPlane

func (self *MultiplayerManager) GetNthPlane(index int) (PlaneId, bool)

Liefert die ID des übergebenes Index zurück. Der boolsche Wert zeigt an, ob der Index gefunden wurde oder nicht.

func (*MultiplayerManager) GetPlaneData

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 (*MultiplayerManager) GetPlaneICAOAndLivery

func (self *MultiplayerManager) GetPlaneICAOAndLivery(id PlaneId) (icao, livery string, found bool)

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 (*MultiplayerManager) IsICAOValid

func (self *MultiplayerManager) IsICAOValid(icao string) bool

Überprüft ob der übergebene ICAO-Wert gültig ist, d.h. ob es Flugzeuge in den CSL-Paketen mit diesem ICAO gibt

func (*MultiplayerManager) SetDefaultPlaneICAO

func (self *MultiplayerManager) SetDefaultPlaneICAO(defaultICAO string)

Ändert das Standard-ICAO-Kürzel für die Ermittlung des Flugzeugs, wenn das gewünschte ICAO nicht registriert ist.

func (*MultiplayerManager) SetPlaneRenderer

func (self *MultiplayerManager) SetPlaneRenderer(renderer Renderer, ref interface{})

Setzt die Renderer-Implementierung die genutzt werden soll. Soll der Standardrenderer genutzt werden, dann sieht der Aufruf wie folgt aus:

mpManager.SetPlaneRenderer(renderer.NewDefaultRenderer(config), nil)

type Plane

type Plane struct {
	PlaneId       PlaneId
	CslAircraft   *csl.CslAircraft //zugeordnete CSl-Definition
	TextureNum    int32            //Nummer der Textur für den Tag
	LitTextureNum int32            //Nummer der Textur für die Nacht
	PositionData  *PlanePosition   //aktuelle Positionsdaten
	SurfacesData  *PlaneSurfaces   //aktuelle Steuerungsdaten
	RadarData     *PlaneRadar      //aktuelle Radardaten
	RenderFull    bool             //Flag ob das Flugzeug voll oder nur die Lichter gezeichnet werden sollen
	// contains filtered or unexported fields
}

Enthält die notwendigen Daten für die Verwaltung eines Flugzeugs BUG(abieberbach) Unterstützung für ACF-Flugzeuge wurde entfernt

func (*Plane) UpdateData

func (self *Plane) UpdateData(now int, dataType PlaneDataType) PlaneCallbackResult

type PlaneCallbackResult

type PlaneCallbackResult int

Ergebnis des Callback Aufrufs

const (
	Data_Unavailable PlaneCallbackResult = 0 // Information kann nicht ermittelt werden
	Data_Unchanged   PlaneCallbackResult = 1 // Information hat sich seit dem letzten Aufruf nicht geändert
	Data_NewData     PlaneCallbackResult = 2 // Informationen haben sich seit dem letzten Aufruf geändert
)

type PlaneDataFunc

type PlaneDataFunc func(id PlaneId, dataType PlaneDataType, ref interface{}) (PlaneCallbackResult, *PlanePosition, *PlaneSurfaces, *PlaneRadar)

Callback-Funktion zur Ermittlung der gewünschten Daten. Alle nicht abgefragten Daten haben als Ergebnis "nil".

type PlaneDataType

type PlaneDataType int

Art der abgefragten Daten

const (
	DataType_Position PlaneDataType = 0 //Positionsdaten des Objekts
	DataType_Surfaces PlaneDataType = 1 //Steuerinformationen des Objekts
	DataType_Radar    PlaneDataType = 2 //Radarinformationen des Objekts
)

type PlaneId

type PlaneId int

ID des Flugzeugs

type PlanePosition

type PlanePosition struct {
	Lat       float64 //Breitengrad
	Lon       float64 //Längengrad
	Elevation float64 //Höhe MSL (in Fuss)
	Pitch     float32 //aktueller Pitch-Winkel
	Roll      float32 //aktueller Roll-Winkel
	Heading   float32 //aktueller Heading-Winkel
	Label     string  //Bezeichnung
}

Positionsdaten des Objektes

type PlaneRadar

type PlaneRadar struct {
	Code int
	Mode TransponderMode
}

Enthält die Radar-Informationen

type PlaneSurfaces

type PlaneSurfaces struct {
	GearPosition    float32     //Position des Fahrwerks [0 (eingefahren) .. 1 (ausgefahren)]
	FlapRatio       float32     //Position der Flaps [0 (eingefahren) .. 1 (ausgefahren)]
	SpoilerRatio    float32     //Position der Spoiler [0 (eingefahren) .. 1 (ausgefahren)]
	SpeedBrakeRatio float32     //Position der Speedbrakes [0 (eingefahren) .. 1 (ausgefahren)]
	SlatRatio       float32     //Position des Slats [0 (eingefahren) .. 1 (ausgefahren)]
	WingSweep       float32     //Position der Flügel
	Thrust          float32     //aktueller Schub [-1 (voller Umkehrschub) .. [0] (kein Schub) .. 1 (voller Schub)]
	YokePitch       float32     //aktuller Pitch-Winkel des Yoke
	YokeHeading     float32     //aktuller Heading-Winkel des Yoke
	YokeRoll        float32     //aktuller Roll-Winkel des Yoke
	Lights          LightStatus //aktueller Zustand der Lichter
}

Enthält die Daten für die Steuerflächen

type Renderer

type Renderer interface {
	//Initialisiert den Renderer.
	Init()
	//Zeichnet alle übergebenen Flugzeuge.
	Render(isBlend, renderAircraftLabels bool, aircrafts []*Plane, ref interface{})
}

Schnittstelle für eine eigene Renderer-Implementierung

type TransponderMode

type TransponderMode int

Transponder Modus

const (
	TransponderMode_Standby     TransponderMode = 0 //Modus: Standby
	TransponderMode_Mode3A      TransponderMode = 1 //Modus: 3a
	TransponderMode_ModeC       TransponderMode = 2 //Modus: C
	TransponderMode_ModeC_Low   TransponderMode = 3 //Modus: C Low
	TransponderMode_ModeC_Ident TransponderMode = 4 //Modus: C Ident
)

Notes

Bugs

  • Unterstützung für ACF-Flugzeuge wurde entfernt

Directories

Path Synopsis
Enthält zusätzliche Funktionalitäten, die in der libxplanemp-Bibliothek nicht verfügbar sind.
Enthält zusätzliche Funktionalitäten, die in der libxplanemp-Bibliothek nicht verfügbar sind.
OpenGL-Bindings für das Zeichnen der Objekte
OpenGL-Bindings für das Zeichnen der Objekte
OpenGL GLU-Bindings für das Zeichnen der Objekte
OpenGL GLU-Bindings für das Zeichnen der Objekte
internal
csl
Enthält die Standardimplementierung für das Zeichnen der Objekte
Enthält die Standardimplementierung für das Zeichnen der Objekte

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL