Перейти к содержанию

Сферы влияния

Ради синхронизации в мультиплеере и в записанных демо все классы в мире принадлежат той или иной "сфере влияния" внутри движка — к миру, к интерфейсу или к общим данным. В оригинале эта система называется "Scoping", её также можно перевести как "принадлежность".

play

Любой объект непосредственно игрового мира — актор, Thinker, LineTracer и так далее.

Синтаксис объявления для методов (уточнить: кейворд можно ставить и до, и после объявления):

play void Something() {
    // ...
}

Синтаксис объявления для класса:

class Something play {
    // ...
}

Наследовать от класса, принадлежащего игровому миру, класс другой области влияния нельзя.

ui

Любой объект пользовательского интерфейса. Не записывается в демо и не передаётся кому-либо в мультплеере.

Синтаксис объявления для методов (уточнить: кейворд можно ставить и до, и после объявления):

ui void Something() {
    // ...
}

Синтаксис объявления для класса:

class Something ui {
    // ...
}

Также, как и в play, изменить область влияния при наследовании нельзя.

data

Всё, что не относится к предыдущим двум пунктам; просто некие нейтральные данные.

Синтаксис объявления для методов ("очищаем" предыдущую назначенную область влияния):

clearscope void Something() {
    // ...
}

Любой класс, не наследованный от play или ui, по умолчанию принадлежит сфере влияния данных — поэтому ключевого слова для классов нет. От класса данных можно наследовать в обе других сферы влияния — и в play, и в ui.

Таблица взаимодействий

Если не указано чего-либо иного явно, то все методы внутри класса с модификатором "play" будут относиться к игровому миру; все методы внутри класса с модификатором "ui" — к интерфейсу; все методы в классах без модификаторов — соответственно, к данным.

Далее представлена таблица возможности взаимодействия разных сфер влияния друг с другом. При "Полном доступе" можно делать с целевым объектом всё, что может осуществить язык: читать и записывать в переменные, вызывать методы, вызывать конструкторы. Если стоит "Только чтение" — можно только считывать переменные, без записи в них и без возможности вызова методов.

…Вызывается play …Вызывается ui …Вызывается data
Из-под play Полный доступ - Полный доступ
Из-под ui Только чтение Полный доступ Полный доступ
Из-под data Только чтение - Полный доступ

Из-под play:

  • Можно свободно читать/записывать и в play, и в data;
  • Не удастся сделать хоть что-нибудь с пользовательским интерфейсом.

Из-под ui:

  • Свободное чтение/запись в ui и в data;
  • Можно только видеть игровую вселенную (но не вызывать play-методы!).

Из-под data:

  • Нет ограничений на чтение/запись в свою область влияния — в data;
  • Игровую вселенную можно лишь видеть (вызывать play-методы также нельзя);
  • ui недоступен вовсе.

По той же причине невозможно создавать классы, принадлежащие к той или иной сфере влияния, внутри не взаимодействующих с ней сфер (к примеру, play из-под ui).


(Эта же таблица на ZDoom Wiki.)