]> git.mxchange.org Git - flightgear.git/blob - src/ATCDCL/ATISmgr.cxx
httpd: don't spam the console with debug messages
[flightgear.git] / src / ATCDCL / ATISmgr.cxx
1 // ATISmgr.cxx - Implementation of FGATISMgr - a global Flightgear ATIS manager.
2 //
3 // Written by David Luff, started February 2002.
4 //
5 // Copyright (C) 2002  David C Luff - david.luff@nottingham.ac.uk
6 // Copyright (C) 2012  Thorsten Brehm
7 //
8 // This program is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU General Public License as
10 // published by the Free Software Foundation; either version 2 of the
11 // License, or (at your option) any later version.
12 //
13 // This program is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // General Public License for more details.
17 //
18 // You should have received a copy of the GNU General Public License
19 // along with this program; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21
22 #ifdef HAVE_CONFIG_H
23 #  include <config.h>
24 #endif
25
26 #include <simgear/misc/sg_path.hxx>
27 #include <simgear/debug/logstream.hxx>
28 #include <simgear/structure/exception.hxx>
29
30 #include <Main/fg_props.hxx>
31
32 #include "ATISmgr.hxx"
33 #include "atis.hxx"
34
35 FGATISMgr::FGATISMgr() :
36     _currentUnit(0),
37     _maxCommRadios(4)
38 #ifdef ENABLE_AUDIO_SUPPORT
39     ,useVoice(true),
40     voice(0)
41 #endif
42 {
43     globals->set_ATIS_mgr(this);
44 }
45
46 FGATISMgr::~FGATISMgr()
47 {
48     globals->set_ATIS_mgr(NULL);
49
50     for (unsigned int unit = 0;unit < radios.size(); ++unit) {
51         delete radios[unit];
52     }
53
54 #ifdef ENABLE_AUDIO_SUPPORT
55     delete voice;
56 #endif
57 }
58
59 void FGATISMgr::init()
60 {
61     for (unsigned int unit = 0;unit < _maxCommRadios; ++unit)
62     {
63         if (unit < _maxCommRadios/2)
64             radios.push_back(new FGATIS("comm", unit));
65         else
66             radios.push_back(new FGATIS("nav", unit - _maxCommRadios/2));
67     }
68 }
69
70 void FGATISMgr::reinit()
71 {
72 #ifdef ENABLE_AUDIO_SUPPORT
73     if ((voiceName != "")&&
74         (voiceName != fgGetString("/sim/atis/voice", "default")))
75     {
76         voiceName = fgGetString("/sim/atis/voice", "default");
77         delete voice;
78         voice = NULL;
79         useVoice = true;
80     }
81 #endif
82 }
83
84 void FGATISMgr::update(double dt)
85 {
86     // update only runs every now and then (1-2 per second)
87     if (++_currentUnit >= _maxCommRadios)
88         _currentUnit = 0;
89
90     FGATC* commRadio = radios[_currentUnit];
91     if (commRadio)
92         commRadio->update(dt * _maxCommRadios);
93 }
94
95 // Return a pointer to an appropriate voice for a given type of ATC
96 // creating the voice if necessary - i.e. make sure exactly one copy
97 // of every voice in use exists in memory.
98 //
99 // TODO - in the future this will get more complex and dole out country/airport
100 // specific voices, and possible make sure that the same voice doesn't get used
101 // at different airports in quick succession if a large enough selection are available.
102 FGATCVoice* FGATISMgr::GetVoicePointer(const atc_type& type)
103 {
104 #ifdef ENABLE_AUDIO_SUPPORT
105     // TODO - implement me better - maintain a list of loaded voices and other voices!!
106     if(useVoice)
107     {
108         switch(type)
109         {
110         case ATIS: case AWOS:
111             // Delayed loading for all available voices, needed because the
112             // sound manager might not be initialized (at all) at this point.
113             // For now we'll do one hard-wired one
114
115             /* I've loaded the voice even if /sim/sound/pause is true
116              *  since I know no way of forcing load of the voice if the user
117              *  subsequently switches /sim/sound/audible to true.
118              *  (which is the right thing to do -- CLO) :-)
119              */
120             if (!voice && fgGetBool("/sim/sound/working")) {
121                 voice = new FGATCVoice;
122                 voiceName = fgGetString("/sim/atis/voice", "default");
123                 try {
124                     useVoice = voice->LoadVoice(voiceName);
125                 } catch ( sg_io_exception & e) {
126                     SG_LOG(SG_ATC, SG_ALERT, "Unable to load voice '" << voiceName << "': "
127                                             << e.getFormattedMessage().c_str());
128                     useVoice = false;
129                     delete voice;
130                     voice = 0;
131                 }
132             }
133             return voice;
134         case TOWER:
135             return NULL;
136         case APPROACH:
137             return NULL;
138         case GROUND:
139             return NULL;
140         default:
141             return NULL;
142         }
143     }
144 #endif
145
146     return NULL;
147 }