December 7, 2009
It's 12:30 in the morning, but I have the model scripts working the way I want. Thanks to "Nilium" for his tips, and to everyone who gave their feedback. I am confident in this revision. I have a lot of scripts that need to be slightly altered, but it's just a matter of adjusting the function structure, not really changing any existing code.
Here's the light_ambient script:
require("scripts/class")
require("scripts/linkedlist")
local class=CreateClass(...)
function class:Spawn(model)
local object=self.super:Spawn(model)
function object:Update()
	AmbientLight(self.model.color)
end
function object:SetKey(key,value)
	if key=="color" then
		local returnvalue=self.super:SetKey(key,value)			
		self:Update()
		return returnvalue
	elseif key=="intensity" then
		local returnvalue=self.super:SetKey(key,value)	
		self:Update()
		return returnvalue
	else
		return self.super:SetKey(key,value)
	end
	return 1
end
function object:Kill(model)
	local model,object
	--Iterate through all instances of this class.
	--If any instances are found, use them to set
	--the ambient light value.
	for model,object in pairs(self.class.instances) do
		if object~=self then
			object:Update()
			break
		end
	end
	self.super:Kill()
end
object.model:SetKey("intensity","0.5")
--Call the update function before finishing.
--This can only be called after the function is declared.
--We don't actually need to call it here since setting the intensity key
--will do that for us, but it's still a good idea as a general rule.
object:Update()
end
function class:Cleanup()
--Restore default ambient light setting.
AmbientLight(Vec3(0.5,0.5,0.5))
self.super:Cleanup()
end
 
			
		 
	
7 Comments
Recommended Comments