Ticket #686: summary_screen_improvements.patch

File summary_screen_improvements.patch, 51.7 KB (added by Ross Bearman, 13 years ago)

May be identical to the last patch, but I noticed one of the files was unsaved, so just to be on the safe side I've recreated the patch..

  • gui/summary/summary.js

     
    11// Max player slots for any map (should read from config)
    22const MAX_SLOTS = 8;
    33
    4 var panelNames = [ 'unitsBuildingsPanel', 'conquestPanel', 'resourcesPanel' ];
    5 var panelButtonNames = [ 'unitsBuildingsPanelButton', 'conquestPanelButton', 'resourcesPanelButton' ];
     4var panelNames = [ 'conquestPanel', 'armyPanel', 'navyPanel', 'buildingsPanel', 'economyPanel', 'lootTreasurePanel' ];
     5var panelButtonNames = [ 'conquestPanelButton', 'armyPanelButton', 'navyPanelButton', 'buildingsPanelButton', 'economyPanelButton', 'lootTreasurePanelButton' ];
    66
    77/**
    88 * @param time Time period in milliseconds (integer)
     
    6262    var maxPlayers = data.playerStates.length - 1;
    6363   
    6464    // align headers
    65     var left = 50;
    66     var width = 100;
     65    var numericWidth = 100;
     66    var textWidth = 170;
    6767    var playerNameHeadingWidth = 200;
    68     getGUIObjectByName("playerName0Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    69     getGUIObjectByName("unitsTrainedHeading").size              = left + " 16 " + (left + width) + " 100%"; left += width;
    70     getGUIObjectByName("unitsLostHeading").size                 = left + " 16 " + (left + width) + " 100%"; left += width;
    71     getGUIObjectByName("enemyUnitsKilledHeading").size          = left + " 16 " + (left + width) + " 100%"; left += width;
    72     getGUIObjectByName("buildingsConstructedHeading").size      = left + " 16 " + (left + width) + " 100%"; left += width;
    73     getGUIObjectByName("buildingsLostHeading").size             = left + " 16 " + (left + width) + " 100%"; left += width;
    74     getGUIObjectByName("enemyBuildingsDestroyedHeading").size   = left +  " 6 " + (left + width) + " 100%"; left += width;
    7568   
    7669    var left = 50;
     70    getGUIObjectByName("playerName0Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
     71    getGUIObjectByName("civCentresBuiltHeading").size           = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     72    getGUIObjectByName("enemyCivCentresRazedHeading").size      = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     73    getGUIObjectByName("mapExplorationHeading").size            = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     74
     75    var left = 50;
    7776    getGUIObjectByName("playerName1Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    78     getGUIObjectByName("civCentresBuiltHeading").size           = left + " 16 " + (left + width) + " 100%"; left += width;
    79     getGUIObjectByName("enemyCivCentresDestroyedHeading").size  = left +  " 6 " + (left + width) + " 100%"; left += width;
    80     getGUIObjectByName("mapExplorationHeading").size            = left +  " 6 " + (left + width) + " 100%"; left += width;
     77    getGUIObjectByName("soldiersTrainedHeading").size           = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     78    getGUIObjectByName("soldiersLostHeading").size              = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     79    getGUIObjectByName("enemySoldiersKilledHeading").size       = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     80    getGUIObjectByName("armyKillDeathRatioHeading").size        = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     81    getGUIObjectByName("favouriteSoldierHeading").size          = left + " 16 " + (left + textWidth) + " 100%"; left += textWidth;
    8182   
    8283    var left = 50;
    83     getGUIObjectByName("playerName2Heading").size           = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
    84     getGUIObjectByName("foodGatheredHeading").size          = left + " 16 " + (left + width) + " 100%"; left += width;
    85     getGUIObjectByName("vegetarianRatioHeading").size       = left + " 16 " + (left + width) + " 100%"; left += width;
    86     getGUIObjectByName("woodGatheredHeading").size          = left + " 16 " + (left + width) + " 100%"; left += width;
    87     getGUIObjectByName("metalGatheredHeading").size         = left + " 16 " + (left + width) + " 100%"; left += width;
    88     getGUIObjectByName("stoneGatheredHeading").size         = left + " 16 " + (left + width) + " 100%"; left += width;
    89     getGUIObjectByName("treasuresCollectedHeading").size    = left + " 16 " + (left + width) + " 100%"; left += width;
     84    getGUIObjectByName("playerName2Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
     85    getGUIObjectByName("warshipsBuiltHeading").size             = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     86    getGUIObjectByName("warshipsLostHeading").size              = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     87    getGUIObjectByName("enemyWarshipsDestroyedHeading").size    = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     88    getGUIObjectByName("navyKillDeathRatioHeading").size        = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     89    getGUIObjectByName("favouriteWarshipHeading").size          = left + " 16 " + (left + textWidth) + " 100%"; left += textWidth;
     90
     91    var left = 50;
     92    getGUIObjectByName("playerName3Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
     93    getGUIObjectByName("buildingsBuiltHeading").size            = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     94    getGUIObjectByName("buildingsLostHeading").size             = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     95    getGUIObjectByName("enemyBuildingsRazedHeading").size       = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     96    getGUIObjectByName("templesBuiltHeading").size              = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     97    getGUIObjectByName("specialBuildingsBuiltHeading").size     = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
    9098   
     99    var left = 50;
     100    getGUIObjectByName("playerName4Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
     101    getGUIObjectByName("workersTrainedHeading").size            = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     102    getGUIObjectByName("foodGatheredHeading").size              = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     103    getGUIObjectByName("woodGatheredHeading").size              = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     104    getGUIObjectByName("metalGatheredHeading").size             = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     105    getGUIObjectByName("stoneGatheredHeading").size             = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     106    getGUIObjectByName("totalGatheredHeading").size             = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     107    getGUIObjectByName("vegetarianRatioHeading").size           = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     108   
     109    var left = 50;
     110    getGUIObjectByName("playerName5Heading").size               = left + " 26 " + (left + playerNameHeadingWidth) + " 100%"; left += playerNameHeadingWidth;
     111    getGUIObjectByName("foodLootedHeading").size                = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     112    getGUIObjectByName("woodLootedHeading").size                = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     113    getGUIObjectByName("metalLootedHeading").size               = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     114    getGUIObjectByName("stoneLootedHeading").size               = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     115    getGUIObjectByName("totalLootedHeading").size               = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     116    getGUIObjectByName("treasuresCollectedHeading").size        = left + " 16 " + (left + numericWidth) + " 100%"; left += numericWidth;
     117   
    91118    // Show counters
    92119    for (var i = 0; i < MAX_SLOTS; ++i)
    93120    {       
     
    115142                getGUIObjectByName("civIcon"+k+"["+i+"]").sprite = "stretched:"+civData[playerState.civ].Emblem;
    116143            }
    117144           
    118             var unitsTrained                = getGUIObjectByName("unitsTrained["+i+"]");
    119             var unitsLost                   = getGUIObjectByName("unitsLost["+i+"]");
    120             var enemyUnitsKilled            = getGUIObjectByName("enemyUnitsKilled["+i+"]");
    121             var buildingsConstructed        = getGUIObjectByName("buildingsConstructed["+i+"]");
    122             var buildingsLost               = getGUIObjectByName("buildingsLost["+i+"]");
    123             var enemyBuildingsDestroyed     = getGUIObjectByName("enemyBuildingsDestroyed["+i+"]");
    124            
     145            //Conquest panel
    125146            var civCentresBuilt             = getGUIObjectByName("civCentresBuilt["+i+"]");
    126             var enemyCivCentresDestroyed    = getGUIObjectByName("enemyCivCentresDestroyed["+i+"]");
     147            var enemyCivCentresRazed        = getGUIObjectByName("enemyCivCentresRazed["+i+"]");
    127148            var mapExploration              = getGUIObjectByName("mapExploration["+i+"]");
    128            
     149
     150            //Army panel
     151            var soldiersTrained             = getGUIObjectByName("soldiersTrained["+i+"]");
     152            var soldiersLost                = getGUIObjectByName("soldiersLost["+i+"]");
     153            var enemySoldiersKilled         = getGUIObjectByName("enemySoldiersKilled["+i+"]");
     154            var armyKillDeathRatio          = getGUIObjectByName("armyKillDeathRatio["+i+"]");
     155            var favouriteSoldier            = getGUIObjectByName("favouriteSoldier["+i+"]");
     156
     157            //Navy panel
     158            var warshipsBuilt               = getGUIObjectByName("warshipsBuilt["+i+"]");
     159            var warshipsLost                = getGUIObjectByName("warshipsLost["+i+"]");
     160            var enemyWarshipsDestroyed      = getGUIObjectByName("enemyWarshipsDestroyed["+i+"]");
     161            var navyKillDeathRatio          = getGUIObjectByName("navyKillDeathRatio["+i+"]");
     162            var favouriteWarship            = getGUIObjectByName("favouriteWarship["+i+"]");
     163
     164            //Buildings panel
     165            var buildingsBuilt              = getGUIObjectByName("buildingsBuilt["+i+"]");
     166            var buildingsLost               = getGUIObjectByName("buildingsLost["+i+"]");
     167            var enemyBuildingsRazed         = getGUIObjectByName("enemyBuildingsRazed["+i+"]");
     168            var templesBuilt                = getGUIObjectByName("templesBuilt["+i+"]");
     169            var specialBuildingsBuilt       = getGUIObjectByName("specialBuildingsBuilt["+i+"]");
     170
     171            //Economy panel
     172            var workersTrained              = getGUIObjectByName("workersTrained["+i+"]");
    129173            var foodGathered                = getGUIObjectByName("foodGathered["+i+"]");
    130             var vegetarianRatio             = getGUIObjectByName("vegetarianRatio["+i+"]");
    131174            var woodGathered                = getGUIObjectByName("woodGathered["+i+"]");
    132175            var metalGathered               = getGUIObjectByName("metalGathered["+i+"]");
    133176            var stoneGathered               = getGUIObjectByName("stoneGathered["+i+"]");
     177            var totalGathered               = getGUIObjectByName("totalGathered["+i+"]");
     178            var vegetarianRatio             = getGUIObjectByName("vegetarianRatio["+i+"]");
     179
     180            //Loot and Treasure panel
     181            var foodLooted                  = getGUIObjectByName("foodLooted["+i+"]");
     182            var woodLooted                  = getGUIObjectByName("woodLooted["+i+"]");
     183            var metalLooted                 = getGUIObjectByName("metalLooted["+i+"]");
     184            var stoneLooted                 = getGUIObjectByName("stoneLooted["+i+"]");
     185            var totalLooted                 = getGUIObjectByName("totalLooted["+i+"]");
    134186            var treasuresCollected          = getGUIObjectByName("treasuresCollected["+i+"]");
    135187           
    136             // align counters
    137188           
     189            // Cell widths
     190            var numericWidth = 100;
     191            var textWidth = 170;
     192
     193            // Align Conquest panel cells
    138194            var left = 240;
    139             var width = 100;
    140             unitsTrained.size               = left + " 2 " + (left + width) + " 100%"; left += width;
    141             unitsLost.size                  = left + " 2 " + (left + width) + " 100%"; left += width;
    142             enemyUnitsKilled.size           = left + " 2 " + (left + width) + " 100%"; left += width;
    143             buildingsConstructed.size       = left + " 2 " + (left + width) + " 100%"; left += width;
    144             buildingsLost.size              = left + " 2 " + (left + width) + " 100%"; left += width;
    145             enemyBuildingsDestroyed.size    = left + " 2 " + (left + width) + " 100%"; left += width;
     195            civCentresBuilt.size            = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     196            enemyCivCentresRazed.size       = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     197            mapExploration.size             = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     198           
    146199            var size = getGUIObjectByName("playerBox0["+i+"]").size;
    147200            size.right = left + 10;
    148201            getGUIObjectByName("playerBox0["+i+"]").size = size;
    149202           
     203            // Align Army panel cells
    150204            var left = 240;
    151             civCentresBuilt.size            = left + " 2 " + (left + width) + " 100%"; left += width;
    152             enemyCivCentresDestroyed.size   = left + " 2 " + (left + width) + " 100%"; left += width;
    153             mapExploration.size             = left + " 2 " + (left + width) + " 100%"; left += width;
     205            soldiersTrained.size                = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     206            soldiersLost.size                   = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     207            enemySoldiersKilled.size            = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     208            armyKillDeathRatio.size             = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     209            favouriteSoldier.size               = left + " 2 " + (left + textWidth)    + " 100%"; left += textWidth;
     210           
    154211            var size = getGUIObjectByName("playerBox1["+i+"]").size;
    155212            size.right = left + 10;
    156213            getGUIObjectByName("playerBox1["+i+"]").size = size;
    157214           
     215            //Align Navy panel cells           
    158216            var left = 240;
    159             foodGathered.size       = left + " 2 " + (left + width) + " 100%"; left += width;
    160             vegetarianRatio.size    = left + " 2 " + (left + width) + " 100%"; left += width;
    161             woodGathered.size       = left + " 2 " + (left + width) + " 100%"; left += width;
    162             metalGathered.size      = left + " 2 " + (left + width) + " 100%"; left += width;
    163             stoneGathered.size      = left + " 2 " + (left + width) + " 100%"; left += width;
    164             treasuresCollected.size = left + " 2 " + (left + width) + " 100%"; left += width;
     217            warshipsBuilt.size                  = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     218            warshipsLost.size                   = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     219            enemyWarshipsDestroyed.size         = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     220            navyKillDeathRatio.size             = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     221            favouriteWarship.size               = left + " 2 " + (left + textWidth)    + " 100%"; left += textWidth;
     222           
    165223            var size = getGUIObjectByName("playerBox2["+i+"]").size;
    166224            size.right = left + 10;
    167225            getGUIObjectByName("playerBox2["+i+"]").size = size;
    168226           
    169             // display counters
    170             unitsTrained.caption                = playerState.statistics.unitsTrained;
    171             unitsLost.caption                   = playerState.statistics.unitsLost;
    172             enemyUnitsKilled.caption            = playerState.statistics.enemyUnitsKilled;
    173             buildingsConstructed.caption        = playerState.statistics.buildingsConstructed;
    174             buildingsLost.caption               = playerState.statistics.buildingsLost;
    175             enemyBuildingsDestroyed.caption     = playerState.statistics.enemyBuildingsDestroyed;
     227            //Align Building panel cells           
     228            var left = 240;
     229            buildingsBuilt.size                 = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     230            buildingsLost.size                  = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     231            enemyBuildingsRazed.size            = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     232            templesBuilt.size                   = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     233            specialBuildingsBuilt.size          = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
    176234           
     235            var size = getGUIObjectByName("playerBox3["+i+"]").size;
     236            size.right = left + 10;
     237            getGUIObjectByName("playerBox3["+i+"]").size = size;
     238           
     239            //Align Economy panel cells
     240            var left = 240;
     241            workersTrained.size     = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     242            foodGathered.size       = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     243            woodGathered.size       = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     244            metalGathered.size      = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     245            stoneGathered.size      = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     246            totalGathered.size      = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     247            vegetarianRatio.size    = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     248           
     249            var size = getGUIObjectByName("playerBox4["+i+"]").size;
     250            size.right = left + 10;
     251            getGUIObjectByName("playerBox4["+i+"]").size = size;
     252           
     253            //Align Loot and Treasure panel cells   
     254            var left = 240;
     255            foodLooted.size         = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     256            woodLooted.size         = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     257            metalLooted.size        = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     258            stoneLooted.size        = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     259            totalLooted.size        = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     260            treasuresCollected.size = left + " 2 " + (left + numericWidth) + " 100%"; left += numericWidth;
     261           
     262            var size = getGUIObjectByName("playerBox5["+i+"]").size;
     263            size.right = left + 10;
     264            getGUIObjectByName("playerBox5["+i+"]").size = size;
     265           
     266            //Display statistics
    177267            civCentresBuilt.caption             = playerState.statistics.civCentresBuilt;
    178             enemyCivCentresDestroyed.caption    = playerState.statistics.enemyCivCentresDestroyed;
     268            enemyCivCentresRazed.caption        = playerState.statistics.enemyCivCentresRazed;
    179269            mapExploration.caption              = playerState.statistics.percentMapExplored + "%";
    180270           
     271            soldiersTrained.caption             = playerState.statistics.soldiersTrained;
     272            soldiersLost.caption                = playerState.statistics.soldiersLost;
     273            enemySoldiersKilled.caption         = playerState.statistics.enemySoldiersKilled;
     274            armyKillDeathRatio.caption          = playerState.statistics.armyKillDeathRatio;
     275            favouriteSoldier.caption            = playerState.statistics.favouriteSoldier;
     276           
     277            warshipsBuilt.caption               = playerState.statistics.warshipsBuilt;
     278            warshipsLost.caption                = playerState.statistics.warshipsLost;
     279            enemyWarshipsDestroyed.caption      = playerState.statistics.enemyWarshipsDestroyed;
     280            navyKillDeathRatio.caption          = playerState.statistics.navyKillDeathRatio;
     281            favouriteWarship.caption            = playerState.statistics.favouriteWarship;
     282           
     283            buildingsBuilt.caption              = playerState.statistics.buildingsBuilt;
     284            buildingsLost.caption               = playerState.statistics.buildingsLost;
     285            enemyBuildingsRazed.caption         = playerState.statistics.enemyBuildingsRazed;
     286            templesBuilt.caption                = playerState.statistics.templesBuilt;
     287            specialBuildingsBuilt.caption       = playerState.statistics.specialBuildingsBuilt;
     288           
     289            workersTrained.caption      = playerState.statistics.workersTrained;
    181290            foodGathered.caption        = playerState.statistics.resourcesGathered.food;
    182             vegetarianRatio.caption     = Math.floor(playerState.statistics.resourcesGathered.food > 0 ?
    183                 (playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100 : 0) + "%";
    184291            woodGathered.caption        = playerState.statistics.resourcesGathered.wood;
    185292            metalGathered.caption       = playerState.statistics.resourcesGathered.metal;
    186293            stoneGathered.caption       = playerState.statistics.resourcesGathered.stone;
     294            totalGathered.caption       =
     295                  playerState.statistics.resourcesGathered.food
     296                + playerState.statistics.resourcesGathered.wood
     297                + playerState.statistics.resourcesGathered.metal
     298                + playerState.statistics.resourcesGathered.stone;
     299            vegetarianRatio.caption     = Math.floor(playerState.statistics.resourcesGathered.food > 0 ?
     300                (playerState.statistics.resourcesGathered.vegetarianFood / playerState.statistics.resourcesGathered.food) * 100 : 0) + "%";
     301           
     302            foodLooted.caption          = playerState.statistics.resourcesLooted.food;
     303            woodLooted.caption          = playerState.statistics.resourcesLooted.wood;
     304            metalLooted.caption         = playerState.statistics.resourcesLooted.metal;
     305            stoneLooted.caption         = playerState.statistics.resourcesLooted.stone;
     306            totalLooted.caption         =
     307                  playerState.statistics.resourcesLooted.food
     308                + playerState.statistics.resourcesLooted.wood
     309                + playerState.statistics.resourcesLooted.metal
     310                + playerState.statistics.resourcesLooted.stone;
    187311            treasuresCollected.caption  = playerState.statistics.treasuresCollected;
     312           
    188313        }
    189314        else
    190315        {
  • gui/summary/summary.xml

     
    3838                    text_align="center"
    3939                />
    4040            </object>
    41            
    42            
    43             <object name="unitsBuildingsPanelButton" type="button" sprite="bgInfoBox" text_align="center" size="10 75 160 101">
     41
     42            <object name="conquestPanelButton" type="button" sprite="bgInfoBox" text_align="center" size="10 75 160 101">
    4443                <action on="Press">selectPanel(0);</action>
    45                 Units/buildings
     44                Conquest
    4645            </object>
    47             <object name="conquestPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="160 75 310 101">
     46            <object name="armyPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="160 75 310 101">
    4847                <action on="Press">selectPanel(1);</action>
    49                 Conquest
     48                Army
    5049            </object>
    51             <object name="resourcesPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="310 75 460 101">
     50            <object name="navyPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="310 75 460 101">
    5251                <action on="Press">selectPanel(2);</action>
    53                 Resources
     52                Navy
    5453            </object>
    55             <object name="unitsBuildingsPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50">
     54            <object name="buildingsPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="460 75 610 101">
     55                <action on="Press">selectPanel(3);</action>
     56                Buildings
     57            </object>
     58            <object name="economyPanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="610 75 760 101">
     59                <action on="Press">selectPanel(4);</action>
     60                Economy
     61            </object>
     62            <object name="lootTreasurePanelButton" type="button" sprite="bgInfoHeading" text_align="center" size="760 75 910 101">
     63                <action on="Press">selectPanel(5);</action>
     64                Loot and Treasure
     65            </object>
     66           
     67            <object name="conquestPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50">
     68                <object size="0 0 100% 100%-50">
     69                    <object name="playerName0Heading" type="text" text_align="left" font="serif-bold-14" >
     70                        Player Name
     71                    </object>
     72                    <object name="civCentresBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
     73                        Civ Centres&#10;Built
     74                    </object>
     75                    <object name="enemyCivCentresRazedHeading" type="text" text_align="center" font="serif-bold-14" >
     76                        Enemy&#10;Civ Centres&#10;Razed
     77                    </object>
     78                    <object name="mapExplorationHeading" type="text" text_align="center" font="serif-bold-14" >
     79                        Map&#10;Exploration
     80                    </object>
     81                </object>   
    5682               
     83                <object size="0 65 100% 100%-50">
     84                    <repeat count="8">
     85                        <object type="image" name="playerBox0[n]" size="10 0 10 30">
     86                            <object name="playerColourBox0[n]"      type="image" size="10 4 30 24" />
     87                            <object name="playerName0[n]"           type="text"  text_align="left"  size="40 2 208 100%" />
     88                            <object name="civIcon0[n]"              type="image" size="208 0 240 32"/>
     89                            <object name="civCentresBuilt[n]"       type="text"  text_align="center" />
     90                            <object name="enemyCivCentresRazed[n]"  type="text"  text_align="center" />
     91                            <object name="mapExploration[n]"        type="text"  text_align="center" />
     92                        </object>
     93                    </repeat>
     94                </object>
     95            </object>
     96           
     97            <object name="armyPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
    5798                <object size="0 0 100% 100%-50">
    58                     <object name="playerName0Heading" type="text" text_align="left" font="serif-bold-14"    >
    59                         Player name
     99                    <object name="playerName1Heading" type="text" text_align="left" font="serif-bold-14"    >
     100                        Player Name
    60101                    </object>
    61                     <object name="unitsTrainedHeading" type="text" text_align="center" font="serif-bold-14" >
    62                         Units&#10;trained
     102                    <object name="soldiersTrainedHeading" type="text" text_align="center" font="serif-bold-14" >
     103                        Soldiers&#10;Trained
    63104                    </object>
    64                     <object name="unitsLostHeading" type="text" text_align="center" font="serif-bold-14" >
    65                         Units&#10;lost
     105                    <object name="soldiersLostHeading" type="text" text_align="center" font="serif-bold-14" >
     106                        Soldiers&#10;Lost
    66107                    </object>
    67                     <object name="enemyUnitsKilledHeading" type="text" text_align="center" font="serif-bold-14" >
    68                         Enemy units&#10;killed
     108                    <object name="enemySoldiersKilledHeading" type="text" text_align="center" font="serif-bold-14" >
     109                        Enemy&#10;Soldiers&#10;Killed
    69110                    </object>
    70                     <object name="buildingsConstructedHeading" type="text" text_align="center" font="serif-bold-14" >
    71                         Buildings&#10;constructed
     111                    <object name="armyKillDeathRatioHeading" type="text" text_align="center" font="serif-bold-14" >
     112                        Kill/Death&#10;Ratio
    72113                    </object>
    73                     <object name="buildingsLostHeading" type="text" text_align="center" font="serif-bold-14" >
    74                         Buildings&#10;lost
     114                    <object name="favouriteSoldierHeading" type="text" text_align="center" font="serif-bold-14" >
     115                        Favourite&#10;Soldier
    75116                    </object>
    76                     <object name="enemyBuildingsDestroyedHeading" type="text" text_align="center" font="serif-bold-14" >
    77                         Enemy&#10;buildings&#10;destroyed
     117                </object>   
     118               
     119                <object size="0 65 100% 100%-50">
     120                    <repeat count="8">
     121                        <object type="image" name="playerBox1[n]" size="10 0 10 30" hidden="true">
     122                            <object name="playerColourBox1[n]"      type="image" size="10 4 30 24" />
     123                            <object name="playerName1[n]"           type="text"  text_align="left"  size="40 2 208 100%" />
     124                            <object name="civIcon1[n]"              type="image" size="208 0 240 32"/>
     125                            <object name="soldiersTrained[n]"       type="text"  text_align="center" />
     126                            <object name="soldiersLost[n]"          type="text"  text_align="center" />
     127                            <object name="enemySoldiersKilled[n]"   type="text"  text_align="center" />
     128                            <object name="armyKillDeathRatio[n]"    type="text"  text_align="center" />
     129                            <object name="favouriteSoldier[n]"      type="text"  text_align="center" />
     130                        </object>
     131                    </repeat>
     132                </object>
     133            </object>
     134
     135            <object name="navyPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
     136                <object size="0 0 100% 100%-50">
     137                    <object name="playerName2Heading" type="text" text_align="left" font="serif-bold-14"    >
     138                        Player Name
    78139                    </object>
    79                    
     140                    <object name="warshipsBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
     141                        Warships&#10;Built
     142                    </object>
     143                    <object name="warshipsLostHeading" type="text" text_align="center" font="serif-bold-14" >
     144                        Warships&#10;Lost
     145                    </object>
     146                    <object name="enemyWarshipsDestroyedHeading" type="text" text_align="center" font="serif-bold-14" >
     147                        Enemy&#10;Warships&#10;Destroyed
     148                    </object>
     149                    <object name="navyKillDeathRatioHeading" type="text" text_align="center" font="serif-bold-14" >
     150                        Kill/Death&#10;Ratio
     151                    </object>
     152                    <object name="favouriteWarshipHeading" type="text" text_align="center" font="serif-bold-14" >
     153                        Favourite&#10;Warship
     154                    </object>
    80155                </object>   
    81156               
    82157                <object size="0 65 100% 100%-50">
    83158                    <repeat count="8">
    84                         <object type="image" name="playerBox0[n]" size="10 0 10 30" hidden="true">
    85                             <object name="playerColourBox0[n]"          type="image" size="10 4 30 24" />
    86                             <object name="playerName0[n]"               type="text"  text_align="left"  size="40 2 208 100%" />
    87                             <object name="civIcon0[n]"                  type="image" size="208 0 240 32"/>
    88                             <object name="unitsTrained[n]"              type="text"  text_align="center" />
    89                             <object name="unitsLost[n]"                 type="text"  text_align="center" />
    90                             <object name="enemyUnitsKilled[n]"          type="text"  text_align="center" />
    91                             <object name="buildingsConstructed[n]"      type="text"  text_align="center" />
    92                             <object name="buildingsLost[n]"             type="text"  text_align="center" />
    93                             <object name="enemyBuildingsDestroyed[n]"   type="text"  text_align="center" />
     159                        <object type="image" name="playerBox2[n]" size="10 0 10 30" hidden="true">
     160                            <object name="playerColourBox2[n]"          type="image" size="10 4 30 24" />
     161                            <object name="playerName2[n]"               type="text"  text_align="left"  size="40 2 208 100%" />
     162                            <object name="civIcon2[n]"                  type="image" size="208 0 240 32"/>
     163                            <object name="warshipsBuilt[n]"             type="text"  text_align="center" />
     164                            <object name="warshipsLost[n]"              type="text"  text_align="center" />
     165                            <object name="enemyWarshipsDestroyed[n]"    type="text"  text_align="center" />
     166                            <object name="navyKillDeathRatio[n]"        type="text"  text_align="center" />
     167                            <object name="favouriteWarship[n]"          type="text"  text_align="center" />
    94168                        </object>
    95169                    </repeat>
    96170                </object>
     171            </object>
    97172           
    98             </object>
    99             <object name="conquestPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
    100                
     173            <object name="buildingsPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
    101174                <object size="0 0 100% 100%-50">
    102                     <object name="playerName1Heading" type="text" text_align="left" font="serif-bold-14"    >
    103                         Player name
     175                    <object name="playerName3Heading" type="text" text_align="left" font="serif-bold-14"    >
     176                        Player Name
    104177                    </object>
    105                     <object name="civCentresBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
    106                         Civ centres&#10;built
     178                    <object name="buildingsBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
     179                        Buildings&#10;Built
    107180                    </object>
    108                     <object name="enemyCivCentresDestroyedHeading" type="text" text_align="center" font="serif-bold-14" >
    109                         Enemy&#10;civ centres&#10;destroyed
     181                    <object name="buildingsLostHeading" type="text" text_align="center" font="serif-bold-14" >
     182                        Buildings&#10;Lost
    110183                    </object>
    111                     <object name="mapExplorationHeading" type="text" text_align="center" font="serif-bold-14" >
    112                         Map&#10;exploration
     184                    <object name="enemyBuildingsRazedHeading" type="text" text_align="center" font="serif-bold-14" >
     185                        Enemy&#10;Buildings&#10;Razed
    113186                    </object>
     187                    <object name="templesBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
     188                        Temples&#10;Built
     189                    </object>
     190                    <object name="specialBuildingsBuiltHeading" type="text" text_align="center" font="serif-bold-14" >
     191                        Special&#10;Buildings&#10;Built
     192                    </object>
    114193                </object>   
    115194               
    116195                <object size="0 65 100% 100%-50">
    117196                    <repeat count="8">
    118                         <object type="image" name="playerBox1[n]" size="10 0 10 30" hidden="true">
    119                             <object name="playerColourBox1[n]"          type="image" size="10 4 30 24" />
    120                             <object name="playerName1[n]"               type="text"  text_align="left"  size="40 2 208 100%" />
    121                             <object name="civIcon1[n]"                  type="image" size="208 0 240 32"/>
    122                             <object name="civCentresBuilt[n]"           type="text"  text_align="center" />
    123                             <object name="enemyCivCentresDestroyed[n]"  type="text"  text_align="center" />
    124                             <object name="mapExploration[n]"            type="text"  text_align="center" />
     197                        <object type="image" name="playerBox3[n]" size="10 0 10 30" hidden="true">
     198                            <object name="playerColourBox3[n]"      type="image" size="10 4 30 24" />
     199                            <object name="playerName3[n]"           type="text"  text_align="left"  size="40 2 208 100%" />
     200                            <object name="civIcon3[n]"              type="image" size="208 0 240 32"/>
     201                            <object name="buildingsBuilt[n]"        type="text"  text_align="center" />
     202                            <object name="buildingsLost[n]"         type="text"  text_align="center" />
     203                            <object name="enemyBuildingsRazed[n]"   type="text"  text_align="center" />
     204                            <object name="templesBuilt[n]"          type="text"  text_align="center" />
     205                            <object name="specialBuildingsBuilt[n]" type="text"  text_align="center" />
    125206                        </object>
    126207                    </repeat>
    127208                </object>
    128            
    129209            </object>
    130             <object name="resourcesPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
    131210           
     211            <object name="economyPanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
    132212                <object size="0 0 100% 100%-50">
    133                     <object name="playerName2Heading" type="text" text_align="left" font="serif-bold-14" >
    134                         Player name
     213                    <object name="playerName4Heading" type="text" text_align="left" font="serif-bold-14" >
     214                        Player Name
    135215                    </object>
     216                    <object name="workersTrainedHeading" type="text" text_align="center" font="serif-bold-14" >
     217                        Workers&#10;Trained
     218                    </object>
    136219                    <object name="foodGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
    137                         Food&#10;gathered
     220                        Food&#10;Gathered
    138221                    </object>
    139                     <object name="vegetarianRatioHeading" type="text" text_align="center" font="serif-bold-14" >
    140                         Vegetarian&#10;ratio
    141                     </object>
    142222                    <object name="woodGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
    143                         Wood&#10;gathered
     223                        Wood&#10;Gathered
    144224                    </object>
    145225                    <object name="metalGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
    146                         Metal&#10;gathered
     226                        Metal&#10;Gathered
    147227                    </object>
    148228                    <object name="stoneGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
    149                         Stone&#10;gathered
     229                        Stone&#10;Gathered
    150230                    </object>
     231                    <object name="totalGatheredHeading" type="text" text_align="center" font="serif-bold-14" >
     232                        Total&#10;Gathered
     233                    </object>
     234                    <object name="vegetarianRatioHeading" type="text" text_align="center" font="serif-bold-14" >
     235                        Vegetarian&#10;Ratio
     236                    </object>
     237                </object>   
     238               
     239                <object size="0 65 100% 100%-50">
     240                    <repeat count="8">
     241                        <object type="image" name="playerBox4[n]" size="10 0 10 30" hidden="true">
     242                            <object name="playerColourBox4[n]"  type="image" size="10 4 30 24" />
     243                            <object name="playerName4[n]"       type="text"  text_align="left"  size="40 2 208 100%" />
     244                            <object name="civIcon4[n]"          type="image" size="208 0 240 32"/>
     245                            <object name="workersTrained[n]"    type="text"  text_align="center" />
     246                            <object name="foodGathered[n]"      type="text"  text_align="center" />
     247                            <object name="woodGathered[n]"      type="text"  text_align="center" />
     248                            <object name="metalGathered[n]"     type="text"  text_align="center" />
     249                            <object name="stoneGathered[n]"     type="text"  text_align="center" />
     250                            <object name="totalGathered[n]"     type="text"  text_align="center" />
     251                            <object name="vegetarianRatio[n]"   type="text"  text_align="center" />
     252                        </object>
     253                    </repeat>
     254                </object>
     255            </object>
     256           
     257            <object name="lootTreasurePanel" type="image" sprite="bgInfoBox" size="10 100 100%-10 100%-50" hidden="true">
     258                <object size="0 0 100% 100%-50">
     259                    <object name="playerName5Heading" type="text" text_align="left" font="serif-bold-14" >
     260                        Player Name
     261                    </object>
     262                    <object name="foodLootedHeading" type="text" text_align="center" font="serif-bold-14" >
     263                        Food&#10;Looted
     264                    </object>
     265                    <object name="woodLootedHeading" type="text" text_align="center" font="serif-bold-14" >
     266                        Wood&#10;Looted
     267                    </object>
     268                    <object name="metalLootedHeading" type="text" text_align="center" font="serif-bold-14" >
     269                        Metal&#10;Looted
     270                    </object>
     271                    <object name="stoneLootedHeading" type="text" text_align="center" font="serif-bold-14" >
     272                        Stone&#10;Looted
     273                    </object>
     274                    <object name="totalLootedHeading" type="text" text_align="center" font="serif-bold-14" >
     275                        Total&#10;Looted
     276                    </object>
    151277                    <object name="treasuresCollectedHeading" type="text" text_align="center" font="serif-bold-14" >
    152                         Treasures&#10;collected
     278                        Treasures&#10;Collected
    153279                    </object>
    154280                </object>   
    155281               
    156282                <object size="0 65 100% 100%-50">
    157283                    <repeat count="8">
    158                         <object type="image" name="playerBox2[n]" size="10 0 10 30" hidden="true">
    159                             <object name="playerColourBox2[n]"      type="image" size="10 4 30 24" />
    160                             <object name="playerName2[n]"           type="text"  text_align="left"  size="40 2 208 100%" />
    161                             <object name="civIcon2[n]"              type="image" size="208 0 240 32"/>
    162                             <object name="foodGathered[n]"          type="text"  text_align="center" />
    163                             <object name="vegetarianRatio[n]"       type="text"  text_align="center" />
    164                             <object name="woodGathered[n]"          type="text"  text_align="center" />
    165                             <object name="metalGathered[n]"         type="text"  text_align="center" />
    166                             <object name="stoneGathered[n]"         type="text"  text_align="center" />
    167                             <object name="treasuresCollected[n]"    type="text"  text_align="center" />
     284                        <object type="image" name="playerBox5[n]" size="10 0 10 30" hidden="true">
     285                            <object name="playerColourBox5[n]"      type="image" size="10 4 30 24" />
     286                            <object name="playerName5[n]"           type="text"  text_align="left"  size="40 2 208 100%" />
     287                            <object name="civIcon5[n]"              type="image" size="208 0 240 32"/>
     288                            <object name="foodLooted[n]"            type="text"  text_align="center" />
     289                            <object name="woodLooted[n]"            type="text"  text_align="center" />
     290                            <object name="metalLooted[n]"           type="text"  text_align="center" />
     291                            <object name="stoneLooted[n]"           type="text"  text_align="center" />
     292                            <object name="totalLooted[n]"           type="text"  text_align="center" />
     293                            <object name="treasuresCollected[n]"    type="text"  text_align="center" />
    168294                        </object>
    169295                    </repeat>
    170296                </object>
    171            
    172297            </object>
    173298           
    174299            <object type="button" style="wheatButton" size="100%-150 100%-40 100% 100%">
  • simulation/components/Foundation.js

     
    184184        cmpBuildingOwnership.SetOwner(cmpOwnership.GetOwner());
    185185       
    186186        var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
    187         cmpPlayerStatisticsTracker.IncreaseConstructedBuildingsCounter();
     187        cmpPlayerStatisticsTracker.IncreaseConstructedBuildingsCounter(building);
    188188
    189189        var cmpIdentity = Engine.QueryInterface(building, IID_Identity);
    190190        if (cmpIdentity.GetClassesList().indexOf("CivCentre") != -1) cmpPlayerStatisticsTracker.IncreaseBuiltCivCentresCounter();
  • simulation/components/Identity.js

     
    3333        "</element>" +
    3434    "</optional>" +
    3535    "<optional>" +
     36        "<element name='StatisticsGroupName' a:help='Name used to group entities for statistic counting'>" +
     37            "<text/>" +
     38        "</element>" +
     39    "</optional>" +
     40    "<optional>" +
    3641        "<element name='Tooltip'>" +
    3742            "<text/>" +
    3843        "</element>" +
     
    189194    return (this.template.SelectionGroupName || "");
    190195}
    191196
     197Identity.prototype.GetStatisticsGroupName = function()
     198{
     199    return (this.template.StatisticsGroupName || "");
     200}
     201
     202
     203Identity.prototype.GetSpecificName = function()
     204{
     205    return (this.template.SpecificName || this.template.GenericName || "");
     206}
     207
     208Identity.prototype.GetGenericName = function()
     209{
     210    return (this.template.GenericName || "");
     211}
     212
    192213Engine.RegisterComponentType(IID_Identity, "Identity", Identity);
  • simulation/components/Looter.js

     
    2121    }
    2222    var cmpPlayer = QueryOwnerInterface(this.entity, IID_Player);
    2323    cmpPlayer.AddResources(cmpLoot.GetResources());
     24   
     25    var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
     26    cmpPlayerStatisticsTracker.IncreaseResourceLootedCounters(cmpLoot.GetResources());
    2427}
    2528
    2629Engine.RegisterComponentType(IID_Looter, "Looter", Looter);
  • simulation/components/StatisticsTracker.js

     
    55   
    66StatisticsTracker.prototype.Init = function()
    77{
    8     // units
    98    this.unitsTrained = 0;
    10     this.unitsLost = 0;
    11     this.enemyUnitsKilled = 0;
    12     //buildings
    13     this.buildingsConstructed = 0;
     9    // Conquest
     10    this.civCentresBuilt = 0;
     11    this.enemyCivCentresRazed = 0;
     12    // Army
     13    this.soldierTypeCount = new Object();
     14    this.soldiersTrained = 0;
     15    this.soldiersLost = 0;
     16    this.enemySoldiersKilled = 0;
     17    // Navy
     18    this.warshipTypeCount = new Object();
     19    this.warshipsBuilt = 0;
     20    this.warshipsLost = 0;
     21    this.enemyWarshipsDestroyed = 0;
     22    // Buildings
     23    this.buildingsBuilt = 0;
    1424    this.buildingsLost = 0;
    15     this.enemyBuildingsDestroyed = 0;
    16     // civ centres
    17     this.civCentresBuilt = 0;
    18     this.enemyCivCentresDestroyed = 0;
    19     // resources
     25    this.enemyBuildingsRazed = 0;
     26    this.templesBuilt = 0;
     27    this.specialBuildingsBuilt = 0;
     28    // Economy
     29    this.workersTrained = 0;
    2030    this.resourcesGathered = {
    2131            "food": 0, 
    2232            "wood": 0, 
     
    2434            "stone": 0,
    2535            "vegetarianFood": 0
    2636    }
     37    // Loot and Treasures
     38    this.resourcesLooted = {
     39            "food": 0, 
     40            "wood": 0, 
     41            "metal": 0,
     42            "stone": 0
     43    }
    2744    this.treasuresCollected = 0;
    2845};
    2946
    3047StatisticsTracker.prototype.GetStatistics = function()
    3148{
    3249    return {
    33         "unitsTrained": this.unitsTrained,
    34         "unitsLost": this.unitsLost,
    35         "enemyUnitsKilled": this.enemyUnitsKilled,
    36         "buildingsConstructed": this.buildingsConstructed,
     50        // Conquest
     51        "civCentresBuilt": this.civCentresBuilt,
     52        "enemyCivCentresRazed": this.enemyCivCentresRazed,
     53        "percentMapExplored": this.GetPercentMapExplored(),
     54        // Army
     55        "soldiersTrained": this.soldiersTrained,
     56        "soldiersLost": this.soldiersLost,
     57        "enemySoldiersKilled": this.enemySoldiersKilled,
     58        "armyKillDeathRatio": this.CalculateKillDeathRatio(this.enemySoldiersKilled, this.soldiersLost),
     59        "favouriteSoldier": this.CalculateFavouriteSoldier(),
     60        // Navy
     61        "warshipsBuilt": this.warshipsBuilt,
     62        "warshipsLost": this.warshipsLost,
     63        "enemyWarshipsDestroyed": this.enemyWarshipsDestroyed,
     64        "navyKillDeathRatio": this.CalculateKillDeathRatio(this.enemyWarshipsDestroyed, this.warshipsLost),
     65        "favouriteWarship": this.CalculateFavouriteWarship(),
     66        // Buildings
     67        "buildingsBuilt": this.buildingsBuilt,
    3768        "buildingsLost": this.buildingsLost,
    38         "enemyBuildingsDestroyed": this.enemyBuildingsDestroyed,
    39         "civCentresBuilt": this.civCentresBuilt,
    40         "enemyCivCentresDestroyed": this.enemyCivCentresDestroyed,
     69        "enemyBuildingsRazed": this.enemyBuildingsRazed,
     70        "templesBuilt": this.templesBuilt,
     71        "specialBuildingsBuilt": this.specialBuildingsBuilt,
     72        // Economy
     73        "workersTrained": this.workersTrained,
    4174        "resourcesGathered": this.resourcesGathered,
    42         "treasuresCollected": this.treasuresCollected,
    43         "percentMapExplored": this.GetPercentMapExplored()
     75        // Loot and Treasure
     76        "resourcesLooted": this.resourcesLooted,
     77        "treasuresCollected": this.treasuresCollected
    4478    };
    4579};
    4680
    47 StatisticsTracker.prototype.IncreaseTrainedUnitsCounter = function()
     81/**
     82 * Counts the total number of units trained as well as an individual count for
     83 * each unit type.
     84 * @param trainedUnit The unit that has been trained
     85 * @return The total count of units trained so far
     86 */
     87StatisticsTracker.prototype.IncreaseTrainedUnitsCounter = function(trainedUnit)
    4888{
     89    var cmpUnitIdentity = Engine.QueryInterface(trainedUnit, IID_Identity);
     90    if(cmpUnitIdentity)
     91    {
     92        var name = cmpUnitIdentity.GetSpecificName();
     93        var classes = cmpUnitIdentity.GetClassesList();
     94       
     95        var unitIsWorker = classes.indexOf("Worker") != -1 || classes.indexOf("CitizenSoldier") != -1;
     96        var unitIsInfantry = classes.indexOf("Infantry") != -1;
     97        var unitIsCavalry = classes.indexOf("Cavalry") != -1;
     98        var unitIsWarship = classes.indexOf("Warship") != -1;
     99       
     100        if(unitIsWorker)
     101        {
     102            this.workersTrained++;
     103        }
     104       
     105        if(unitIsInfantry || unitIsCavalry)
     106        {
     107            if(this.soldierTypeCount.hasOwnProperty(name))
     108            {
     109               this.soldierTypeCount[name]++
     110            }
     111            else
     112            {
     113                this.soldierTypeCount[name] = 1;
     114            }
     115            this.soldiersTrained++;
     116        }
     117        else if(unitIsWarship)
     118        {
     119            if(this.warshipTypeCount.hasOwnProperty(name))
     120            {
     121               this.warshipTypeCount[name]++
     122            }
     123            else
     124            {
     125                this.warshipTypeCount[name] = 1;
     126            }
     127            this.warshipsBuilt++;
     128        }
     129    }
    49130    return this.unitsTrained++;
    50131};
    51132
    52 StatisticsTracker.prototype.IncreaseConstructedBuildingsCounter = function()
     133/**
     134 * Counts the total number of buildings built, as well as separately tracking
     135 * temples and special buildings.
     136 * @param building The building that has been built
     137 * @return The total count of buildings built so far
     138 */
     139StatisticsTracker.prototype.IncreaseConstructedBuildingsCounter = function(building)
    53140{
     141    var cmpBuildingIdentity = Engine.QueryInterface(building, IID_Identity);
     142    if(cmpBuildingIdentity)
     143    {
     144        var statsName = cmpBuildingIdentity.GetStatisticsGroupName();
     145        if(statsName == "Temple")
     146        {
     147            this.templesConstructed++;
     148        }
     149        else if(statsName == "Special")
     150        {
     151            this.specialsConstructed++;
     152        }
     153    }
    54154    return this.buildingsConstructed++;
    55155};
    56156
     
    59159    return this.civCentresBuilt++;
    60160};
    61161
     162
    62163StatisticsTracker.prototype.KilledEntity = function(targetEntity)
    63164{
    64165    var cmpTargetEntityIdentity = Engine.QueryInterface(targetEntity, IID_Identity);
     
    67168        var classes = cmpTargetEntityIdentity.GetClassesList();
    68169        // we want to deal only with real structures, not foundations
    69170        var cmpFoundation = Engine.QueryInterface(targetEntity, IID_Foundation);
     171       
    70172        var targetIsStructure = classes.indexOf("Structure") != -1 && cmpFoundation == null;
    71         var targetIsUnit = classes.indexOf("Unit") != -1;
     173        var targetIsSoldier = classes.indexOf("Infantry") != -1 || classes.indexOf("Cavalry") != -1 ;
     174        var targetIsWarship = classes.indexOf("Warship") != -1;
    72175        var targetIsCivCentre = classes.indexOf("CivCentre") != -1;
    73176               
    74177        var cmpTargetOwnership = Engine.QueryInterface(targetEntity, IID_Ownership);
     
    76179        // don't increase counters if target player is gaia (player 0)
    77180        if (cmpTargetOwnership.GetOwner() != 0)
    78181        {
    79             if (targetIsUnit) this.enemyUnitsKilled++;
    80             if (targetIsStructure) this.enemyBuildingsDestroyed++;
    81             if (targetIsCivCentre) this.enemyCivCentresDestroyed++;
     182            if (targetIsSoldier) this.enemySoldiersKilled++;
     183            if (targetIsWarship) this.enemyWarshipsDestroyed++;
     184            if (targetIsStructure) this.enemyBuildingsRazed++;
     185            if (targetIsCivCentre) this.enemyCivCentresRazed++;
    82186        }
    83187    }
    84188};
     
    92196        // we want to deal only with real structures, not foundations
    93197        var cmpFoundation = Engine.QueryInterface(lostEntity, IID_Foundation);
    94198        var lostEntityIsStructure = classes.indexOf("Structure") != -1 && cmpFoundation == null;
    95         var lostEntityIsUnit = classes.indexOf("Unit") != -1;
     199        var lostEntityIsSoldier = classes.indexOf("Infantry") != -1 || classes.indexOf("Cavalry") != -1;
     200        var lostEntityIsWarship = classes.indexOf("Warship") != -1;
    96201
    97         if (lostEntityIsUnit) this.unitsLost++;
     202        if (lostEntityIsSoldier) this.soldiersLost++;
     203        if (lostEntityIsWarship) this.warshipsLost++;
    98204        if (lostEntityIsStructure) this.buildingsLost++;
    99205    }
    100206};
    101207
    102208/**
    103209 * @param type Generic type of resource (string)
    104  * @param amount Amount of resource, whick should be added (integer)
     210 * @param amount Amount of resource, which should be added (integer)
    105211 * @param specificType Specific type of resource (string, optional)
    106212 */
    107213StatisticsTracker.prototype.IncreaseResourceGatheredCounter = function(type, amount, specificType)
     
    112218        this.resourcesGathered["vegetarianFood"] += amount;
    113219};
    114220
     221/**
     222 * @param resourceAmounts Array of resource types with the amount collected
     223 */
     224StatisticsTracker.prototype.IncreaseResourceLootedCounters = function(resourceAmounts)
     225{
     226    for (var type in resourceAmounts)
     227    {
     228        this.resourcesLooted[type] += resourceAmounts[type];
     229    }
     230};
     231
    115232StatisticsTracker.prototype.IncreaseTreasuresCollectedCounter = function()
    116233{
    117234    return this.treasuresCollected++;
     
    124241    return cmpRangeManager.GetPercentMapExplored(cmpPlayer.GetPlayerID());
    125242};
    126243
     244/**
     245 * Cycles through the total soldier counts to find the soldier most often trained
     246 * by the player.
     247 * @return The soldier most often trained by the player during the game
     248 */
     249StatisticsTracker.prototype.CalculateFavouriteSoldier = function()
     250{
     251    var favouriteSoldier = "";
     252    var favouriteSoldierCount = 0;
     253    for(var soldierType in this.soldierTypeCount)
     254    {
     255        if(this.soldierTypeCount[soldierType] > favouriteSoldierCount)
     256        {
     257            favouriteSoldier = soldierType;
     258            favouriteSoldierCount = this.soldierTypeCount[soldierType];
     259        }
     260    }
     261    return favouriteSoldier
     262};
     263
     264/**
     265 * Cycles through the total warship counts to find the warship most often trained
     266 * by the player.
     267 * @return The warship most often trained by the player during the game
     268 */
     269StatisticsTracker.prototype.CalculateFavouriteWarship = function()
     270{
     271    var favouriteWarship = "";
     272    var favouriteWarshipCount = 0;
     273    for(var warshipType in this.warshipTypeCount)
     274    {
     275        if(this.warshipTypeCount[warshipType] > favouriteWarshipCount)
     276        {
     277            favouriteWarship = warshipType;
     278            favouriteWarshipCount = this.warshipTypeCount[warshipType];
     279        }
     280    }
     281    return favouriteWarship;
     282};
     283
     284/**
     285 * Calculates the kill/death ratio
     286 * @param kills The kills to calculate from
     287 * @param deaths The deaths to calculate from
     288 * @return The kill/death ratio of the player
     289 */
     290StatisticsTracker.prototype.CalculateKillDeathRatio = function(kills, deaths)
     291{
     292    if(kills <= 0) return 0;
     293    if(deaths <= 0) return kills;
     294    return Math.round((kills / deaths) * 1000) / 1000;
     295};
     296
    127297Engine.RegisterComponentType(IID_StatisticsTracker, "StatisticsTracker", StatisticsTracker);
  • simulation/components/TrainingQueue.js

     
    228228        cmpNewOwnership.SetOwner(cmpOwnership.GetOwner());
    229229       
    230230        var cmpPlayerStatisticsTracker = QueryOwnerInterface(this.entity, IID_StatisticsTracker);
    231         cmpPlayerStatisticsTracker.IncreaseTrainedUnitsCounter();
    232        
     231        cmpPlayerStatisticsTracker.IncreaseTrainedUnitsCounter(ent);
    233232        ents.push(ent);
    234233
    235234        // Play a sound, but only for the first in the batch (to avoid nasty phasing effects)
  • simulation/templates/template_structure_civic_temple.xml

     
    22<Entity parent="template_structure_civic">
    33  <Identity>
    44    <GenericName>Temple</GenericName>
     5    <StatisticsGroupName>Temple</StatisticsGroupName>
    56    <Tooltip>Train physicians. (Currently a useless structure)</Tooltip>
    67    <Classes datatype="tokens">Town</Classes>
    78    <Icon>structures/temple.png</Icon>
  • simulation/templates/template_structure_special.xml

     
    22<Entity parent="template_structure">
    33  <Identity>
    44    <GenericName>Special Building</GenericName>
     5    <StatisticsGroupName>Special</StatisticsGroupName>
    56    <Tooltip>This is a special building unique to a particular civilisation.</Tooltip>
    67    <Classes datatype="tokens">City</Classes>
    78    <Icon>.png</Icon>