WhiteTreePaladin
ff3c7b46f4
Added placeholder cursor for ruins Added entities for testing these types This was SVN commit r8574.
86 lines
2.6 KiB
JavaScript
86 lines
2.6 KiB
JavaScript
function ResourceSupply() {}
|
|
|
|
ResourceSupply.prototype.Schema =
|
|
"<a:help>Provides a supply of one particular type of resource.</a:help>" +
|
|
"<a:example>" +
|
|
"<Amount>1000</Amount>" +
|
|
"<Type>food.meat</Type>" +
|
|
"</a:example>" +
|
|
"<element name='KillBeforeGather' a:help='Whether this entity must be killed (health reduced to 0) before its resources can be gathered'>" +
|
|
"<data type='boolean'/>" +
|
|
"</element>" +
|
|
"<element name='Amount' a:help='Amount of resources available from this entity'>" +
|
|
"<data type='nonNegativeInteger'/>" +
|
|
"</element>" +
|
|
"<element name='Type' a:help='Type of resources'>" +
|
|
"<choice>" +
|
|
"<value>wood.tree</value>" +
|
|
"<value>wood.ruins</value>" +
|
|
"<value>wood.treasure</value>" +
|
|
"<value>stone.rock</value>" +
|
|
"<value>stone.ruins</value>" +
|
|
"<value>stone.treasure</value>" +
|
|
"<value>metal.ore</value>" +
|
|
"<value>metal.treasure</value>" +
|
|
"<value>food.fish</value>" +
|
|
"<value>food.fruit</value>" +
|
|
"<value>food.grain</value>" +
|
|
"<value>food.meat</value>" +
|
|
"<value>food.milk</value>" +
|
|
"<value>food.treasure</value>" +
|
|
"</choice>" +
|
|
"</element>";
|
|
|
|
ResourceSupply.prototype.Init = function()
|
|
{
|
|
// Current resource amount (non-negative; can be a fractional amount)
|
|
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)
|
|
{
|
|
// Internally we handle fractional resource amounts (to be accurate
|
|
// over long periods of time), but want to return integers (so players
|
|
// have a nice simple integer amount of resources). So return the
|
|
// difference between rounded values:
|
|
|
|
var old = this.amount;
|
|
this.amount = Math.max(0, old - rate);
|
|
|
|
// (use ceil instead of floor so that we continue returning non-zero values even if 0 < amount < 1)
|
|
var change = Math.ceil(old) - Math.ceil(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": (old == 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);
|