Rise
The Vieneo Province
MarkerBeacons.cpp
Go to the documentation of this file.
1 #include "Module.h"
2 #include "../GridProperties.h"
3 #include "../MathUtilities.h"
4 
5 void MarkerBeacons::FrameMove(float fElapsed)
6 {
7  if (!sound)
8  return;
9 
10  switch (checking)
11  {
12  case Bus::MarkerBeaconTypes::Outer: // 1 NM (1.85km) inside of the FAF LUMEN
13  Check(D3DXVECTOR3(-1285.193f, -2633.716f, 231.8641f));
14  checking = Bus::MarkerBeaconTypes::Middle;
15  break;
16  case Bus::MarkerBeaconTypes::Middle: // 0.5-0.8 NM (1km) from threshold (DH point) (actually 2km in our case)
17  Check(D3DXVECTOR3(-1285.639f, -2634.818f, 218.8949f));
18  checking = Bus::MarkerBeaconTypes::Inner;
19  break;
20  case Bus::MarkerBeaconTypes::Inner: // threshold
21  Check(D3DXVECTOR3(-1285.7f, -2634.95f, 216.924f));
22  //checking = Bus::MarkerBeaconTypes::Outer;
23  //break;
24  case Bus::MarkerBeaconTypes::None:
25  checking = Bus::MarkerBeaconTypes::Outer;
26  break;
27  }
28 }
29 
30 void MarkerBeacons::Check(const D3DXVECTOR3& marker) const
31 {
32  float volume = 0.0f;
33 
34  if (ourcockpit.power > 0.5f && playerships[0].reference == REF_APNMODE && gridProperties->markerBeaconsPowered)
35  {
36  const D3DXVECTOR3 diff = marker - playerships[0].position;
37  const float dist = D3DXVec3Length(&diff);
38  // The valid signal area is a 2,400 ft (730 m) × 4,200 ft (1,280 m) ellipse (as measured 1,000 ft (300 m) above the antenna.)
39  // If he is traveling 165 knots on final that is 85 m/s 8 seconds or 680 meters
40  // 0 meters, lets limit to 300 meters? // so at 0 it is 1 and and at 0.3 it is 0
41  if (checking == Bus::MarkerBeaconTypes::Inner)
42  volume = Clamp(1.0f - 3.333333f * dist, 0, 1);
43  // 300 meters should be 1.0 ... so at 0.3 it is 1, at 1 it is 0
44  else if (checking == Bus::MarkerBeaconTypes::Middle)
45  volume = Clamp(1.428571f - 1.428571f * dist, 0, 1);
46  else // 840 meters should be 1.0 ... so at .84 it is 1, at 1.84 it is 0
47  volume = Clamp(1.84f - dist, 0, 1);
48  }
49 
50  if (volume == 0.0f)
51  {
53  bus->MarkerBeacon = Bus::MarkerBeaconTypes::None;
54  }
55  else
56  {
57  sound->PlayEx(SOUND_OUTERMARKER + checking - 1, true, volume);
59  }
60 }
61 
62 MarkerBeacons::MarkerBeacons(Bus* prmBus, Logger* prmLogger, Sound* prmSound, GridProperties* prmGridProperties) : Module(prmBus)
63 {
64  logger = prmLogger;
65  sound = prmSound;
66  gridProperties = prmGridProperties;
67 }
Scockpit ourcockpit
Definition: globals.cpp:176
float power
Definition: globals.h:608
Definition: Sound.h:276
D3DXVECTOR3 position
Definition: globals.h:549
Definition: Logger.h:9
MarkerBeacons(Bus *prmBus, Logger *prmLogger, Sound *prmSound, GridProperties *prmGridProperties)
s_network_objects playerships[MAX_SCAN]
Definition: globals.cpp:174
void FrameMove(float fElapsedTime) override
bool markerBeaconsPowered
Definition: GridProperties.h:5
Definition: Bus.h:16
float Clamp(float val, float min, float max)
Definition: MathUtilities.h:3
Definition: Module.h:12
enum Bus::MarkerBeaconTypes MarkerBeacon
Bus::MarkerBeaconTypes checking
Definition: Module.h:433
Bus * bus
Definition: Module.h:17
Logger * logger
Definition: Module.h:430
void Stop(int soundEnum)
Definition: Sound.cpp:1946
void PlayEx(int soundEnum, bool loop, float volume=1.0f, float frequencyMod=1.0f, float pan=0.0f, bool restart=true)
Definition: Sound.cpp:606
GridProperties * gridProperties
Definition: Module.h:434
Sound * sound
Definition: Module.h:431
void Check(const D3DXVECTOR3 &marker) const