Merge remote-tracking branch 'origin/master-ng' into branch

# Conflicts:
#	Moose Development/Moose/Wrapper/Controllable.lua
This commit is contained in:
Applevangelist
2026-08-27 12:22:31 +02:00
5 changed files with 44 additions and 30 deletions
@@ -186,6 +186,8 @@ function DATABASE:AddUnit( DCSUnitName, force )
-- Register unit
self.UNITS[DCSunitName]=UNIT:Register(DCSunitName)
else
self.UNITS[DCSunitName]:ResetOptionCacheIfDCSObjectChanged()
end
return self.UNITS[DCSunitName]
@@ -802,6 +804,8 @@ function DATABASE:AddGroup( GroupName, force )
if not self.GROUPS[GroupName] or force == true then
self:T( { "Add GROUP:", GroupName } )
self.GROUPS[GroupName] = GROUP:Register( GroupName )
else
self.GROUPS[GroupName]:ResetOptionCacheIfDCSObjectChanged()
end
return self.GROUPS[GroupName]
+2 -2
View File
@@ -4068,8 +4068,8 @@ end
-- @param #RAT self
-- @param Core.Event#EVENTDATA EventData
function RAT:_OnBirth(EventData)
self:F3(EventData)
self:T3(self.lid.."Captured event birth!")
self:F2(EventData)
self:T2(self.lid.."Captured event birth!")
local SpawnGroup = EventData.IniGroup --Wrapper.Group#GROUP
@@ -3283,34 +3283,22 @@ end
-- @param #number OptionValue Value of the option
-- @return #CONTROLLABLE self
function CONTROLLABLE:SetOption( OptionID, OptionValue )
local setnewoption = false
-- Check if option has changed against cached option
local ID = tostring(OptionID)
if self.ControllableOptions then
if (self.ControllableOptions[ID] ~= OptionValue) or (self.ControllableOptions[ID]==nil) then
setnewoption = true
self.ControllableOptions[ID] = OptionValue
--self:I(string.format("CONTROLLABLE %s: Option CHANGE for option %d: New value: %s!",self.ControllableName, OptionID, tostring(OptionValue)))
end
end
-- change option if changed
if setnewoption == true then
local DCSControllable = self:GetDCSObject()
if DCSControllable then
local Controller = self:_GetController()
--self:I(string.format("CONTROLLABLE %s: Setting OPTION %d: to value: %s!",self.ControllableName, OptionID, tostring(OptionValue)))
Controller:setOption( OptionID, OptionValue )
if OptionValue ~= nil and self.ControllableOptions and self.ControllableOptions[ID] == OptionValue then
return self
end
--else
--self:I(string.format("CONTROLLABLE %s: Option NO CHANGE for option %d: Same value: %s!",self.ControllableName, OptionID, tostring(OptionValue)))
local DCSControllable = self:GetDCSObject()
if DCSControllable then
local Controller = DCSControllable:getController()
Controller:setOption( OptionID, OptionValue )
self.ControllableOptions = self.ControllableOptions or {}
self.ControllableOptions[ID] = OptionValue
self.ControllableOptionDCSObject = DCSControllable
return self
end
return nil
end
--- Query a (cached) option. Requires the option has been set with Moose(!) before.
@@ -3325,6 +3313,27 @@ function CONTROLLABLE:QueryCachedOption(OptionID)
return nil
end
--- Reset cached options for this controllable.
-- @param #CONTROLLABLE self
-- @return #CONTROLLABLE self
function CONTROLLABLE:ResetOptionCache()
self.ControllableOptions = {}
self.ControllableOptionDCSObject = self:GetDCSObject()
return self
end
--- Reset cached options when the underlying DCS object has changed.
-- @param #CONTROLLABLE self
-- @return #CONTROLLABLE self
function CONTROLLABLE:ResetOptionCacheIfDCSObjectChanged()
local DCSControllable = self:GetDCSObject()
if self.ControllableOptionDCSObject ~= DCSControllable then
self.ControllableOptions = {}
self.ControllableOptionDCSObject = DCSControllable
end
return self
end
--- Set option for Rules of Engagement (ROE).
-- @param #CONTROLLABLE self
-- @param #number ROEvalue ROE value. See ENUMS.ROE.
@@ -2272,6 +2272,9 @@ function GROUP:Respawn( Template, Reset )
-- Reset events.
self:ResetEvents()
-- Reset options.
self:ResetOptionCache()
return self
end
+1 -3
View File
@@ -287,7 +287,7 @@ function SCENERY:FindByName(Name, Coordinate, Radius, Role, Zone)
--BASE:I("Coordinate x = "..Coordinate.x .. " y = "..Coordinate.y.." z = "..Coordinate.z)
local findme = self:_FindByName(Name)
if findme then return findme end
if findme and findme:GetDCSObject() then return findme end
local radius = Radius or 100
local name = Name or "unknown"
@@ -322,8 +322,6 @@ function SCENERY:FindByName(Name, Coordinate, Radius, Role, Zone)
scenery = SceneryScan(Coordinate, radius, name)
end
if not scenery then scenery = SCENERY:Register(Name,nil,Zone) end
return scenery
end