# WC3 Modding Information CenterFor your WC3 needs...

### Random Iteration

AGD · 5419

0 Members and 1 Guest are viewing this topic.

Rating

Average Score - 5 / 5

« Created: February 28, 2018, 12:59:36 PM by moyack »

##### Random Iteration
on: September 04, 2016, 09:16:22 AM
Category: Execution
Language: vJASS

This snippet is a replacement to the BJ function with the advantage of being able to directly enumerate random number of units in a group instead of creating another subgroup of an already existing group. Notice that this is not the same as in which case the enumerated units are not random but is based on which units are picked first.

Code: jass
1. library RandomIteration
2.
3.     globals
4.         private group tempGroup = CreateGroup()
5.         private integer unitCount
6.     endglobals
7.
8.     private function EnumUnits takes nothing returns boolean
10.         set unitCount = unitCount + 1
11.         return false
12.     endfunction
13.
14.     function EnumRandomUnitsInRangeCounted takes group g, real x, real y, real radius, integer limit returns nothing
15.         local real chance
16.         local unit u
17.         call GroupEnumUnitsInRange(g, x, y, radius, Filter(function EnumUnits))
18.         set chance = I2R(limit)/I2R(unitCount)
19.         loop
20.             set u = FirstOfGroup(tempGroup)
21.             exitwhen u == null or limit == 0
22.             call GroupRemoveUnit(tempGroup, u)
23.             if GetRandomReal(0, 1) <= chance then
25.                 set limit = limit - 1
26.             endif
27.         endloop
28.         set u = null
29.     endfunction
30.
31.     function EnumRandomUnitsInRectCounted takes group g, rect r, integer limit returns nothing
32.         local real chance
33.         local unit u
34.         call GroupEnumUnitsInRect(g, r, Filter(function EnumUnits))
35.         set chance = I2R(limit)/I2R(unitCount)
36.         loop
37.             set u = FirstOfGroup(tempGroup)
38.             exitwhen u == null or limit == 0
39.             call GroupRemoveUnit(tempGroup, u)
40.             if GetRandomReal(0, 1) <= chance then
42.                 set limit = limit - 1
43.             endif
44.         endloop
45.         set u = null
46.     endfunction
47.
48. endlibrary
« Last Edit: December 19, 2017, 10:58:51 PM by moyack »

##### Re: Random Iteration
Reply #1 on: September 04, 2016, 10:22:47 AM

I just did some small aesthetics for your post. Interesting snippet