Data/PlayerStats.m

00001 //
00002 //  PlayerStats.m
00003 //  MacTrek
00004 //
00005 //  Created by Aqua on 23/04/2006.
00006 //  Copyright 2006 Luky Soft. All rights reserved.
00007 //
00008 
00009 #import "PlayerStats.h"
00010 
00011 
00012 @implementation PlayerStats
00013 
00014 - (id) init {
00015     self = [super init];
00016     if (self != nil) {
00017         // float hours, float ratings, float defense, String name
00018         ranks = [NSArray arrayWithObjects:
00019             [[Rank alloc] initWithHours: 0 ratings:0 defense:0.0 name:@"Ensign" abbrev:@"Ens"],
00020             [[Rank alloc] initWithHours: 2 ratings:1 defense:0.0 name:@"Lieutenant" abbrev:@"Lt "],
00021             [[Rank alloc] initWithHours: 4 ratings:2 defense:0.8 name:@"Lt. Cmdr." abbrev:@"Lt Com"],
00022             [[Rank alloc] initWithHours: 8 ratings:3 defense:0.8 name:@"Commander" abbrev:@"Com"],
00023             [[Rank alloc] initWithHours:15 ratings:4 defense:0.8 name:@"Captain" abbrev:@"Cap"],
00024             [[Rank alloc] initWithHours:20 ratings:5 defense:0.8 name:@"Flt. Capt." abbrev:@"Flt Cap"],
00025             [[Rank alloc] initWithHours:25 ratings:6 defense:0.8 name:@"Commodore" abbrev:@"Com"],
00026             [[Rank alloc] initWithHours:30 ratings:7 defense:0.8 name:@"Rear Adm." abbrev:@"Rear Adm"],
00027             [[Rank alloc] initWithHours:40 ratings:8 defense:0.8 name:@"Admiral" abbrev:@"Adm"],
00028             nil];
00029         [ranks retain];
00030         
00031         // the rest
00032         maxkills = 0;                               // max kills ever
00033         kills = 0;                                      // how many kills
00034         losses = 0;                                             // times killed
00035         armsbomb = 0;                                   // armies bombed
00036         planets = 0;                                    // planets conquered
00037         tkills = 0;                                             // Kills in tournament play
00038         tlosses = 0;                                    // Losses in tournament play
00039         tarmsbomb = 0;                                  // Tournament armies bombed
00040         tplanets = 0;                                   // Tournament planets conquered
00041         tticks = 0;                                             // Tournament ticks
00042         sbkills = 0;                                    // Kills as starbase
00043         sblosses = 0;                                   // Losses as starbase
00044         sbticks = 0;                                    // Time as starbase
00045         sbmaxkills = 0;                 // Max kills as starbase
00046         st_lastlogin = 0;                               // Last time this player was played
00047         flags = 0;                                              // Misc option flags
00048         rank = [self setRankWithId:0];  // Ranking of the player
00049     }
00050     return self;
00051 }
00052 
00053 -(Rank *) rankWithId:(int)rankId {
00054     return [ranks objectAtIndex:rankId];
00055 }
00056 
00057 -(Rank *) setRankWithId:(int)rankId {
00058     rank = [ranks objectAtIndex:rankId];
00059     return rank;
00060 }
00061 
00062 -(Rank*)rank {
00063     return rank;
00064 }
00065 
00066 -(void) setFlags:(int)newFlags {
00067     flags = newFlags;
00068 }
00069 
00070 -(void) setStarbaseTicks:(int) starbaseTicks {
00071     sbticks = starbaseTicks;   
00072 }
00073 
00074 -(void) setMaxKills:(double)newMaxKills {
00075     maxkills = newMaxKills;
00076 }
00077 
00078 -(void) updateTournamentKills: (int) newTKills
00079              tournamentLosses: (int) newTLosses
00080                         kills: (int) newKills
00081                        losses: (int) newLosses
00082               tournamentTicks: (int) newTTicks
00083             tournamentPlanets: (int) newTPlanets
00084        tournamentArmiesBombed: (int) newTArmiesBombed
00085                 starbaseKills: (int) newSBKills
00086                starbaseLosses: (int) newSBLosses
00087                  armiesBombed: (int) newArmiesBombed
00088                       planets: (int) newPlanets
00089              starbaseMaxKills: (double)newSBMaxKills {
00090     
00091     tkills      = newTKills;
00092     tlosses     = newTLosses;
00093     kills       = newKills;
00094     losses      = newLosses;
00095     tticks      = newTTicks;
00096     tplanets    = newTPlanets;
00097     tarmsbomb   = newTArmiesBombed;
00098     sbkills     = newSBKills;
00099     sblosses    = newSBLosses;
00100     armsbomb    = newArmiesBombed;
00101     planets     = newPlanets;
00102     sbmaxkills  = newSBMaxKills;
00103 }
00104 
00105 - (int)kills {
00106     return kills;
00107 }
00108 
00109 - (int)losses {
00110     return losses;
00111 }
00112 - (int)maxKills {
00113     return maxkills;
00114 }
00115 - (int)tournamentKills {
00116     return tkills;
00117 }
00118 
00119 - (int)tournamentLosses {
00120     return tlosses;
00121 }
00122 
00123 - (int)starbaseKills {
00124     return sbkills;
00125 }
00126 
00127 - (int)starbaseLosses {
00128     return sblosses;
00129 }
00130 
00131 - (int)starbaseMaxKills {
00132     return sbmaxkills;
00133 }
00134 
00135 -(float) bombingRating:(Status *) sts {
00136     if(tticks <= 0 || [sts armiesBombed] <= 0) {
00137         return 0.0;
00138     }
00139     return (float)(((double)tarmsbomb * (double)[sts timeProductive]) / ((double)tticks * (double)[sts armiesBombed]));
00140 }
00141 
00142 -(float) planetRating:(Status *) sts {
00143     if(tticks <= 0 || [sts planets] <= 0) {
00144         return 0.0;
00145     }
00146     return (float)(((double)tplanets * (double)[sts timeProductive]) / ((double)tticks * (double)[sts planets]));
00147 }
00148 
00149 -(float) offenceRating:(Status *) sts{
00150     if(tticks <= 0 || [sts kills] <= 0) {
00151         return 0.0;
00152     }
00153     return (float)(((double)tkills * (double)[sts timeProductive]) / ((double)tticks * (double)[sts kills]));
00154 }
00155 
00156 -(float) defenceRating:(Status *) sts{
00157     if([sts timeProductive] <= 0) {
00158         return 0.0;
00159     }
00160     double top = (double)tticks * (double)[sts losses];
00161     if(top <= 0) {
00162         return (float)(top / (double)[sts timeProductive]);
00163     }
00164     if(tlosses <= 0) {
00165         return 1;
00166     }           
00167     return (float)(top / ((double)tlosses * (double)[sts timeProductive]));
00168 }
00169 
00170 -(float) starbaseKillsPerHour{
00171     return (sbticks == 0) ? 0.0 : (float)sbkills * 36000.0 / (float)sbticks;
00172     }
00173 
00174 -(float) starbaseDefensePerHour{
00175     return (sbticks == 0) ? 0.0 : (float)sblosses * 36000.0 / (float)sbticks;
00176 }
00177 
00178 
00179 
00180 @end

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