Maxscript - Как я могу работать с первым, N-м и последним экземпляром массива источников света, а также с любыми уникальными источниками света? - PullRequest
0 голосов
/ 20 октября 2019

Как пройти через массив lightAr и работать с:

  1. 1-й экземпляр источника света.
  2. N-й или последний экземпляр источника света.
  3. Последний экземпляр источника света.
  4. Любой уникальный источник (и).

Типичным примером являются 5 экземпляров и 2 уникальных источника света:

  1. Я хочу экспортировать значение первого экземпляра источника.
  2. Для 2-го и 4-го экземпляров источника экспортировать их значения.
  3. Для последнего источника экспортировать его значение.
  4. Затем экспортируйте значения для уникальных источников света. * Это не проблема.

Я хочу, чтобы переменные theName и thePos содержались в локальной области видимости внутри первого цикла for.


Isлучший способ сделать это с помощью цикла while или есть другой способ добиться этого?

Вот код, который у меня есть на данный момент ниже, с дальнейшими комментариями внутри.

(
  clearListener()

  local lightAr = for i in lights where not i.isHidden collect i
  --Loop through the array lightAr
  for i=1 to lightAr.count do
  (
    --Here I want to assign theName variable and the position outside the if else statement.
    theName = lightAr[i].name as string
    thePos = lightAr[i].pos as string
    --For the lights that are instances.
    if (InstanceMgr.GetInstances lightAr[i] &lts > 1) then
    (
      --This will do stuff to the first found instance.
      for m=1 to 1 where m == 1 do print ("1st instance:\t\t\t" + lts[m].name as string + " - " + theName + thePos)
      --This will do stuff to the Nth found instance.
      for m=1 to lts.count where m > 1 and m < lts.count do print ("Nth instance:\t\t\t" + lts[m].name as string + " - " + theName + thePos)
      --This will do stuff to the last found instance.
      for m=1 to lts.count where m == lts.count do print ("Last instance:\t\t\t" + lts[m].name as string + " - " + theName + thePos)
      --If this line below is unblocked then this will only repeat for the first group of light instances.
      --How do I get around this problem.
      --exit
      ) else (
      --And this will do stuff of the unique lights in the lightAr array.
      --This is fine.
      print ("Unique light:\t\t\t" + lightAr[i].name as string + " - " + theName + thePos)
      )

      )
  free lightAr ; ok
  free lts ; ok
  )
...