00001
00002
00003
00004
00005
00006
00007
00008
00009 #import "GameController.h"
00010
00011
00012 @implementation GameController
00013
00014 - (void) awakeFromNib {
00015
00016
00017
00018
00019
00020 [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"SP_WARNING"
00021 object:nil useLocks:NO useMainRunLoop:YES];
00022 [notificationCenter addObserver:self selector:@selector(newMessage:) name:@"PM_WARNING"
00023 object:nil useLocks:NO useMainRunLoop:NO];
00024 [notificationCenter addObserver:self selector:@selector(newInfoMessage:) name:@"GV_MODE_INFO"
00025 object:nil useLocks:NO useMainRunLoop:NO];
00026 universe = [Universe defaultInstance];
00027
00028
00029 [armiesBar setDiscrete:YES];
00030 [torpsBar setDiscrete:YES];
00031
00032
00033
00034
00035 synth = [[NSSpeechSynthesizer alloc] initWithVoice:@"com.apple.speech.synthesis.voice.Trinoids"];
00036 shouldSpeak = YES;
00037
00038
00039
00040 [synth setDelegate:self];
00041 }
00042
00043 - (void) setSpeakComputerMessages:(bool)speak {
00044 shouldSpeak = speak;
00045 }
00046
00047 - (void) repaint {
00048
00049
00050
00051 [self updateDashboard:[universe playerThatIsMe]];
00052
00053
00054 if ([messages hasChanged]) {
00055
00056 [messages setNeedsDisplay:YES];
00057 }
00058
00059 if ([playerList hasChanged]) {
00060 NSLog(@"GameController.repaint repainting playerList view");
00061 [playerList setNeedsDisplay:YES];
00062 }
00063
00064
00065 [mapView setNeedsDisplay:YES];
00066
00067 [gameView setNeedsDisplay:YES];
00068
00069 }
00070
00071 - (void) newInfoMessage:(NSString*)message {
00072
00073 if ([[messageTextField stringValue] isEqualToString:message]) {
00074 return;
00075 }
00076 [messageTextField setStringValue:message];
00077 }
00078
00079 - (void) newMessage:(NSString*)message {
00080
00081 [self newInfoMessage:message];
00082
00083
00084 if (shouldSpeak && (![synth isSpeaking])) {
00085 [synth startSpeakingString:message];
00086 }
00087
00088 }
00089
00090 - (void) updateBar:(LLBar*) bar andTextValue:(NSTextField*)field
00091 withValue:(int)value max:(int)maxValue inverseWarning:(bool)inverse {
00092 [self updateBar:bar andTextValue:field withValue:value max:maxValue
00093 tempMax:maxValue inverseWarning:inverse];
00094 }
00095
00096 - (void) updateBar:(LLBar*) bar andTextValue:(NSTextField*)field
00097 withValue:(int)value max:(int)maxValue tempMax:(int)tempMax inverseWarning:(bool)inverse {
00098
00099
00100
00101 if (bar == nil) {
00102 return;
00103 }
00104
00105
00106 if ([bar max] != maxValue) {
00107 NSLog(@"GameController.updateBar %@ setting max to %d", [bar name], maxValue);
00108 if (field != nil) {
00109 [field setStringValue:[NSString stringWithFormat:@"%d / %d", value, tempMax]];
00110 }
00111 [bar setMax:maxValue * 1.0];
00112 if (inverse) {
00113 [bar setCritical:maxValue * 0.5];
00114 [bar setWarning:maxValue * 0.3];
00115 } else {
00116 [bar setCritical:maxValue * 0.3];
00117 [bar setWarning:maxValue * 0.5];
00118 }
00119 [bar setNeedsDisplay:YES];
00120 }
00121 if ([bar tempMax] != tempMax) {
00122 NSLog(@"GameController.updateBar %@ setting tempMax to %d", [bar name], tempMax);
00123 [bar setTempMax:tempMax * 1.0];
00124 [bar setNeedsDisplay:YES];
00125 if (field != nil) {
00126 [field setStringValue:[NSString stringWithFormat:@"%d / %d", value, tempMax]];
00127 }
00128 }
00129 if ([bar value] != value) {
00130
00131 if (field != nil) {
00132 [field setStringValue:[NSString stringWithFormat:@"%d / %d", value, tempMax]];
00133 }
00134 [bar setValue:value * 1.0];
00135 [bar setNeedsDisplay:YES];
00136 }
00137 }
00138
00139 - (void) updateDashboard:(Player*) me {
00140
00141 if (![me isMe]) {
00142 return;
00143 }
00144
00145 [self updateBar:hullBar andTextValue:hullValue
00146 withValue:[me hull] max:[[me ship] maxHull] inverseWarning:NO];
00147 [self updateBar:shieldBar andTextValue:shieldValue
00148 withValue:[me shield] max:[[me ship] maxShield]
00149 inverseWarning:NO];
00150 [self updateBar:fuelBar andTextValue:fuelValue
00151 withValue:[me fuel] max:[[me ship] maxFuel] inverseWarning:NO];
00152 [self updateBar:eTempBar andTextValue:eTempValue
00153 withValue:[me engineTemp] / 10 max:[[me ship] maxEngineTemp] / 10
00154 inverseWarning:YES];
00155 [self updateBar:wTempBar andTextValue:wTempValue
00156 withValue:[me weaponTemp] / 10 max:[[me ship] maxWeaponTemp] / 10
00157 inverseWarning:YES];
00158 [self updateBar:speedBar andTextValue:speedValue
00159 withValue:[me speed] max:[[me ship] maxSpeed] tempMax:[me maxSpeed] inverseWarning:YES];
00160
00161 [self updateBar:armiesBar andTextValue:nil
00162 withValue:[me armies] max:[[me ship] maxArmies] tempMax:[me maxArmies] inverseWarning:NO];
00163 [self updateBar:torpsBar andTextValue:nil
00164 withValue:[me availableTorps] max:[me maxTorps]
00165 inverseWarning:NO];
00166 [self updateBar:phasersBar andTextValue:nil
00167 withValue:[me availablePhaserShots] max:[me maxPhaserShots]
00168 inverseWarning:NO];
00169 }
00170
00171 - (void) setKeyMap:(MTKeyMap *)newKeyMap {
00172
00173 [gameView setKeyMap:newKeyMap];
00174 }
00175
00176 - (void) setPainter:(PainterFactory*)newPainter {
00177 [gameView setPainter:newPainter];
00178 }
00179
00180 - (void) startGame {
00181
00182
00183
00184 }
00185
00186 @end