function StadiumUpdate(idx)
local as = gSportsRNA
local stadium = as:GetTable("wvStadium", idx)
db.stadium[idx].lightType = as:GetInt(stadium, "stadLightType")
db.stadium[idx].stadiumID = as:GetInt(stadium, "stadID")
db.stadium[idx].prefix = as:GetString(stadium, "stadNamePrefix")
-- db.stadium[idx].asset = db.stadium[idx].prefix .."_".. db.stadium[idx].stadiumID .."_".. db.stadium[idx].lightType.."_container_0"
db.stadium[idx].pitchColor = as:GetInt(stadium, "stadLightType")
db.stadium[idx].mowPattern = as:GetInt(stadium, "pitchMowPattern")
db.stadium[idx].wearPattern = as:GetInt(stadium, "pitchWearPattern")
db.stadium[idx].adboardID = as:GetInt(stadium, "adboardID" )
db.stadium[idx].adboardGroup = as:GetInt(stadium, "adboardGroup" )
db.stadium[idx].homeTeamID = as:GetInt(stadium, "homeTeamID" )
db.stadium[idx].homeTeamTypeID = as:GetInt(stadium, "homeTeamTypeID" )
db.stadium[idx].awayTeamID = as:GetInt(stadium, "awayTeamID" )
db.stadium[idx].awayTeamTypeID = as:GetInt(stadium, "awayTeamTypeID" )
db.stadium[idx].homePrimaryColour = as:GetInt(stadium, "homePrimaryColour")
db.stadium[idx].homeSecondaryColour = as:GetInt(stadium, "homeSecondaryColour")
end
function StadiumAssetBind(stadium)
local gr = gRenderables
local lod = 0
local priority = 1 -- Load all the stadium assets at a higher priority than the rest, so we can get it loaded early
local banneridx = 0
local maxbanners = 11
-- Get all assets we require in...
gr:AddCallback(stadium, lod, "StadiumUpdate(?)")
gr:AddAsset(stadium, lod, "shader", "data/fifarna/shader.big")
gr:AddAsset(stadium, lod, "stadium", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
-- Assets we need to intercept
gr:AddAsset(stadium, lod, "pitchambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "pitchnolineambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "jumbotronambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboardambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboardscrollingambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboarddigitalambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboarddigitalglow", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboarddigitalglowambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboardsingledigitalambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboardsingledigitalglow", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "adboardsingledigitalglowambient","data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "crestambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "homeprimaryambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "homesecondaryambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "bannerhomeambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "bannerawayambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "pitchadambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "diffuseshadow", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
gr:AddAsset(stadium, lod, "diffuseshadowambient", "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
local bannermat
for banneridx=0, maxbanners-1 do
bannermat = string.format( "banner%sambient", banneridx )
gr:AddAsset(stadium, lod, bannermat, "data/sceneassets/stadium/${db.stadium[?].prefix}_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_container_0.rx3", priority)
end
-- Additional assets to load
gr:AddAsset(stadium, lod, "mow", "data/sceneassets/pitch/pitchmowpattern_${db.stadium[?].mowPattern}_textures.rx3", priority)
gr:AddAsset(stadium, lod, "cmn", "data/sceneassets/pitch/pitch_common_textures.rx3", priority)
gr:AddAsset(stadium, lod, "cov", "data/sceneassets/pitch/pitchcovmap_${db.stadium[?].stadiumID}_${db.stadium[?].lightType}_textures.rx3", priority)
gr:AddAsset(stadium, lod, "col", "data/sceneassets/pitch/pitchcolor_${db.stadium[?].pitchColor}_textures.rx3", priority)
gr:AddAsset(stadium, lod, "globaltex", "data/sceneassets/globaltex/globaltex_0.rx3", priority)
gr:AddAsset(stadium, lod, "wear", "data/sceneassets/pitch/pitchwearpattern_${db.stadium[?].wearPattern}_textures.rx3", priority)
--TODO direct it into host city texture
gr:AddAsset(stadium, lod, "adboardsingletex", "data/sceneassets/adboard/adboard_${db.stadium[?].adboardID}_${db.stadium[?].adboardGroup}.rx3", priority)
gr:AddAsset(stadium, lod, "homekittex", "data/sceneassets/kit/kit_${db.stadium[?].homeTeamID}_${db.stadium[?].homeTeamTypeID}_0.rx3", priority)
gr:AddAsset(stadium, lod, "homebannertex", "data/sceneassets/banner/banner_${db.stadium[?].homeTeamID}.rx3;data/sceneassets/banner/banner_0.rx3", priority)
gr:AddAsset(stadium, lod, "awaybannertex", "data/sceneassets/banner/banner_${db.stadium[?].awayTeamID}.rx3;data/sceneassets/banner/banner_0.rx3", priority)
gr:AddAsset(stadium, lod, "pitchadtex", "data/sceneassets/pitchad/pitchad_${db.stadium[?].adboardID}.rx3", priority)
-- Now generate custom materials (these should be named after the shader they are to replace)
-- Pitch
local part = "pitchambient"
gr:CreateMaterial(stadium, lod, part, "hdr_pitch.fx")
gr:SetTexture(stadium, lod, part, "textures", "noiseTexture", "globaltex", "multiFreq_noise")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "col", "grass_color")
-- ambient should magically be populated by the original state block of the stadium
gr:SetTexture(stadium, lod, part, "textures", "normalMap", "mow", "grass_normal")
gr:SetTexture(stadium, lod, part, "textures", "alphamask", "wear", "grass_wear")
gr:SetTexture(stadium, lod, part, "textures", "pitchLinesMap", "cmn", "grass_pitchlines")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "PitchFlatShadow", "flatshadows")
part = "pitchnolineambient"
gr:CreateMaterial(stadium, lod, part, "hdr_pitchnoline.fx")
gr:SetTexture(stadium, lod, part, "textures", "noiseTexture", "globaltex", "multiFreq_noise")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "col", "grass_color")
-- ambient should magically be populated by the original state block of the stadium
-- gr:SetTexture(stadium, lod, part, "textures", "normalMap", "mow", "grass_normal")
-- gr:SetTexture(stadium, lod, part, "textures", "alphamask", "wear", "grass_wear")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "PitchFlatShadow", "flatshadows")
-- Render to texture jumbotron
part = "jumbotronambient"
-- gr:CreateMaterialFromAttribulator(stadium, lod, part, "jumbotronambient", "${AttribMaterial('jumbotronambient')}")
gr:CreateMaterial(stadium, lod, part, "jumbotron.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "jumbotronMap", "FrameGrab0")
gr:SetTexture(stadium, lod, part, "textures", "LEDTexture", "globaltex", "LED_cm")
-- Stadium Adboards
-- All of them redirected into runtime texture managed by adboard renderable
-- The exception is adboardsingledigitalambient and adboardsingledigitalglowambient which
-- show a completely different not switching texture all the time
part = "adboardambient"
gr:CreateMaterial(stadium, lod, part, "adboardambient.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", "adboard${?}")
part = "adboardscrollingambient"
gr:CreateMaterial(stadium, lod, part, "adboardscrollingambient.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", "adboard${?}")
part = "adboarddigitalambient"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalambient.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", "adboard${?}")
gr:SetTexture(stadium, lod, part, "textures", "incandescenceMap", "globaltex", "digitalgrid_cm")
part = "adboarddigitalglow"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalglowambient.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", "adboard${?}")
part = "adboarddigitalglowambient"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalglowambient.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", "adboard${?}")
part = "adboardsingledigitalambient"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalambient.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "adboardsingletex", "adboard")
gr:SetTexture(stadium, lod, part, "textures", "incandescenceMap", "globaltex", "digitalgrid_cm")
part = "adboardsingledigitalglow"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalglowambient.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "adboardsingletex", "adboard")
part = "adboardsingledigitalglowambient"
gr:CreateMaterial(stadium, lod, part, "adboarddigitalglowambient.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "adboardsingletex", "adboard")
-- The home team crest in the stadium
part = "crestambient"
-- gr:CreateMaterialFromAttribulator(stadium, lod, part, "crestambient", "${AttribMaterial('crestambient')}")
gr:CreateMaterial(stadium, lod, part, "env_Diff.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "homekittex", "crest_")
-- Stadium Banners
part = "bannerhomeambient"
gr:CreateMaterial(stadium, lod, part, "env_Diff.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "homebannertex", "banner_")
part = "bannerawayambient"
gr:CreateMaterial(stadium, lod, part, "env_Diff.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "awaybannertex", "banner_")
------------------------------------------------------------------------------------------------------
-- Stadium Banners with dynamic distribution
local texname
for banneridx=0, maxbanners-1 do
part = string.format( "banner%sambient", banneridx )
texname = string.format( "banner%s", banneridx )
gr:CreateMaterial(stadium, lod, part, "env_Diff.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "diffuseTexture", texname)
end
------------------------------------------------------------------------------------------------------
-- Team colours
part = "homeprimaryambient"
gr:CreateMaterial(stadium, lod, part, "env_DiffColour.fx")
gr:SetConstantARGB(stadium, lod, part, "global", "envColour", "${db.stadium[?].homePrimaryColour}")
part = "homesecondaryambient"
gr:CreateMaterial(stadium, lod, part, "env_DiffColour.fx")
gr:SetConstantARGB(stadium, lod, part, "global", "envColour", "${db.stadium[?].homeSecondaryColour}")
-- Pitch adboards (fake 3d)
part = "pitchadambient"
gr:CreateMaterial(stadium, lod, part, "env_Diff.fx")
gr:SetTexture(stadium, lod, part, "textures", "diffuseTexture", "pitchadtex", "pitchad")
-- Flatshadow enabled geometry
part = "diffuseshadowambient"
gr:CreateMaterial(stadium, lod, part, "env_Diff_flatshadow.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "PitchFlatShadow", "flatshadows")
-- Flatshadow enabled geometry
part = "diffuseshadow"
gr:CreateMaterial(stadium, lod, part, "env_Diff_flatshadow.fx")
gr:SetTextureFromRuntime(stadium, lod, part, "textures", "PitchFlatShadow", "flatshadows")
end