Сповіщення
Очистити все

Опис класу GameObject. Частина 1


Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому
 

Game_object – клас для доступу до онлайнових (клієнтських) об'єктів. Причому один клас є інтерфейсом для різних об'єктів. Розробники не придумали нічого кращого, як узяти та об'єднати в одному класі всі інтерфейси всіх клієнтських об'єктів: актора, сталкерів, монстрів, фізичних об'єктів, автомобілів та лампочок, взагалі всіх. Дивнішого і взагалі кажучи потворного об'єктно-орієнтованого дизайну я ще не бачив. По-перше, клас вийшов абсолютно неосяжним - три сотні методів! По-друге, виклик не підходящого методу для довільно взятого об'єкта призводить до абсолютно непередбачуваних результатів. У кращому випадку нічого не буде, а найчастіше - буде виліт, причому зазвичай без лога. Нарешті, опис цього класу в lua_help зовсім невиразне (як утім і всіх інших класів): типи значень, що повертаються, опущені, типи вхідних аргументів зазначені не завжди, а про призначення більшості методів можна тільки ворожити. Пропоную дещо більш виразний опис. Методи розсортовані за клієнтськими класами, до об'єктів яких можна застосувати метод. Також нагадую, що класи при наслідуванні також успадковують і всі методи батьківського класу.

ANY CLASS

Ці методи підходять до об'єктів будь-якого класу

 

CObject

Оскільки всі ігрові об'єкти успадковують від класу CObject , такі методи можна застосовувати до будь-яких об'єктів.

Додано в ЗП:

CUsableScriptObject

Оскільки всі ігрові об'єкти успадковують від класу CUsableScriptObject , такі методи можна застосовувати до будь-яких об'єктів.

CPhysicsShellHolder

Ці методи можна застосовувати для всіх об'єктів, крім аномалій, переходів, ящиків з інвентарем та прожекторів - всього того, що не має фізичної оболонки.

CEntity

Ці методи можна застосовувати всім живих об'єктів (сталкери, монстри, актер), вертольотів і машин.

CEntityAlive

Ці методи можна застосовувати лише для живих об'єктів – сталкери, монстри (крім ворон), актор. Властивості об'єктів класу:

float satiety;    // ситість є, але чомусь не прописаний в lua_help 
float bleeding;   // кровотеча. тільки ЗП 
float health;     // здоров'я 0..1 
float morale;     // Мораль 
float power;      // Сила 
float psy_health; // Пси-здоров'я 
float radiation;  // Радіація

всі характеристики на запис працюють негаразд, як у читання. При записі значення має сенс зміни відповідної якості. Тобто. якщо записати 0.1 в health, це збільшить його на 0.1.


   
Цитата
Ранг:
Майстер
Роль:
Гість
Записи:
752
Приєднався:
2 роки тому

   
ВідповіcтиЦитата