LCOV - code coverage report
Current view: top level - simulation/components - Treasure.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 36 43 83.7 %
Date: 2023-04-02 12:52:40 Functions: 7 9 77.8 %

          Line data    Source code
       1             : function Treasure() {}
       2             : 
       3           2 : Treasure.prototype.Schema =
       4             :         "<a:help>Provides a bonus when taken. E.g. a supply of resources.</a:help>" +
       5             :         "<a:example>" +
       6             :                 "<CollectTime>1000</CollectTime>" +
       7             :                 "<Resources>" +
       8             :                         "<Food>1000</Food>" +
       9             :                 "</Resources>" +
      10             :         "</a:example>" +
      11             :         "<element name='CollectTime' a:help='Amount of milliseconds that it takes to collect this treasure.'>" +
      12             :                 "<ref name='nonNegativeDecimal'/>" +
      13             :         "</element>" +
      14             :         "<optional>" +
      15             :                 "<element name='Resources' a:help='Amount of resources that are in this.'>" +
      16             :                         Resources.BuildSchema("positiveDecimal") +
      17             :                 "</element>" +
      18             :         "</optional>";
      19             : 
      20           2 : Treasure.prototype.Init = function()
      21             : {
      22             : };
      23             : 
      24           2 : Treasure.prototype.ComputeReward = function()
      25             : {
      26           2 :         for (let resource in this.template.Resources)
      27             :         {
      28           2 :                 let amount = ApplyValueModificationsToEntity("Treasure/Resources/" + resource, this.template.Resources[resource], this.entity);
      29           2 :                 if (!amount)
      30           0 :                         continue;
      31           2 :                 if (!this.resources)
      32           2 :                         this.resources = {};
      33           2 :                 this.resources[resource] = amount;
      34             :         }
      35             : };
      36             : 
      37             : /**
      38             :  * @return {Object} - The resources given by this treasure.
      39             :  */
      40           2 : Treasure.prototype.Resources = function()
      41             : {
      42           0 :         return this.resources || {};
      43             : };
      44             : 
      45             : /**
      46             :  * @return {number} - The time in miliseconds it takes to collect this treasure.
      47             :  */
      48           2 : Treasure.prototype.CollectionTime = function()
      49             : {
      50           1 :         return +this.template.CollectTime;
      51             : };
      52             : 
      53             : /**
      54             :  * @param {number} entity - The entity collecting us.
      55             :  * @return {boolean} - Whether the reward was granted.
      56             :  */
      57           2 : Treasure.prototype.Reward = function(entity)
      58             : {
      59           4 :         if (this.isTaken)
      60           1 :                 return false;
      61             : 
      62           3 :         let cmpPlayer = QueryOwnerInterface(entity);
      63           3 :         if (!cmpPlayer)
      64           1 :                 return false;
      65             : 
      66           2 :         let cmpFogging = Engine.QueryInterface(this.entity, IID_Fogging);
      67           2 :         if (cmpFogging)
      68           0 :                 cmpFogging.Activate();
      69             : 
      70           2 :         if (this.resources)
      71           2 :                 cmpPlayer.AddResources(this.resources);
      72             : 
      73           2 :         let cmpStatisticsTracker = QueryOwnerInterface(entity, IID_StatisticsTracker);
      74           2 :         if (cmpStatisticsTracker)
      75           0 :                 cmpStatisticsTracker.IncreaseTreasuresCollectedCounter();
      76             : 
      77           2 :         let cmpTrigger = Engine.QueryInterface(SYSTEM_ENTITY, IID_Trigger);
      78           2 :         cmpTrigger.CallEvent("OnTreasureCollected", {
      79             :                 "player": cmpPlayer.GetPlayerID(),
      80             :                 "treasure": this.entity
      81             :         });
      82             : 
      83           2 :         this.isTaken = true;
      84           2 :         Engine.DestroyEntity(this.entity);
      85           2 :         return true;
      86             : };
      87             : 
      88             : /**
      89             :  * We might live long enough for a collecting entity
      90             :  * to find us again after taking us.
      91             :  * @return {boolean} - Whether we are taken already.
      92             :  */
      93           2 : Treasure.prototype.IsAvailable = function()
      94             : {
      95           2 :         return !this.isTaken;
      96             : };
      97             : 
      98           2 : Treasure.prototype.OnOwnershipChanged = function(msg)
      99             : {
     100           2 :         if (msg.to != INVALID_PLAYER)
     101           2 :                 this.ComputeReward();
     102             : };
     103             : 
     104           2 : Treasure.prototype.OnValueModification = function(msg)
     105             : {
     106           0 :         if (msg.component != "Treasure")
     107           0 :                 return;
     108           0 :         this.ComputeReward();
     109             : };
     110             : 
     111           2 : Engine.RegisterComponentType(IID_Treasure, "Treasure", Treasure);

Generated by: LCOV version 1.14