From 400895dca76554b71540bd159b9f8a6a96411006 Mon Sep 17 00:00:00 2001 From: crazydubc Date: Sat, 20 Mar 2021 10:19:31 -0600 Subject: [PATCH] Add prototype to creeps for each action Adds a prototype for each actions that calculates the amount it can perform this tick based on number of parts and boosts. (example: creep.repairAmount for the amount a creep can repair, or creep.attackAmount for melee attack amount) --- ...tActiveBodyparts accounting for boosts!.js | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/prototypes/JavaScript/Creep/Freshly minted getActiveBodyparts accounting for boosts!.js b/src/prototypes/JavaScript/Creep/Freshly minted getActiveBodyparts accounting for boosts!.js index 576848c..e3c7a53 100644 --- a/src/prototypes/JavaScript/Creep/Freshly minted getActiveBodyparts accounting for boosts!.js +++ b/src/prototypes/JavaScript/Creep/Freshly minted getActiveBodyparts accounting for boosts!.js @@ -31,3 +31,46 @@ Creep.prototype.getBodypartsBoostEquivalent = function(type, action) { } return total; }; + +//optional, add action+'Amount object to all creeps. For example creep.repairAmount would return the amount that creep can repair based on parts and boosts. +//create an actionsMatrix to hold all actions based on body parts +global.actionsMatrix = { + [WORK] : [ + 'harvest', 'build', 'repair','dismantle','upgradeController' + ], + [ATTACK] : [ + 'attack' + ], + [RANGED_ATTACK] : [ + 'rangedAttack', 'rangedMassAttack' + ], + [HEAL] : [ + 'heal', 'rangedHeal' + ], + [CARRY] : [ + 'capacity' + ], + [MOVE] : [ + 'fatigue' + ], + [TOUGH] : [ + 'damage' + ] +} +//create a prototype for each action. +for (const type in actionsMatrix) { + actionsMatrix[type].forEach(function(action){ + Object.defineProperty(Creep.prototype, action+'Amount', { + get: function(){ + //initialize..if one isn't initialized, none of them are + if (!this['_'+action+'Amount']) { + this['_'+action+'Amount'] = this.getActiveBodypartsBoostEquivalent(type, action) + } + return this['_'+action+'Amount'] + }, + set: function(){}, + enumerable: false, + configurable: true, + }); + }); +}