Добавлен , опубликован

cJass

Содержание:

7.1 Перечисления

Как известно, перечисления - это тип который может содержать значения указанные программистом. Целочисленные именованные константы могут быть определены как члены перечисления. Например,
  enum { RED, GREEN, BLUE }
определяет три целочисленные константы и присваивает им значения. По умолчанию, значения присваиваются по порядку начиная с нуля, т.е. приведенное перечисление аналогично следующим макросам:
  define {
      RED = 0
      GREEN = 1
      BLUE = 2
  }
Перечисление также может быть именованным:
  enum (color) { RED, GREEN, BLUE }
Именуемые перечисления имеют собственные счетчики — в каждом из них значения элементов будут начинаться с нуля. При использовании же нескольких безымянных перечислений, значения их элементов будут продолжать друг друга:
  enum { FOOTMAN, MAGE }            // FOOTMAN == 0, MAGE == 1
  enum (color) { RED, GREEN, BLUE } // RED == 0, GREEN == 1, BLUE == 2
  enum { WARDEN, ARCHER}            // WARDEN == 2, ARCHER == 3
Перечисления поддерживают JASS2-подобный синтаксис записи:
  enum (color)
      RED
      GREEN
      BLUE
  endenum
Перечисления могут быть использованы в условиях при условной компиляции:
  library SomeLib {
  
      enum (LIB_SPACE) { STD_SPACE, ALT_SPACE, DEBUG_SPACE }
  
      // choose your namespace !
      define private SOMELIB_SPACE = STD_SPACE // what space to use 
  
      #if SOMELIB_SPACE == STD_SPACE
          void SomeFunc(int a) {
              // base
          }
      #elseif SOMELIB_SPACE == ALT_SPACE
          void SomeFunc(int a) {
              // alt
          }
      #elseif SOMELIB_SPACE == DEBUG_SPACE
          void SomeFunc(int a) {
              // debug
          }
      #endif
  }
Или вместо именованных констант как маркеры для выполнения некоторых действий:
  enum (moves) { MOVING_ANIM_STATE_WALK, MOVING_ANIM_STATE_WALKBACK, MOVING_ANIM_STATE_STOP }
  
  void MovingAnimationControl (unit u, integer state) {
      if (state == MOVING_ANIM_STATE_WALK) {
          SetUnitTimeScale(u, 1)
          SetUnitAnimationByIndex(u, "Walk" )
      } elseif (state == MOVING_ANIM_STATE_WALKBACK) {
          SetUnitTimeScale(u, -1)
          SetUnitAnimationByIndex(u, "Walk" )
      } elseif (state == MOVING_ANIM_STATE_STOP) {
          SetUnitAnimation(u,"Stand")
          SetUnitTimeScale(u, 1)
      }
  }

`
ОЖИДАНИЕ РЕКЛАМЫ...