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:
parent
48384ac758
commit
ac72e6fad2
@ -4606,20 +4606,39 @@ end
|
||||
--- Get a random zone from the set.
|
||||
-- @param #SET_ZONE self
|
||||
-- @return Core.Zone#ZONE_BASE The random Zone.
|
||||
-- @return #nil if no zone in the collection.
|
||||
function SET_ZONE:GetRandomZone()
|
||||
|
||||
local Index = self.Index
|
||||
local ZoneFound = nil
|
||||
|
||||
while not ZoneFound do
|
||||
local ZoneRandom = math.random( 1, #Index )
|
||||
ZoneFound = self.Set[Index[ZoneRandom]]
|
||||
end
|
||||
if self:Count() ~= 0 then
|
||||
|
||||
return ZoneFound
|
||||
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
|
||||
local ZoneRandom = math.random( 1, #Index )
|
||||
ZoneFound = self.Set[Index[ZoneRandom]]:GetZoneMaybe()
|
||||
end
|
||||
|
||||
return ZoneFound
|
||||
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.
|
||||
-- All the zones starting with the given prefixes will be included within the set.
|
||||
|
||||
@ -341,6 +341,27 @@ end
|
||||
-- @param #ZONE_BASE self
|
||||
-- @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.
|
||||
-- @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()
|
||||
self:F2()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user