Статически класс для хранения функций

Тема в разделе "Кодинг", создана пользователем idpro2, 14 дек 2017.

  1. idpro2

    idpro2 Соучастник

    Привет ребят!
    Интересует следующий вопрос - как сделать статический класс (или по просту класс со статическими функциями) которые можно будет вызывать за пределами класса внутри одного пакета? Я никак не могу найти подходящий пример, но думаю что подобное практикуется.
    Также хотелось бы понимать как именно использовать такие функции за пределами класса (может быть есть особенности синтаксиса при вызове)?
    Заранее спасибо
     
  2. Essence

    Essence Солдат

    Flame нравится это.
  3. idpro2

    idpro2 Соучастник

    Спасибо.

    Попробовал создать класс по примеру из ссылки. Но при компиляции вылазит ошибка You can only access default values of variables here

    Подскажите пожалуйста что я делаю не так

    Код функции:

    Код:
    static function int GetPlayersCount(alive)
    {
        local Controller Ctrl;
        local int count;
       
        for (Ctrl = Level.ControllerList; Ctrl != none; Ctrl = Ctrl.nextController)
        {
            if ((Ctrl.IsA('PlayerController')&& Ctrl.Pawn != none)
            {
                if (!alive || alive && Ctrl.Pawn.Health > 0)
                {
                    count++;
                }
            }
        }
       
        return count;
    }
     
  4. Flame

    Flame -Заслуженый кодер форума-

    Level.ControllerList
    Level то с чего возьмётся в этой функции? Тебе его тоже надо передать)
    Либо напрямую, либо как-нибудь через Pawn или там контроллер
    Типа, Pawn.Level
     
    Последнее редактирование: 24 фев 2018
    Essence нравится это.
  5. Freddy

    Freddy Капо

    Обычно статический класс - это набор каких-то супер утилитарных функций, типа журналирования или конвертирования объектов базовых типов. Чаще используются статические методы классов, которые собственно и оперируют объектами этих классов "извне". Конечно на движке есть своя необходимость реализации статических функций для того, что бы не лезть внутрь самого движка. Но мое мнение, что если в статическую функцию передается и объект и субъект, то лучше делать наследование
     
    Flame нравится это.
  6. Flame

    Flame -Заслуженый кодер форума-

    Ну фиг знает насчёт наследования. Если у него есть необходимость считать живых игроков в каждом втором мутаторе - что ему наследовать? Унаследовать геймтайп и там ввести эту функцию, а потом из всех мутаторов звать? Но тогда будет зависимость этих мутаторов от пакета с новым геймтайпом.
    Ну правда в текущем варианте получается зависимость от пакета с утилитами, что тоже так себе, конечно.
    Но если функция используется только в мутаторах, то можно объединить мутаторы в один пакет и добавить туда файл утилит - будет не так и коряво)
     
    idpro2 нравится это.
  7. idpro2

    idpro2 Соучастник

    спасибо за помощь

    хотел еще поинтересоваться, как с функциями быть понятно, а вот как хранить глобальные константы на уровне пакета?
     
    Последнее редактирование: 3 мар 2018
  8. Freddy

    Freddy Капо

    через константы и хранить
     
  9. Flame

    Flame -Заслуженый кодер форума-

    Не очень понял что ты хочешь
    Пример какой-нибудь давай