wiremod/wire

RT Camera may work incorrectly if two RT Screens are connected to it.

stepa2 opened this issue · 1 comments

It seems that, if RT Camera is connected to two monitors, of which only one is enabled,
one monitor can break another depending on the clientside :Think order.

I can't right now check if this issue actually exists and fix it, but it seems to exist, according to the code.
I've personally seen a bug when monitor breaks, but I'm not sure if it related to this issue.

function ENT:Think()
local camera = self:GetCamera()
if not self:GetActive() then
if IsValid(camera) then
camera:SetIsObserved(false)
end
self.ShouldRenderCamera = false
return
end
self.ShouldRenderCamera = self:IsScreenInRange(LocalPlayer())
if IsValid(camera) then
camera:SetIsObserved(self.ShouldRenderCamera)
end
end

To fix this, cameras clientside should store set of entities (for future compatibility, not necessary screens) that are observing it and :AddObserver(ent) and :RemoveObserver(ent) functions.

  • :AddObserver should call :SetIsObserved(true) (always, as after :AddObserver called, there will be >=1 observers).
  • :RemoveObserver should call :SetIsObserved(false), if it removed last observer.

Just checked - yeah, one monitor may disable another if in correct order