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);