Data/Player.m

00001 //
00002 //  Player.m
00003 //  MacTrek
00004 //
00005 //  Created by Aqua on 22/04/2006.
00006 //  Copyright 2006 __MyCompanyName__. All rights reserved.
00007 //
00008 
00009 #import "Player.h"
00010 
00011 
00012 @implementation Player
00013 
00014 - (id) init {
00015     self = [super init];
00016     if (self != nil) {
00017         status = PLAYER_FREE;
00018         previousStatus = PLAYER_FREE;
00019         previousFlags = 0;
00020         playerId = -1;
00021         team = nil;
00022         ship = nil;
00023         mapChars = nil;
00024         name = nil;
00025         position.x = -1000;
00026         position.y = -1000;
00027         me = NO;
00028         name = @"??";
00029         login = @"??";
00030         monitor = @"??";
00031         stats = [[PlayerStats alloc] init];
00032         dir = 0;                                                                        // Real direction
00033         speed = 0;                                                                      // Real speed
00034         damage = 0;                                                                     // Current damage
00035         shield = 0;                                                                     // Current shield power
00036         cloakphase = 0;                                                         // Drawing stage of cloaking engage/disengage.
00037         ntorp = 0;                                                                      // Number of torps flying
00038         nplasmatorp = 0;                                                        // Number of plasma torps active
00039         hostile = 0;                                                            // Who my torps will hurt
00040         swar = 0;                                                                       // Who am I at sticky war with
00041         kills = 0;                                  // Enemies killed
00042         planet = nil;                                                   // Planet orbiting or locked onto
00043         playerLock = nil;                                                       // Player locked onto
00044         armies = 0;                                                                     // Number of armies carried
00045         fuel = 0;                                                                       // Amount of fuel
00046         explode = 0;                                                            // Keeps track of final explosion
00047         etemp = 0;                                                                      // Engine Temperature
00048         wtemp = 0;                                                                      // Weapon Temperature
00049         whydead = 0;                                                            // Tells you why you died
00050         whodead = 0;                                                            // Tells you who killed you
00051         tractor = nil;                                                          // What player is in tractor lock
00052     }
00053     return self;
00054 }
00055 
00056 - (id) initWithPlayerId:(int)player {
00057     self = [self init];
00058     if (self != nil) {
00059         playerId = player;
00060     }
00061     return self;
00062 }
00063 
00064 - (Planet*) planetLock {
00065     return planet;
00066 }
00067 
00068 - (NSString *) statusString {
00069     switch (status) {
00070     case PLAYER_FREE:
00071         return @"PLAYER_FREE";
00072         break;
00073     case PLAYER_OUTFIT:
00074         return @"PLAYER_OUTFIT";
00075         break;
00076     case PLAYER_ALIVE:
00077         return @"PLAYER_ALIVE";
00078         break;
00079     case PLAYER_EXPLODE:
00080         return @"PLAYER_EXPLODE";
00081         break;
00082     case PLAYER_DEAD:
00083         return @"PLAYER_DEAD";
00084         break;
00085     default:
00086         return @"Unknown";
00087         break;
00088     }
00089 }
00090 
00091 - (int)  previousFlags {
00092     return previousFlags;
00093 }
00094 
00095 - (void) setPreviousFlags:(int) flag {
00096     previousFlags = flag;
00097 }
00098 
00099 - (int)  previousStatus {
00100     return previousStatus;
00101 }
00102 
00103 - (void) setPreviousStatus:(int) stat {
00104     previousStatus = stat;
00105 }
00106 
00107 - (void) setPlanetLock:(Planet *)planetInLock {
00108     planet = planetInLock;
00109 }
00110 
00111 - (id) playerLock {
00112     return playerLock;
00113 }
00114 
00115 - (void) setPlayerLock:(id) playerInLock {
00116     playerLock = playerInLock;
00117 }
00118 
00119 - (int) hostile {
00120     return hostile;
00121 }
00122 
00123 - (void) setTorps:(NSMutableArray*) newTorps {
00124     torps = newTorps;
00125 }
00126 
00127 - (void) setIsMe:(bool)newMe {
00128     me = newMe;
00129 }
00130 
00131 - (NSMutableArray*) torps {
00132         return torps;                                   
00133 }
00134 
00135 - (int) phaserId {
00136     return playerId; // for now assume one on one
00137 }
00138 
00139 - (int) plasmaId {
00140     return playerId; // for now assume one on one
00141 }
00142 
00143 - (int) damage {
00144     return damage;
00145 }
00146 
00147 - (int) playerId {
00148     return playerId;
00149 }
00150 
00151 - (int) stickyWar {
00152     return swar;
00153 }
00154 
00155 - (int) shield {
00156     return shield;
00157 }
00158 
00159 - (bool) friendlyToPlayer:(Player*) other {
00160     return(([team bitMask] & ([other stickyWar] | [other hostile])) == 0 && ([[other team] bitMask] & (swar | hostile)) == 0);
00161 }
00162 
00163 - (void) updateHostile: (int) newhostile
00164              stickyWar: (int) newSWar
00165                 armies: (int) newArmies
00166                  flags: (int) newFlags
00167                 damage: (int) newDamage
00168         shieldStrenght: (int) newShield
00169                   fuel: (int) newFuel
00170             engineTemp: (int) newETemp
00171            weaponsTemp: (int) newWTemp
00172                whyDead: (int) newWhyDead
00173            whoKilledMe: (int) newWhoDead
00174               thisIsMe: (bool) newIsMe {
00175     
00176     hostile = newhostile;
00177     swar    = newSWar;
00178     armies  = newArmies;
00179     flags   = newFlags;
00180     damage  = newDamage;
00181     shield  = newShield;
00182     fuel    = newFuel;
00183     etemp   = newETemp;
00184     wtemp   = newWTemp;
00185     whydead = newWhyDead;
00186     whodead = newWhoDead;
00187     me      = newIsMe;
00188 }
00189 
00190 - (void) updateHostile: (int) newhostile
00191              stickyWar: (int) newSWar
00192                 armies: (int) newArmies
00193                  flags: (int) newFlags
00194                whyDead: (int) newWhyDead
00195            whoKilledMe: (int) newWhoDead
00196               thisIsMe: (bool) newIsMe {
00197     
00198     hostile = newhostile;
00199     swar    = newSWar;
00200     armies  = newArmies;
00201     flags   = newFlags;
00202     whydead = newWhyDead;
00203     whodead = newWhoDead;
00204     me      = newIsMe;
00205 }
00206 
00207 - (void) updateDamage: (int) newDamage
00208        shieldStrenght: (int) newShield
00209                  fuel: (int) newFuel
00210            engineTemp: (int) newETemp
00211           weaponsTemp: (int) newWTemp
00212              thisIsMe: (bool) newIsMe {
00213     damage  = newDamage;
00214     shield  = newShield;
00215     fuel    = newFuel;
00216     etemp   = newETemp;
00217     wtemp   = newWTemp;
00218     me      = newIsMe;
00219 }
00220 
00221 - (void) setStickyWar:(int)newSWar {
00222     swar =newSWar;
00223 }
00224 
00225 - (int)  flags {
00226     return flags;
00227 }
00228 
00229 - (Ship*)ship {
00230     return ship;
00231 }
00232 
00233 - (void) setName:(NSString*)newName {
00234     [name release]; 
00235     name = newName;
00236     [name retain];
00237 }
00238 
00239 - (void) setLogin:(NSString*)newLogin {
00240     [login release];
00241     login = newLogin;
00242     [login retain];
00243 }
00244 
00245 - (void) setMonitor:(NSString*)newMonitor {
00246     [monitor release];
00247     monitor = newMonitor;
00248     [monitor retain];
00249 }
00250 
00251 - (Team*)team {
00252     return team;
00253 }
00254 
00255 - (void) setHostile:(int)newhostile {
00256     hostile = newhostile;
00257 }
00258 
00259 - (int)  status {
00260     return status;
00261 }
00262 
00263 - (void) setStatus:(int)newStatus {
00264     status = newStatus;
00265 }
00266 
00267 - (void) setExplode:(int)newExplode {
00268     explode = newExplode;
00269 }
00270 
00271 - (PlayerStats *) stats {
00272     return stats;
00273 }
00274 
00275 - (void) setFlags:(int)newFlags {
00276     flags = newFlags;
00277 }
00278 
00279 - (bool) isMe {
00280     return me;
00281 }
00282 
00283 - (void) setTractorTarget:(Player *)new {
00284     tractor = new;
00285 }
00286 
00287 - (Player *) tractorTarget {
00288     return tractor;
00289 }
00290 
00291 - (void) setShip:(Ship *)newShip {
00292     ship = newShip;
00293 }
00294 
00295 - (void) setPlasmaCount:(int)nrOfPlasmas {
00296     nplasmatorp = nrOfPlasmas;
00297 }
00298 
00299 - (void) setTorpCount:(int)nrOfTorps {
00300     ntorp = nrOfTorps;
00301 }
00302 
00303 - (void) setKills:(int)kill {
00304     kills = kill;
00305 }
00306 
00307 - (void) setTeam:(Team *)newTeam {
00308     team = newTeam;
00309     // recreate the mapchars
00310     [mapChars release];
00311     mapChars = [team mapCharsForPlayerWithId:playerId];
00312     [mapChars retain];
00313 }
00314 
00315 - (int)wins {
00316     if ([ship type] == SHIP_SB) {
00317         return [stats starbaseKills];
00318     } else {
00319         return [stats kills];
00320     }
00321 }
00322 
00323 - (int)losses {
00324     if ([ship type] == SHIP_SB) {
00325         return [stats starbaseLosses];
00326     } else {
00327         return [stats losses];
00328     }
00329 }
00330 
00331 - (int)maxKills {
00332     if ([ship type] == SHIP_SB) {
00333         return [stats starbaseMaxKills];
00334     } else {
00335         return [stats maxKills];
00336     }
00337 }
00338 
00339 - (NSString*)name {
00340     return name;
00341 }
00342 
00343 - (NSString*)nameWithRank {
00344     char hasKilled = ' ';
00345     if (kills >= 1) {
00346         hasKilled = '+';
00347     }
00348     
00349     return [NSString stringWithFormat: @"%c%@ %@ (%@)", 
00350         hasKilled, [[stats rank] abbrev], name, mapChars];
00351 }
00352 
00353 
00354 - (NSString*)longNameWithKillIndicator {
00355     char hasKilled = ' ';
00356     if (kills >= 1) {
00357         hasKilled = '+';
00358     }
00359         
00360     return [NSString stringWithFormat: @"%c%@ (%@)", 
00361         hasKilled, name, mapChars];
00362 }
00363 
00364 - (NSString*)longName {
00365     
00366     return [NSString stringWithFormat: @"%@ (%@)", name, mapChars];
00367 }
00368 
00369 - (NSString *) mapChars {
00370     return mapChars;
00371 }
00372 
00373 - (NSString *) mapCharsWithKillIndicator {
00374     char hasKilled = ' ';
00375     if (kills >= 1) {
00376         hasKilled = '+';
00377     }
00378     
00379     return [NSString stringWithFormat: @"%c%@", 
00380         hasKilled, mapChars];
00381 }
00382 
00383 - (void) increasePlasmaCount {
00384     nplasmatorp++;
00385 }
00386 
00387 - (void) decreasePlasmaCount {
00388     nplasmatorp--;
00389 }
00390 
00391 - (void) increaseTorpCount {
00392     ntorp++;
00393 }
00394 
00395 - (void) decreaseTorpCount {
00396     ntorp--;
00397 }
00398 
00399 - (int) hull {
00400     // hull strenght is the amount of damage we can still take
00401     return [ship maxDamage] - damage;
00402 }
00403 
00404 - (int) fuel {
00405     return fuel;
00406 }
00407 
00408 - (int) speed {
00409     return speed;
00410 }
00411 
00412 - (int) engineTemp {
00413     return etemp;
00414 }
00415 
00416 - (int) weaponTemp {
00417     return wtemp;
00418 }
00419 
00420 - (int) kills {
00421     return kills;
00422 }
00423 
00424 - (int) maxArmiesForKills {
00425     // i can carry
00426     int maxMe = 0;
00427     if ([ship type] == SHIP_AS) {
00428         maxMe = 3*kills;
00429     } else {
00430         maxMe = 2*kills;
00431     }
00432     return maxMe;
00433 }
00434 
00435 - (int) maxArmies {
00436     // my ship can carry max
00437     int maxShip = [ship maxArmies];
00438     
00439     // i can carry
00440     int maxMe = [self maxArmiesForKills];
00441     
00442     // take the minimum
00443     return (maxShip > maxMe ? maxMe : maxShip);
00444 }
00445 
00446 - (int) maxSpeed {
00447     // limited by damage
00448     int maxspeed = ([ship maxSpeed] + 2) - 
00449             (([ship maxSpeed] + 1) * ((float) damage / (float) ([ship maxDamage])));
00450     
00451     //int maxspeed = (int)(((float)[ship maxSpeed] + 1) * ((float)[self hull] / (float)([ship maxDamage])));
00452     if (maxspeed > [ship maxSpeed]) {
00453         maxspeed = [ship maxSpeed];
00454     }
00455     if (maxspeed < 0) {
00456         maxspeed = 0;
00457     }
00458     return maxspeed;
00459 }
00460 
00461 - (int) maxTorps {
00462     // $$ look in getship.c and move that in here
00463     // so we can calculate based on the fuel left
00464     return [ship maxTorps];
00465 }
00466 
00467 - (int) armies {
00468     return armies;
00469 }
00470 
00471 - (int)  cloakPhase {
00472     return cloakphase;
00473 }
00474 
00475 - (void) increaseCloakPhase {
00476     cloakphase++;
00477 }
00478 
00479 - (void) decreaseCloakPhase {
00480     cloakphase--;
00481 }
00482 
00483 - (int) availableTorps {
00484     
00485     // what can we fire ? based on fuel 
00486     int maxTorps = [self maxTorps];
00487     
00488     // but no more then TORPS_MAX
00489     int freeSlots = ntorp;
00490         
00491     return (maxTorps > freeSlots ? freeSlots : maxTorps);
00492 }
00493 
00494 - (int) availablePhaserShots {
00495     // $$ based on fuel and shiptype
00496     // quick hack 10 bits of fuel 
00497     return fuel / 1000;
00498 }
00499 
00500 - (int) maxPhaserShots {
00501     // $$ based on fuel and shiptype
00502     // i'd say about 10 shots per fuel?
00503     return [ship maxFuel] / 1000;
00504 }
00505 
00506 @end

Generated on Sat Aug 26 21:14:11 2006 for MacTrek by  doxygen 1.4.7