forked from 0ad/0ad
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);
|