function ResourceSupply() {} ResourceSupply.prototype.Schema = "Provides a supply of one particular type of resource." + "" + "1000" + "food.meat" + "" + "" + "" + "" + "" + "" + "" + "" + "" + "wood.tree" + "wood.ruins" + "stone.rock" + "stone.ruins" + "metal.ore" + "food.fish" + "food.fruit" + "food.grain" + "food.meat" + "food.milk" + "treasure.wood" + "treasure.stone" + "treasure.metal" + "treasure.food" + "" + ""; ResourceSupply.prototype.Init = function() { // Current resource amount (non-negative) this.amount = this.GetMaxAmount(); }; ResourceSupply.prototype.GetKillBeforeGather = function() { return (this.template.KillBeforeGather == "true"); }; ResourceSupply.prototype.GetMaxAmount = function() { return +this.template.Amount; }; ResourceSupply.prototype.GetCurrentAmount = function() { return this.amount; }; ResourceSupply.prototype.TakeResources = function(rate) { // 'rate' should be a non-negative integer var old = this.amount; this.amount = Math.max(0, old - rate); var change = old - this.amount; // Remove entities that have been exhausted if (this.amount == 0) Engine.DestroyEntity(this.entity); Engine.PostMessage(this.entity, MT_ResourceSupplyChanged, { "from": old, "to": this.amount }); return { "amount": change, "exhausted": (this.amount == 0) }; }; ResourceSupply.prototype.GetType = function() { // All resources must have both type and subtype var [type, subtype] = this.template.Type.split('.'); return { "generic": type, "specific": subtype }; }; Engine.RegisterComponentType(IID_ResourceSupply, "ResourceSupply", ResourceSupply);