User:Flozi/EngineSupportedResources

From Spring
Jump to navigationJump to search

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

<syntaxhighlight lang="lua" line='line'>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? }, }</syntaxhighlight>

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,
	},
}