1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
  
     | 
    
      UnitHandler = class(Module)
function UnitHandler:Name()
	return "UnitHandler"
end
function UnitHandler:internalName()
	return "unithandler"
end
function UnitHandler:Init()
	self.units = {}
	self.myUnits = {}
	self.behaviourFactory = BehaviourFactory()
	self.behaviourFactory:Init()
end
function UnitHandler:Update()
	for k,v in pairs(self.myUnits) do
		v:Update()
	end
end
function UnitHandler:GameEnd()
	for k,v in pairs(self.myUnits) do
		v:GameEnd()
	end
end
function UnitHandler:UnitCreated(engineunit)
	u = Unit()
	self.units[engineunit:ID()] = u
	u:SetEngineRepresentation(engineunit)
	u:Init()
	if engineunit:Team() == game:GetTeamID() then
		self.myUnits[engineunit:ID()] = u
		self.behaviourFactory:AddBehaviours(u)
	end
	for k,v in pairs(self.myUnits) do
		v:UnitCreated(u)
	end
end
function UnitHandler:UnitBuilt(engineunit)
	local u = self:AIRepresentation(engineunit)
	if u ~= nil then
		for k,v in pairs(self.myUnits) do
			v:UnitBuilt(u)
		end
	end
end
function UnitHandler:UnitDead(engineunit)
	local u = self:AIRepresentation(engineunit)
	if u ~= nil then
		for k,v in pairs(self.myUnits) do
			v:UnitDead(u)
		end
	end
	self.units[engineunit:ID()] = nil
	self.myUnits[engineunit:ID()] = nil
end
function UnitHandler:UnitDamaged(engineunit,attacker)
	local u = self:AIRepresentation(engineunit)
	local a = self:AIRepresentation(attacker)
	for k,v in pairs(self.myUnits) do
		v:UnitDamaged(u,a)
	end
end
function UnitHandler:AIRepresentation(engineUnit)
	if engineUnit == nil then
		return nil
	end
	local unittable = self.units
	local u = unittable[engineUnit:ID()]
	if u == nil then
		u = Unit()
		self.units[engineUnit:ID()] = u
		
		u:SetEngineRepresentation(engineUnit)
		u:Init()
		if engineUnit:Team() == game:GetTeamID() then
			self.behaviourFactory:AddBehaviours(u)
			self.myUnits[engineUnit:ID()] = u
		end
	end
	return u
end
function UnitHandler:UnitIdle(engineunit)
	local u = self:AIRepresentation(engineunit)
	if u ~= nil then
		for k,v in pairs(self.units) do
			v:UnitIdle(u)
		end
	end
end
 
     |