User:Flozi/EngineSupportedResources: Difference between revisions
m disclaimer++ |
m →Gamedata/Resources.lua: text wrapping |
||
| Line 102: | Line 102: | ||
<code><pre>return { | <code><pre>return { | ||
metal = { | metal = { | ||
extractable = true, -- all resources can be extractable, but for now only from the current single 'metal map' | extractable = true, -- all resources can be extractable, | ||
-- but for now only from the current single 'metal map' | |||
}, | }, | ||
energy = { | energy = { | ||
| Line 109: | Line 110: | ||
}, | }, | ||
gold = { | gold = { | ||
harvestable = true, -- only resources which have this set can fill a units harvestStorage when reclaimed from a unit or feature | harvestable = true, -- only resources which have this set can fill a units harvestStorage | ||
-- when reclaimed from a unit or feature | |||
tidal = true, | tidal = true, | ||
}, | }, | ||
Revision as of 18:01, 29 October 2014
A little scrapbook of (incomplete) ideas - purely from a game dev, not engine dev perspective - about how engine-supported multiple resources might look. Realistically, such support would be a huge undertaking and probably not worth the effort seen as most of this can already be done purely through lua, and the 2 engine 'hardcoded' resources are flexible enough to be used in various ways (c.f. S44 & MCL). Backwards compatibility would also be a maintenance nightmare.
Lua SyncedRead
Spring.GetTeamResources
( number teamID, string resourceName ) ->
nil | number currentLevel,
number storage,
number pull,
number income,
number expense,
number share,
number sent,
number received
Spring.GetTeamResourceStats
( number teamID, string resourceName ) ->
nil | number used,
number produced,
number excessed,
number received,
number sent
Spring.GetUnitResources
( number unitID ) -> nil | {make = {metal = 1.0, ...}, uses = {energy = 5.0, ...}}
Spring.GetUnitHarvestStorage
( number unitID ) -> nil | {coal = 50, gold = 2 ...}
Lua SyncedCtrl
Team
Spring.AddTeamResource
( number teamID, string resourceName, number amount ) -> nil
( number teamID, { ["metal"] = amount, ... } ) -> nil
Spring.UseTeamResource
( number teamID,
string resourceName, number amount |
{ ["metal"] = number amount, ...}
) -> nil | boolean hadEnough
Spring.SetTeamResource
( number teamID, string resourceName, number amount, bool storage = false ) -> nil
Spring.SetTeamShareLevel
( number teamID, string resourceName, number amount ) -> nil
Spring.ShareTeamResource
( number teamID_src, number teamID_recv, string resourceName, number amount ) -> nil
Unit
Spring.SetUnitResourcing
( number unitID,
string resourceName, bool conditional, number amount |
{ ["metal"] = number amount, ... }
) -> nil
Spring.AddUnitResource
( number unitID, string resourceName, number amount ) -> nil
( number unitID, { ["metal"] = amount, ... } ) -> nil
Spring.UseUnitResource
( number unitID, string resourceName, number amount ) -> nil | boolean okay
( number unitID, { ["metal"] = amount, ... } ) -> nil | boolean okay
Spring.SetUnitHarvestStorage
( number unitid, string resourceName, number amount )
( number unitID, { ["metal"] = amount, ... } ) -> nil
Unit/FeatureDefs
resources = {
cost = { -- features only support this, used for reclamation values
metal = 50,
energy = 130,
coal = 100,
},
makes = {
metal = 1.0,
},
uses = {
energy = 5.0,
},
extracts = {
metal = {radius = 5.0, amount = 1.0},
coal = {radius = 10.0, amount = 5.0},
},
generates = {
wind = {energy = 25},
tidal = {gold = 5}, -- panning or something, w/e it is an example!
},
storage = {
metal = 50,
harvest = 100, -- a single harvestStorage or per-resource?
},
}
Gamedata/Resources.lua
Old one is renamed to Textures.lua or equivalent
return {
metal = {
extractable = true, -- all resources can be extractable,
-- but for now only from the current single 'metal map'
},
energy = {
tidal = true,
wind = true,
},
gold = {
harvestable = true, -- only resources which have this set can fill a units harvestStorage
-- when reclaimed from a unit or feature
tidal = true,
},
coal = {
extractable = true,
harvestable = true,
},
}