mirror of
https://github.com/FlightControl-Master/MOOSE.git
synced 2025-10-29 16:58:06 +00:00
Zone probability implementation.
This commit is contained in:
@@ -4606,19 +4606,38 @@ end
|
|||||||
--- Get a random zone from the set.
|
--- Get a random zone from the set.
|
||||||
-- @param #SET_ZONE self
|
-- @param #SET_ZONE self
|
||||||
-- @return Core.Zone#ZONE_BASE The random Zone.
|
-- @return Core.Zone#ZONE_BASE The random Zone.
|
||||||
|
-- @return #nil if no zone in the collection.
|
||||||
function SET_ZONE:GetRandomZone()
|
function SET_ZONE:GetRandomZone()
|
||||||
|
|
||||||
local Index = self.Index
|
if self:Count() ~= 0 then
|
||||||
local ZoneFound = nil
|
|
||||||
|
|
||||||
|
local Index = self.Index
|
||||||
|
local ZoneFound = nil -- Core.Zone#ZONE_BASE
|
||||||
|
|
||||||
|
-- Loop until a zone has been found.
|
||||||
|
-- The :GetZoneMaybe() call will evaluate the probability for the zone to be selected.
|
||||||
|
-- If the zone is not selected, then nil is returned by :GetZoneMaybe() and the loop continues!
|
||||||
while not ZoneFound do
|
while not ZoneFound do
|
||||||
local ZoneRandom = math.random( 1, #Index )
|
local ZoneRandom = math.random( 1, #Index )
|
||||||
ZoneFound = self.Set[Index[ZoneRandom]]
|
ZoneFound = self.Set[Index[ZoneRandom]]:GetZoneMaybe()
|
||||||
end
|
end
|
||||||
|
|
||||||
return ZoneFound
|
return ZoneFound
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
--- Set a zone probability.
|
||||||
|
-- @param #SET_ZONE self
|
||||||
|
-- @param #string ZoneName The name of the zone.
|
||||||
|
function SET_ZONE:SetZoneProbability( ZoneName, ZoneProbability )
|
||||||
|
local Zone = self:FindZone( ZoneName )
|
||||||
|
Zone:SetZoneProbability( ZoneProbability )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- Builds a set of zones of defined zone prefixes.
|
--- Builds a set of zones of defined zone prefixes.
|
||||||
|
|||||||
@@ -341,6 +341,27 @@ end
|
|||||||
-- @param #ZONE_BASE self
|
-- @param #ZONE_BASE self
|
||||||
-- @return #ZONE_BASE The zone is selected taking into account the randomization probability factor.
|
-- @return #ZONE_BASE The zone is selected taking into account the randomization probability factor.
|
||||||
-- @return #nil The zone is not selected taking into account the randomization probability factor.
|
-- @return #nil The zone is not selected taking into account the randomization probability factor.
|
||||||
|
-- @usage
|
||||||
|
--
|
||||||
|
-- local ZoneArray = { ZONE:New( "Zone1" ), ZONE:New( "Zone2" ) }
|
||||||
|
--
|
||||||
|
-- -- We set a zone probability of 70% to the first zone and 30% to the second zone.
|
||||||
|
-- ZoneArray[1]:SetZoneProbability( 0.5 )
|
||||||
|
-- ZoneArray[2]:SetZoneProbability( 0.5 )
|
||||||
|
--
|
||||||
|
-- local ZoneSelected = nil
|
||||||
|
--
|
||||||
|
-- while ZoneSelected == nil do
|
||||||
|
-- for _, Zone in pairs( ZoneArray ) do
|
||||||
|
-- ZoneSelected = Zone:GetZoneMaybe()
|
||||||
|
-- if ZoneSelected ~= nil then
|
||||||
|
-- break
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- -- The result should be that Zone1 would be more probable selected than Zone2.
|
||||||
|
--
|
||||||
function ZONE_BASE:GetZoneMaybe()
|
function ZONE_BASE:GetZoneMaybe()
|
||||||
self:F2()
|
self:F2()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user