LCOV - code coverage report
Current view: top level - simulation/ai/petra - queue.js (source / functions) Hit Total Coverage
Test: lcov.info Lines: 0 89 0.0 %
Date: 2023-04-02 12:52:40 Functions: 0 17 0.0 %

          Line data    Source code
       1             : /**
       2             :  * Holds a list of wanted plans to train or construct
       3             :  */
       4           0 : PETRA.Queue = function()
       5             : {
       6           0 :         this.plans = [];
       7           0 :         this.paused = false;
       8           0 :         this.switched = 0;
       9             : };
      10             : 
      11           0 : PETRA.Queue.prototype.empty = function()
      12             : {
      13           0 :         this.plans = [];
      14             : };
      15             : 
      16           0 : PETRA.Queue.prototype.addPlan = function(newPlan)
      17             : {
      18           0 :         if (!newPlan)
      19           0 :                 return;
      20           0 :         for (let plan of this.plans)
      21             :         {
      22           0 :                 if (newPlan.category === "unit" && plan.type == newPlan.type && plan.number + newPlan.number <= plan.maxMerge)
      23             :                 {
      24           0 :                         plan.addItem(newPlan.number);
      25           0 :                         return;
      26             :                 }
      27           0 :                 else if (newPlan.category === "technology" && plan.type === newPlan.type)
      28           0 :                         return;
      29             :         }
      30           0 :         this.plans.push(newPlan);
      31             : };
      32             : 
      33           0 : PETRA.Queue.prototype.check= function(gameState)
      34             : {
      35           0 :         while (this.plans.length > 0)
      36             :         {
      37           0 :                 if (!this.plans[0].isInvalid(gameState))
      38           0 :                         return;
      39           0 :                 let plan = this.plans.shift();
      40           0 :                 if (plan.queueToReset)
      41           0 :                         gameState.ai.queueManager.changePriority(plan.queueToReset, gameState.ai.Config.priorities[plan.queueToReset]);
      42             :         }
      43             : };
      44             : 
      45           0 : PETRA.Queue.prototype.getNext = function()
      46             : {
      47           0 :         if (this.plans.length > 0)
      48           0 :                 return this.plans[0];
      49           0 :         return null;
      50             : };
      51             : 
      52           0 : PETRA.Queue.prototype.startNext = function(gameState)
      53             : {
      54           0 :         if (this.plans.length > 0)
      55             :         {
      56           0 :                 this.plans.shift().start(gameState);
      57           0 :                 return true;
      58             :         }
      59           0 :         return false;
      60             : };
      61             : 
      62             : /**
      63             :  * returns the maximal account we'll accept for this queue.
      64             :  * Currently all the cost of the first element and fraction of that of the second
      65             :  */
      66           0 : PETRA.Queue.prototype.maxAccountWanted = function(gameState, fraction)
      67             : {
      68           0 :         let cost = new API3.Resources();
      69           0 :         if (this.plans.length > 0 && this.plans[0].isGo(gameState))
      70           0 :                 cost.add(this.plans[0].getCost());
      71           0 :         if (this.plans.length > 1 && this.plans[1].isGo(gameState) && fraction > 0)
      72             :         {
      73           0 :                 let costs = this.plans[1].getCost();
      74           0 :                 costs.multiply(fraction);
      75           0 :                 cost.add(costs);
      76             :         }
      77           0 :         return cost;
      78             : };
      79             : 
      80           0 : PETRA.Queue.prototype.queueCost = function()
      81             : {
      82           0 :         let cost = new API3.Resources();
      83           0 :         for (let plan of this.plans)
      84           0 :                 cost.add(plan.getCost());
      85           0 :         return cost;
      86             : };
      87             : 
      88           0 : PETRA.Queue.prototype.length = function()
      89             : {
      90           0 :         return this.plans.length;
      91             : };
      92             : 
      93           0 : PETRA.Queue.prototype.hasQueuedUnits = function()
      94             : {
      95           0 :         return this.plans.length > 0;
      96             : };
      97             : 
      98           0 : PETRA.Queue.prototype.countQueuedUnits = function()
      99             : {
     100           0 :         let count = 0;
     101           0 :         for (let plan of this.plans)
     102           0 :                 count += plan.number;
     103           0 :         return count;
     104             : };
     105             : 
     106           0 : PETRA.Queue.prototype.hasQueuedUnitsWithClass = function(classe)
     107             : {
     108           0 :         return this.plans.some(plan => plan.template && plan.template.hasClass(classe));
     109             : };
     110             : 
     111           0 : PETRA.Queue.prototype.countQueuedUnitsWithClass = function(classe)
     112             : {
     113           0 :         let count = 0;
     114           0 :         for (let plan of this.plans)
     115           0 :                 if (plan.template && plan.template.hasClass(classe))
     116           0 :                         count += plan.number;
     117           0 :         return count;
     118             : };
     119             : 
     120           0 : PETRA.Queue.prototype.countQueuedUnitsWithMetadata = function(data, value)
     121             : {
     122           0 :         let count = 0;
     123           0 :         for (let plan of this.plans)
     124           0 :                 if (plan.metadata[data] && plan.metadata[data] == value)
     125           0 :                         count += plan.number;
     126           0 :         return count;
     127             : };
     128             : 
     129           0 : PETRA.Queue.prototype.Serialize = function()
     130             : {
     131           0 :         let plans = [];
     132           0 :         for (let plan of this.plans)
     133           0 :                 plans.push(plan.Serialize());
     134             : 
     135           0 :         return { "plans": plans, "paused": this.paused, "switched": this.switched };
     136             : };
     137             : 
     138           0 : PETRA.Queue.prototype.Deserialize = function(gameState, data)
     139             : {
     140           0 :         this.paused = data.paused;
     141           0 :         this.switched = data.switched;
     142           0 :         this.plans = [];
     143           0 :         for (let dataPlan of data.plans)
     144             :         {
     145             :                 let plan;
     146           0 :                 if (dataPlan.category == "unit")
     147           0 :                         plan = new PETRA.TrainingPlan(gameState, dataPlan.type);
     148           0 :                 else if (dataPlan.category == "building")
     149           0 :                         plan = new PETRA.ConstructionPlan(gameState, dataPlan.type);
     150           0 :                 else if (dataPlan.category == "technology")
     151           0 :                         plan = new PETRA.ResearchPlan(gameState, dataPlan.type);
     152             :                 else
     153             :                 {
     154           0 :                         API3.warn("Petra deserialization error: plan unknown " + uneval(dataPlan));
     155           0 :                         continue;
     156             :                 }
     157           0 :                 plan.Deserialize(gameState, dataPlan);
     158           0 :                 this.plans.push(plan);
     159             :         }
     160             : };

Generated by: LCOV version 1.14