Index: binaries/data/mods/public/simulation/components/Foundation.js =================================================================== --- binaries/data/mods/public/simulation/components/Foundation.js +++ binaries/data/mods/public/simulation/components/Foundation.js @@ -1,7 +1,13 @@ function Foundation() {} Foundation.prototype.Schema = - ""; + "" + + "" + + "" + + "" + + "" + "" + + ""; Foundation.prototype.Init = function() { @@ -18,6 +24,9 @@ this.buildTimePenalty = 0.7; // Penalty for having multiple builders this.previewEntity = INVALID_ENTITY; + + if (this.template.AutoBuild) + this.StartTimer(); }; Foundation.prototype.InitialiseConstruction = function(owner, template) @@ -124,7 +133,10 @@ if (this.builders.has(builderEnt)) return; - this.builders.set(builderEnt, Engine.QueryInterface(builderEnt, IID_Builder).GetRate()); + let cmpBuilder = Engine.QueryInterface(builderEnt, IID_Builder); + let rate = cmpBuilder ? cmpBuilder.GetRate() : ApplyValueModificationsToEntity("Foundation/AutoBuild/Rate", +this.template.AutoBuild.Rate, this.entity); + + this.builders.set(builderEnt, rate); this.totalBuilderRate += this.builders.get(builderEnt); this.SetBuildMultiplier(); @@ -421,5 +433,44 @@ return cmpHealth.GetMaxHitpoints() / cmpCost.GetBuildTime(); }; +Foundation.prototype.StartTimer = function() +{ + if (this.timer) + return; + + if (this.IsFinished()) + { + this.CancelTimer(); + return; + } + + this.AddBuilder(this.entity); + let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); + this.timer = cmpTimer.SetInterval(this.entity, IID_Foundation, "AutoBuild", 0, 1000, undefined); +}; + +Foundation.prototype.CancelTimer = function() +{ + if (!this.timer) + return; + + let cmpTimer = Engine.QueryInterface(SYSTEM_ENTITY, IID_Timer); + cmpTimer.CancelTimer(this.timer); + delete this.timer; +}; + + +Foundation.prototype.AutoBuild = function() +{ + let cmpBuilder = Engine.QueryInterface(this.entity, IID_Builder); + if (!cmpBuilder) + { + this.CancelTimer(); + return; + } + + this.Build(this.entity, this.GetAutoBuildRate()); +}; + Engine.RegisterComponentType(IID_Foundation, "Foundation", Foundation);